diff --git a/.vagrant-scripts/plinth-user-permissions.py b/.vagrant-scripts/plinth-user-permissions.py deleted file mode 100755 index 796b84648..000000000 --- a/.vagrant-scripts/plinth-user-permissions.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/python3 -# -*- mode: python -*- -# SPDX-License-Identifier: AGPL-3.0-or-later -"""Set required permissions for user "plinth" to run plinth in dev setup.""" - -import pathlib - -content = ''' -Cmnd_Alias FREEDOMBOX_ACTION_DEV = /usr/share/plinth/actions/actions, /freedombox/actions/actions -Defaults!FREEDOMBOX_ACTION_DEV closefrom_override -plinth ALL=(ALL:ALL) NOPASSWD:SETENV : FREEDOMBOX_ACTION_DEV -fbx ALL=(ALL:ALL) NOPASSWD : ALL -''' - -sudoers_file = pathlib.Path('/etc/sudoers.d/01-freedombox-development') -sudoers_file.write_text(content) diff --git a/HACKING.md b/HACKING.md index 981b06ce5..9c76f3dcc 100644 --- a/HACKING.md +++ b/HACKING.md @@ -66,7 +66,7 @@ development environment inside a systemd-nspawn container. folder: (This step requires at least 16GB of free disk space) ```bash - host$ ./container up + host$ ./container start ``` 1. To run unit tests: @@ -97,20 +97,20 @@ development environment inside a systemd-nspawn container. 1. Using an environment variable. ```bash - host$ DISTRIBUTION=stable ./container up + host$ DISTRIBUTION=stable ./container start host$ DISTRIBUTION=stable ./container ssh ``` ```bash host$ export DISTRIBUTION=stable - host$ ./container up + host$ ./container start host$ ./container ssh ``` 2. Using the `--distribution` option for each command. ```bash - host$ ./container up --distribution=stable + host$ ./container start --distribution=stable host$ ./container ssh --distribution=stable ``` @@ -131,7 +131,7 @@ used simultaneously as they all use different disk images. example, to bring up a virtual machine instead of a container run: ```bash - host$ ./container up --machine-type=vm + host$ ./container start --machine-type=vm ``` #### Using after Setup @@ -164,9 +164,9 @@ Note: This development container has automatic upgrades disabled by default. #### Troubleshooting -* Sometimes `host$ ./container destroy && ./container up` doesn't work. In such +* Sometimes `host$ ./container destroy && ./container start` doesn't work. In such cases, try to delete the hidden `.container` folder and then `host$ - ./container up`. + ./container start`. * Not all kinds of changes are automatically updated. Try `guest$ sudo mount -o remount /freedombox`. * I am getting an error that says `lo` is not managed by Network Manager @@ -178,7 +178,7 @@ Note: This development container has automatic upgrades disabled by default. ```bash host$ sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf host$ sudo service network-manager restart - host$ ./container destroy && ./container up + host$ ./container destroy && ./container start ``` * File/directory not found errors when running tests can be fixed by clearing `__pycache__` directories. @@ -416,7 +416,7 @@ for more details. ### Translating literals (contributing translations) The easiest way to start translating is with your browser, by using -[Weblate](https://hosted.weblate.org/projects/freedombox/plinth/). +[Weblate](https://hosted.weblate.org/projects/freedombox/freedombox/). Your changes will automatically get pushed to the code repository. Alternatively, you can directly edit the `.po` file in your language directory diff --git a/INSTALL.md b/INSTALL.md index 19d35cb38..d4d8fcce0 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -35,7 +35,7 @@ FreedomBox [Manual](https://wiki.debian.org/FreedomBox/Manual/)'s 3. Access FreedomBox UI: - UI should be accessible at http://localhost:8000/plinth + UI should be accessible at http://localhost:8000/freedombox If you are installing FreedomBox Service (Plinth) for development purposes, see HACKING.md instead. diff --git a/Makefile b/Makefile index f870aa9be..30ef0d97e 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,8 @@ DISABLED_APPS_TO_REMOVE := \ tahoe \ mldonkey \ i2p \ - ttrss + ttrss \ + sso APP_FILES_TO_REMOVE := $(foreach app,$(DISABLED_APPS_TO_REMOVE),$(ENABLED_APPS_PATH)/$(app)) @@ -101,11 +102,12 @@ install: $(INSTALL) -d $(DESTDIR)$${lib_dir} && \ rm -rf $(DESTDIR)$${lib_dir}/plinth $(DESTDIR)$${lib_dir}/plinth*.dist-info && \ mv $${temp}/plinth $${temp}/plinth*.dist-info $(DESTDIR)$${lib_dir} && \ - rm -f $(DESTDIR)$${lib_dir}/plinth*.dist-info/COPYING.md && \ + rm -f $(DESTDIR)$${lib_dir}/plinth*.dist-info/licenses/COPYING.md && \ rm -f $(DESTDIR)$${lib_dir}/plinth*.dist-info/direct_url.json && \ $(INSTALL) -D -t $(BIN_DIR) bin/plinth $(INSTALL) -D -t $(LIB_DIR)/freedombox bin/freedombox-privileged $(INSTALL) -D -t $(BIN_DIR) bin/freedombox-cmd + $(INSTALL) -D -t $(BIN_DIR) bin/freedombox-change-password # Static web server files rm -rf $(STATIC_FILES_DIRECTORY) @@ -229,7 +231,7 @@ provision-dev: sshpass bash-completion wait-while-first-setup: - while [ x$$(curl -k https://localhost/plinth/status/ 2> /dev/null | \ + while [ x$$(curl -k https://localhost/freedombox/status/ 2> /dev/null | \ json_pp 2> /dev/null | grep 'is_first_setup_running' | \ tr -d '[:space:]' | cut -d':' -f2 ) != 'xfalse' ] ; do \ sleep 1; echo -n .; done diff --git a/Vagrantfile b/Vagrantfile index 366097b57..7534b7549 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -28,17 +28,11 @@ Vagrant.configure(2) do |config| SHELL config.vm.provision "tests", run: "never", type: "shell", path: "plinth/tests/functional/install.sh" config.vm.post_up_message = "FreedomBox virtual machine is ready -for development. Plinth will be available at https://localhost:4430/plinth +for development. Plinth will be available at https://localhost:4430/freedombox (with an invalid SSL certificate). To watch logs: $ vagrant ssh $ sudo freedombox-logs " - config.trigger.after [:up, :resume, :reload] do |trigger| - trigger.info = "Set plinth user permissions for development environment" - trigger.run_remote = { - path: ".vagrant-scripts/plinth-user-permissions.py" - } - end config.vm.boot_timeout=1200 end diff --git a/bin/freedombox-change-password b/bin/freedombox-change-password new file mode 100755 index 000000000..d9e2f9dac --- /dev/null +++ b/bin/freedombox-change-password @@ -0,0 +1,61 @@ +#!/usr/bin/python3 +# SPDX-License-Identifier: AGPL-3.0-or-later +""" +Utility to change user password in FreedomBox's Django database. + +Usage: +$ freedombox-change-password +""" + +import argparse +import getpass +import sys + +import plinth.web_framework +from plinth.modules.users import privileged + + +def main(): + """Ask for new password, setup Django and update a user's password.""" + try: + plinth.web_framework.init() + except Exception: + _print('Error initializing Django.') + return + + parser = argparse.ArgumentParser() + parser.add_argument('username', + help='Username of the account to change password for') + args = parser.parse_args() + + username = args.username + password = getpass.getpass('Enter new password: ') + + try: + _change_password(username, password) + privileged._set_user_password(username, password) + privileged._set_samba_user(username, password) + _print('Password updated in web interface, LDAP, and samba databases.') + except Exception as exception: + _print('Error setting password:', str(exception)) + + +def _print(*args, **kwargs): + """Write to stderr.""" + print(*args, **kwargs, file=sys.stderr) + + +def _change_password(username: str, password: str): + """Update the password in SQLite database file.""" + from django.contrib.auth.models import User + try: + user = User.objects.get(username=username) + user.set_password(password) + user.save() + except User.DoesNotExist: + _print('User account does not exist:', username) + raise + + +if __name__ == '__main__': + main() diff --git a/container b/container index 0edd094d0..a794b0c68 100755 --- a/container +++ b/container @@ -1064,7 +1064,7 @@ Terminal login : sudo machinectl login fbx-{distribution} Open a root shell : sudo machinectl shell fbx-{distribution} Shutdown : {script} stop {options} Destroy : {script} destroy {options} -Reset : {script} destroy {options}; {script} up {options}''' +Reset : {script} destroy {options}; {script} start {options}''' logger.info(message) diff --git a/data/etc/apache2/conf-available/freedombox-tls.conf b/data/etc/apache2/conf-available/freedombox-tls.conf index 1a3cf184b..1593fa561 100644 --- a/data/etc/apache2/conf-available/freedombox-tls.conf +++ b/data/etc/apache2/conf-available/freedombox-tls.conf @@ -12,6 +12,7 @@ # Don't redirect for onion sites as it is not needed and leads to # unnecessary warning. RewriteCond %{HTTP_HOST} !^.*\.onion$ [NC] + RewriteCond %{REQUEST_URI} !^/freedombox/apache/discover-idp/$ [NC] ReWriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] diff --git a/data/etc/apache2/conf-available/freedombox.conf b/data/etc/apache2/conf-available/freedombox.conf index fffff0490..292189481 100644 --- a/data/etc/apache2/conf-available/freedombox.conf +++ b/data/etc/apache2/conf-available/freedombox.conf @@ -39,16 +39,16 @@ ## -## Redirect traffic on home to /plinth as part of turning the machine +## Redirect traffic on home to /freedombox as part of turning the machine ## into FreedomBox server. Plinth then acts as a portal to reach all ## other services. ## - RedirectMatch "^/$" "/plinth" + RedirectMatch "^/$" "/freedombox" ## -## On all sites, provide FreedomBox on a default path: /plinth +## On all sites, provide FreedomBox on a default path: /freedombox ## ## Requires the following Apache modules to be enabled: ## mod_headers @@ -56,7 +56,8 @@ ## mod_proxy_http ## - ProxyPass http://127.0.0.1:8000/plinth + ProxyPass http://127.0.0.1:8000/freedombox + ProxyPreserveHost On ## Send the scheme from user's request to enable Plinth to redirect ## URLs, set cookies, set absolute URLs (if any) properly. RequestHeader set X-Forwarded-Proto 'https' env=HTTPS @@ -70,7 +71,20 @@ RequestHeader unset X-Forwarded-For - ProxyPass http://127.0.0.1:8000/plinth + ProxyPass http://127.0.0.1:8000/freedombox + ProxyPreserveHost On + RequestHeader set X-Forwarded-Proto 'https' env=HTTPS + RequestHeader unset X-Forwarded-For + + + ProxyPass http://127.0.0.1:8000/freedombox/o/.well-known/openid-configuration + ProxyPreserveHost On + RequestHeader set X-Forwarded-Proto 'https' env=HTTPS + RequestHeader unset X-Forwarded-For + + + ProxyPass http://127.0.0.1:8000/freedombox/o/.well-known/jwks.json + ProxyPreserveHost On RequestHeader set X-Forwarded-Proto 'https' env=HTTPS RequestHeader unset X-Forwarded-For @@ -82,7 +96,7 @@ RewriteEngine On - RewriteRule /favicon\.ico$ "/plinth/static/theme/img/favicon.ico" [PT] + RewriteRule /favicon\.ico$ "/freedombox/static/theme/img/favicon.ico" [PT] diff --git a/debian/changelog b/debian/changelog index 06ded1296..2999dcf9a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,186 @@ +freedombox (26.4) unstable; urgency=medium + + [ Joseph Nuthalapati ] + * ui: Dismiss notifications without page reload + + [ Sunil Mohan Adapa ] + * ui: Refactor notification delete buttons to avoid repeating code + * ui: Add animation for notification dismissal + * actions, privileged_daemon: Drop some unused global statements + * backups: Avoid some repeated text in form help text + * backups: Fix issue with Javascript in add remote location form + * backups: Show/hide form elements instead of disabling for simplicity + * backups: Tweak appearance of add remote location form + * backups: tests: Simplify functional test using more classes + * backups: Minor refactoring + * backups: Simplify handling of migration to SSH keys + * backups: Create .ssh folder before creating SSH key + * backups: Fix showing proper error for incorrect passphrase + * backups: Create a better comment in the generated SSH key file + * backups: Fix type checking errors + * action_utils: Implement utility to change umask temporarily + * quassel: Explicitly set permissions on the domain configuration file + * letsencrypt: When copying certificate reset the umask reliably + * doc/dev: Set new theme for developer documentation + * action_utils: Fix issue with type checking a generator + * tests: functional: Increase systemd rate limits for starting units + * js: When page load fails during install, show it to user + * tests: functional: Fix reloading error page during install/uninstall + * locale/de: Fix several translations with HTML links (German) + * locale/bg: Fix several translations with HTML links (Bulgarian) + * bin: Add tool to change FreedomBox password in Django database + * ejabberd: Fix setting up certificates for multiple domains + * gitweb: Fix issue with running post init due to missing method + * wireguard: Fix format when showing multiple endpoints of the server + * wireguard: Fix showing default route setting in server edit form + * wireguard: Show status of default route in server information page + * wireguard: Accept/use netmask with IP address for server connection + * README/HACKING: Update weblate project path to /freedombox + * *: Remove some absolute file paths in SVGs + * matrixsynapse: Update apache config to proxy Synapse client API + * cfg: Drop unused config_dir option + * cfg: Drop unused actions_dir option + * Vagrantfile: Drop unnecessary sudo configuration for actions + * pyproject: Use new format to specify licenses + * action_utils: Drop support for link-local IPv6 addresses + * debian: Ensure that gbp creates a clean tarball prior to build + * syncthing: tests: Fix tests by allowing rapid restarts + * web_server: Log requests to WSGI app + * *: Update URL base from /plinth to /freedombox + * tests: functional: Fix expecting FreedomBox to be home page + * web_framework: Allow FreedomBox apps to override templates + * templates: Allow building pages without navigation bar and footer + * apache: Preserve host header when proxying to service + * oidc: New app to implement OpenID Connect Provider + * oidc: Style the page for authorizing an OIDC app + * apache: Implement protecting apps using OpenID Connect + * featherwiki: Use OpenID Connect instead of pubtkt based SSO + * syncthing: Use OpenID Connect instead of pubtkt based SSO + * searx: Use OpenID Connect instead of pubtkt based SSO + * rssbridge: Use OpenID Connect instead of pubtkt based SSO + * email: Use OpenID Connect instead of pubtkt based SSO + * calibre: Use OpenID Connect instead of pubtkt based SSO + * deluge: Use OpenID Connect instead of pubtkt based SSO + * gitweb: Use OpenID Connect instead of pubtkt based SSO + * tiddlywiki: Use OpenID Connect instead of pubtkt based SSO + * wordpress: Use OpenID Connect instead of pubtkt based SSO when private + * transmission: Use OpenID Connect instead of pubtkt based SSO + * doc/dev: Use OpenID Connect instead of pubtkt based SSO + * sharing: Use OpenID Connect instead of pubtkt based SSO + * sso: Merge into users module, drop pubtkt related code + * apache: Fix diagnosing URLs protected by OpenID Connect + + [ 大王叫我来巡山 ] + * Translated using Weblate (Chinese (Simplified Han script)) + + [ Burak Yavuz ] + * Translated using Weblate (Turkish) + + [ Coucouf ] + * Translated using Weblate (French) + * Translated using Weblate (French) + + [ Besnik Bleta ] + * Translated using Weblate (Albanian) + + [ Dietmar ] + * Translated using Weblate (German) + + [ James Valleroy ] + * backups: Generate SSH client key if needed + * backups: Display SSH public key when adding remote + * backups: Copy SSH client public key to remote + * backups: Use SSH key instead of password + * backups: Use selected SSH credential for remote + * backups: Test adding/removing remote location + * backups: Arrange form for adding remote location + * backups: Migrate to SSH key auth when mounting + * Translated using Weblate (Greek) + * mumble: murmurd renamed to mumble-server + * Translated using Weblate (Tamil) + * locale: Update translation strings + * doc: Fetch latest manual + * apache: Fix check_url test + + [ Frederico Gomes ] + * container: Align terminology in printed banner + * wireguard: filter .local addresses from showClient view + * wireguard: improved server section UX flow + * wireguard: show server vpn ip in show client page + * wireguard: Fix split tunneling + * miniflux: Revert workaround for a packaging bug with DB connection + * db: Create a utility to get credentials from dbconfig + * miniflux: Get credentials from dbconfig-common directly + + [ Pierfrancesco Passerini ] + * Translated using Weblate (Italian) + + [ Daniel Wiik ] + * Translated using Weblate (Swedish) + * Translated using Weblate (Swedish) + + [ kosagi ] + * Translated using Weblate (Catalan) + + [ Jiří Podhorecký ] + * Translated using Weblate (Czech) + + [ Isak ] + * Translated using Weblate (Swedish) + + [ Βασίλης Χατζηκαμάρης ] + * Translated using Weblate (Greek) + + [ Benedek Nagy ] + * doc/dev: always have an up-to-date copyright year + + [ தமிழ்நேரம் ] + * Translated using Weblate (Tamil) + + -- James Valleroy Mon, 02 Mar 2026 21:35:46 -0500 + +freedombox (26.3) unstable; urgency=medium + + [ Frederico Gomes ] + * wireguard: Add 'Start Server' button + * docs: Update container script usage + * wireguard: Show next available client IP in Add Client form + * wireguard: Show server endpoint on main app page + + [ James Valleroy ] + * wireguard: Update functional tests to handle Start Server button + * lintian: Remove mismatched overrides + * Makefile: Fix removing extra license file + * debian: Follows policy 4.7.3 + * debian: Remove default Rules-Requires-Root + * debian: Remove preinst script + * debian: Update copyright years + * locale: Update translation strings + * doc: Fetch latest manual + + [ Ettore Atalan ] + * Translated using Weblate (German) + + [ Sunil Mohan Adapa ] + * debian: Ignore lintian warning: service file missing Install section + * wireguard: Remove NM connections when app is uninstalled + * ui: Use HTMX to update notifications on partial page updates + + [ Joseph Nuthalapati ] + * ui: Add HTMX as a dependency + * ui: Use HTMX to eliminate full page reloads + + [ Burak Yavuz ] + * Translated using Weblate (Turkish) + + [ Pierfrancesco Passerini ] + * Translated using Weblate (Italian) + + [ 大王叫我来巡山 ] + * Translated using Weblate (Chinese (Simplified Han script)) + + -- James Valleroy Mon, 02 Feb 2026 20:41:30 -0500 + freedombox (26.2~bpo13+1) trixie-backports; urgency=medium * Rebuild for trixie-backports. diff --git a/debian/control b/debian/control index 7083831d4..fa2df974c 100644 --- a/debian/control +++ b/debian/control @@ -1,6 +1,5 @@ Source: freedombox Section: web -Priority: optional Maintainer: FreedomBox packaging team Uploaders: Tzafrir Cohen , @@ -18,6 +17,7 @@ Build-Depends: e2fsprogs, gir1.2-nm-1.0, libjs-bootstrap5, + libjs-htmx, # Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0 node-popper2, pybuild-plugin-pyproject, @@ -35,6 +35,7 @@ Build-Depends: python3-django-captcha, # Explictly depend on ipware as it is optional dependecy of django-axes python3-django-ipware, + python3-django-oauth-toolkit, python3-django-stronghold, python3-gi, python3-markupsafe, @@ -56,11 +57,10 @@ Build-Depends: sshpass, xmlto, xsltproc -Standards-Version: 4.6.2 +Standards-Version: 4.7.3 Homepage: https://salsa.debian.org/freedombox-team/freedombox Vcs-Git: https://salsa.debian.org/freedombox-team/freedombox.git -b debian/trixie-backports Vcs-Browser: https://salsa.debian.org/freedombox-team/freedombox -Rules-Requires-Root: no Package: freedombox Breaks: @@ -89,6 +89,7 @@ Depends: # For gdbus used to call hooks into service libglib2.0-bin, libjs-bootstrap5, + libjs-htmx, lsof, netcat-openbsd, network-manager, @@ -108,6 +109,7 @@ Depends: python3-django-captcha, # Explictly depend on ipware as it is optional dependecy of django-axes python3-django-ipware, + python3-django-oauth-toolkit, python3-django-stronghold, python3-gi, python3-markupsafe, diff --git a/debian/copyright b/debian/copyright index 7dcacf8da..52aac5e7c 100644 --- a/debian/copyright +++ b/debian/copyright @@ -2,7 +2,7 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Source: https://salsa.debian.org/freedombox-team/freedombox Files: * -Copyright: 2011-2025 FreedomBox Authors +Copyright: 2011-2026 FreedomBox Authors License: AGPL-3+ Files: plinth/modules/jsxc/static/icons/jsxc.png @@ -79,6 +79,7 @@ Files: plinth/modules/ejabberd/static/icons/ejabberd.png plinth/modules/rssbridge/static/icons/rssbridge.svg plinth/modules/zoph/static/icons/zoph.png plinth/modules/zoph/static/icons/zoph.svg + static/themes/default/img/application.svg static/themes/default/img/network-connection.svg static/themes/default/img/network-connection-vertical.svg static/themes/default/img/network-ethernet.svg @@ -358,7 +359,7 @@ License: LGPL-3+ or CC-BY-SA-3.0 Files: debian/* Copyright: 2013 Tzafrir Cohen - 2013-2024 FreedomBox Authors + 2013-2026 FreedomBox Authors License: GPL-2+ License: AGPL-3+ diff --git a/debian/freedombox.lintian-overrides b/debian/freedombox.lintian-overrides index b3a57a7da..362a24015 100644 --- a/debian/freedombox.lintian-overrides +++ b/debian/freedombox.lintian-overrides @@ -24,3 +24,7 @@ freedombox: package-contains-documentation-outside-usr-share-doc [usr/lib/python # meant for user. However, don't install to /usr/libexec and follow systemd # convention instead. freedombox: executable-in-usr-lib [usr/lib/freedombox/freedombox-privileged] + +# [Install] section is missing for the privileged daemon service because it is +# socket activated. +freedombox: systemd-service-file-missing-install-key [usr/lib/systemd/system/freedombox-privileged.service] diff --git a/debian/freedombox.preinst b/debian/freedombox.preinst deleted file mode 100755 index 0f04c2681..000000000 --- a/debian/freedombox.preinst +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh - -set -e - -case "$1" in - upgrade) - # Handle removing freedombox-setup-repositories.timer from 20.5. - if dpkg --compare-versions "$2" le 20.7; then - if [ -x "/usr/bin/deb-systemd-invoke" ]; then - deb-systemd-invoke stop freedombox-setup-repositories.timer >/dev/null 2>/dev/null || true - fi - - if [ -x "/usr/bin/deb-systemd-helper" ]; then - deb-systemd-helper purge freedombox-setup-repositories.timer >/dev/null || true - deb-systemd-helper unmask freedombox-setup-repositories.timer >/dev/null || true - fi - - if [ -d /run/systemd/system ]; then - systemctl daemon-reload - fi - fi - - # Handle removing freedombox-udiskie.service from 20.9. - if dpkg --compare-versions "$2" le 20.9; then - if [ -x "/usr/bin/deb-systemd-invoke" ]; then - deb-systemd-invoke stop freedombox-udiskie.service >/dev/null 2>/dev/null || true - fi - - if [ -x "/usr/bin/deb-systemd-helper" ]; then - deb-systemd-helper purge freedombox-udiskie.service >/dev/null || true - deb-systemd-helper unmask freedombox-udiskie.service >/dev/null || true - fi - - if [ -d /run/systemd/system ]; then - systemctl daemon-reload - fi - fi - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/debian/gbp.conf b/debian/gbp.conf index b5703967b..3dccbf60b 100644 --- a/debian/gbp.conf +++ b/debian/gbp.conf @@ -1,6 +1,9 @@ [DEFAULT] debian-branch = debian/trixie-backports +[buildpackage] +export-dir = ../build-area/ + [dch] git-log = --no-merges multimaint-merge = True diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides index 792a62ca9..1a38f893d 100644 --- a/debian/source/lintian-overrides +++ b/debian/source/lintian-overrides @@ -5,7 +5,4 @@ very-long-line-length-in-source-file * [doc/manual/*.raw.wiki:*] # Misc. files which can't be fixed to have short line lengths. -very-long-line-length-in-source-file * [plinth/modules/deluge/tests/data/sample.torrent:*] -very-long-line-length-in-source-file * [plinth/modules/transmission/tests/data/sample.torrent:*] -very-long-line-length-in-source-file * [doc/visual_design/FreedomBox-Logo.7z:*] very-long-line-length-in-source-file * [COPYING.md:*] diff --git a/doc/dev/README.rst b/doc/dev/README.rst index 66612209f..ced4e7295 100644 --- a/doc/dev/README.rst +++ b/doc/dev/README.rst @@ -19,6 +19,7 @@ Install the following Debian packages: * python3-sphinx * python3-sphinx-autobuild +* python3-sphinx-book-theme * python3-django * python3-django-axes * python3-django-captcha diff --git a/doc/dev/_static/logo.svg b/doc/dev/_static/logo.svg new file mode 100644 index 000000000..b51a72ede --- /dev/null +++ b/doc/dev/_static/logo.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/doc/dev/_templates/layout.html b/doc/dev/_templates/layout.html deleted file mode 100644 index aa02582ec..000000000 --- a/doc/dev/_templates/layout.html +++ /dev/null @@ -1,15 +0,0 @@ -{%- extends "alabaster/layout.html" %} - -{%- block footer %} - - -{% endblock %} diff --git a/doc/dev/conf.py b/doc/dev/conf.py index 0c0c3ffb7..a32dd2fe8 100644 --- a/doc/dev/conf.py +++ b/doc/dev/conf.py @@ -15,6 +15,7 @@ list see the documentation: http://www.sphinx-doc.org/en/master/config # import os import sys +from datetime import datetime import django @@ -26,7 +27,7 @@ django.setup() # pylint: disable=invalid-name project = 'FreedomBox' -copyright = '2021-2025, FreedomBox Authors' +copyright = f'2021-{datetime.now().year}' author = 'FreedomBox Authors' # The short X.Y version @@ -82,15 +83,23 @@ pygments_style = None # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = 'sphinx_book_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = { - 'fixed_sidebar': True, - 'show_related': True, + 'home_page_in_toc': True, + 'repository_provider': 'gitlab', + 'repository_url': 'https://salsa.debian.org/freedombox-team/freedombox/', + 'use_edit_page_button': True, + 'use_source_button': True, + 'use_repository_button': True, + 'use_issues_button': True, + 'path_to_docs': 'doc/dev/', + 'extra_footer': 'Licensed under the CC BY-SA 4.0 license.', } # Add any paths that contain custom static files (such as style sheets) here, @@ -221,3 +230,4 @@ autodoc_mock_imports = [ ] html_favicon = './_static/favicon.ico' +html_logo = './_static/logo.svg' diff --git a/doc/dev/tutorial/components.rst b/doc/dev/tutorial/components.rst index 5f89cd257..4eda87356 100644 --- a/doc/dev/tutorial/components.rst +++ b/doc/dev/tutorial/components.rst @@ -291,10 +291,8 @@ file ``transmission-plinth.conf``, add the following. ... - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "admin" "bit-torrent" - + Use AuthOpenIDConnect + Use RequireGroup bit-torrent Showing a shortcut in the front page diff --git a/doc/manual/en/Hardware.raw.wiki b/doc/manual/en/Hardware.raw.wiki index fa91d668d..7dfb6cabb 100644 --- a/doc/manual/en/Hardware.raw.wiki +++ b/doc/manual/en/Hardware.raw.wiki @@ -12,7 +12,17 @@ In addition to supporting various single board computers and other devices, any == Recommended Hardware == -On April 22nd, 2019, the !FreedomBox Foundation announced the [[https://freedomboxfoundation.org/buy/|sales]] of the Pioneer Edition !FreedomBox Home Server Kits. This is the recommended pre-installed hardware for all users who don't wish to build their own !FreedomBox by choosing the right components, downloading the image and preparing an SD card with !FreedomBox. +=== Libre Crafts FreedomBox === + +Libre Crafts in an endeavor from the !FreedomBox developers themselves to bring you a powerful !FreedomBox device capable of hosting even the most demanding home server needs. The device is crafted, tested, and delivered to you by !FreedomBox developers. Your purchase helps !FreedomBox development. + +This hardware features a powerful CPU, plenty of main memory, a fast OS disk, ability to add two high capacity hard disk drives, dual multi-gigabit Ethernet ports, all with a low power consumption. Use it to host all your photos, to backup all home devices, as a NAS, as home automation hub, as a desktop computer, and more all at once. + +|| [[FreedomBox/Hardware/LibreCrafts|{{attachment:libre-crafts.png|Libre Crafts FreedomBox|height=300}}]]<
> [[FreedomBox/Hardware/LibreCrafts|Libre Crafts FreedomBox]] || + +=== Olimex's FreedomBox Pioneer Edition === + +On April 22nd, 2019, the !FreedomBox Foundation announced the [[https://freedomboxfoundation.org/buy/|sales]] of the Pioneer Edition !FreedomBox Home Server Kits. This pre-installed hardware is for all users who don't wish to build their own !FreedomBox by choosing the right components, downloading the image and preparing an SD card with !FreedomBox. The kit includes all the hardware needed for launching a !FreedomBox home server on an Olimex A20-OLinuXino-LIME2 board. This product provides the perfect combination of open source hardware and free and open source software. By purchasing this product, you also support the !FreedomBox Foundation's efforts to create and promote its free and open source server software. diff --git a/doc/manual/en/PioneerEdition.raw.wiki b/doc/manual/en/PioneerEdition.raw.wiki index f6926f768..e06dfd8dd 100644 --- a/doc/manual/en/PioneerEdition.raw.wiki +++ b/doc/manual/en/PioneerEdition.raw.wiki @@ -25,7 +25,8 @@ The [[https://www.olimex.com/Products/OLinuXino/Home-Server/Pioneer-FreedomBox-H * an optional storage add-on for hard disk (HDD) or solid-state drive (SSD) === Recommended Hardware === -This is the hardware recommended for all users who just want a turn-key !FreedomBox, and '''don't''' want to '''build''' their own one. + +This is a hardware recommended for all users who just want a turn-key !FreedomBox, and '''don't''' want to '''build''' their own one. (Building your own !FreedomBox means some technical stuff like choosing and buying the right components, downloading the image and preparing the SD card). diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 679b05488..e5c23ea66 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,125 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 26.4 (2026-03-02) == + +=== Highlights === + + * backups: Enable key-based SSH authentication for remote backups + * oidc: New app to implement OpenID Connect Provider + * apache: Implement protecting apps using OpenID Connect + * wireguard: Improve server section user experience flow + +=== Other Changes === + + * *: Remove some absolute file paths in SVGs + * *: Update URL base from /plinth to /freedombox + * README/HACKING: Update weblate project path to /freedombox + * Vagrantfile: Drop unnecessary sudo configuration for actions + * action_utils: Drop support for link-local IPv6 addresses + * action_utils: Fix issue with type checking a generator + * action_utils: Implement utility to change umask temporarily + * actions, privileged_daemon: Drop some unused global statements + * apache: Fix diagnosing URLs protected by OpenID Connect + * apache: Preserve host header when proxying to service + * backups: Arrange form for adding remote location + * backups: Avoid some repeated text in form help text + * backups: Copy SSH client public key to remote + * backups: Create .ssh folder before creating SSH key + * backups: Create a better comment in the generated SSH key file + * backups: Display SSH public key when adding remote + * backups: Fix issue with Javascript in add remote location form + * backups: Fix showing proper error for incorrect passphrase + * backups: Fix type checking errors + * backups: Generate SSH client key if needed + * backups: Migrate to SSH key auth when mounting + * backups: Minor refactoring + * backups: Show/hide form elements instead of disabling for simplicity + * backups: Simplify handling of migration to SSH keys + * backups: Test adding/removing remote location + * backups: Tweak appearance of add remote location form + * backups: Use SSH key instead of password + * backups: Use selected SSH credential for remote + * backups: tests: Simplify functional test using more classes + * bin: Add tool to change !FreedomBox password in Django database + * calibre: Use OpenID Connect instead of pubtkt based SSO + * cfg: Drop unused actions_dir option + * cfg: Drop unused config_dir option + * container: Align terminology in printed banner + * db: Create a utility to get credentials from dbconfig + * debian: Ensure that gbp creates a clean tarball prior to build + * deluge: Use OpenID Connect instead of pubtkt based SSO + * doc/dev: Set new theme for developer documentation + * doc/dev: Use OpenID Connect instead of pubtkt based SSO + * doc/dev: always have an up-to-date copyright year + * ejabberd: Fix setting up certificates for multiple domains + * email: Use OpenID Connect instead of pubtkt based SSO + * featherwiki: Use OpenID Connect instead of pubtkt based SSO + * gitweb: Fix issue with running post init due to missing method + * gitweb: Use OpenID Connect instead of pubtkt based SSO + * js: When page load fails during install, show it to user + * letsencrypt: When copying certificate reset the umask reliably + * locale/bg: Fix several translations with HTML links (Bulgarian) + * locale/de: Fix several translations with HTML links (German) + * locale: Update translations for Albanian, Catalan, Chinese (Simplified Han script), Czech, French, German, Greek, Italian, Swedish, Tamil, Turkish + * matrixsynapse: Update apache config to proxy Synapse client API + * miniflux: Get credentials from dbconfig-common directly + * miniflux: Revert workaround for a packaging bug with DB connection + * mumble: murmurd renamed to mumble-server + * oidc: Style the page for authorizing an OIDC app + * pyproject: Use new format to specify licenses + * quassel: Explicitly set permissions on the domain configuration file + * rssbridge: Use OpenID Connect instead of pubtkt based SSO + * searx: Use OpenID Connect instead of pubtkt based SSO + * sharing: Use OpenID Connect instead of pubtkt based SSO + * sso: Merge into users module, drop pubtkt related code + * syncthing: Use OpenID Connect instead of pubtkt based SSO + * syncthing: tests: Fix tests by allowing rapid restarts + * templates: Allow building pages without navigation bar and footer + * tests: functional: Fix expecting !FreedomBox to be home page + * tests: functional: Fix reloading error page during install/uninstall + * tests: functional: Increase systemd rate limits for starting units + * tiddlywiki: Use OpenID Connect instead of pubtkt based SSO + * transmission: Use OpenID Connect instead of pubtkt based SSO + * ui: Add animation for notification dismissal + * ui: Dismiss notifications without page reload + * ui: Refactor notification delete buttons to avoid repeating code + * web_framework: Allow !FreedomBox apps to override templates + * web_server: Log requests to WSGI app + * wireguard: Accept/use netmask with IP address for server connection + * wireguard: Fix format when showing multiple endpoints of the server + * wireguard: Fix showing default route setting in server edit form + * wireguard: Fix split tunneling + * wireguard: Show status of default route in server information page + * wireguard: filter .local addresses from showClient view + * wireguard: show server vpn ip in show client page + * wordpress: Use OpenID Connect instead of pubtkt based SSO when private + +== FreedomBox 26.3 (2026-02-02) == + +=== Highlights === + + * ui: Use HTMX to eliminate full page reloads + * wireguard: Add 'Start Server' button to help with client setup + +=== Other Changes === + + * debian: Follows policy 4.7.3 + * debian: Ignore lintian warning: service file missing Install section + * debian: Remove default Rules-Requires-Root + * debian: Remove preinst script + * debian: Update copyright years + * docs: Update container script usage + * lintian: Remove mismatched overrides + * locale: Update translations for Chinese (Simplified Han script), German, Italian, Turkish + * Makefile: Fix removing extra license file + * ui: Add HTMX as a dependency + * ui: Use HTMX to update notifications on partial page updates + * wireguard: Remove NM connections when app is uninstalled + * wireguard: Show next available client IP in Add Client form + * wireguard: Update functional tests to handle Start Server button + * wireguard: Show server endpoint on main app page + == FreedomBox 26.2 (2026-01-20) == * gitweb: Fix deleting last repo disables app diff --git a/doc/manual/en/Sharing.raw.wiki b/doc/manual/en/Sharing.raw.wiki index 213f85ae8..906b938d3 100644 --- a/doc/manual/en/Sharing.raw.wiki +++ b/doc/manual/en/Sharing.raw.wiki @@ -20,15 +20,13 @@ The content can be shared publicly or restricted to the users of listed allowed === Setting Up Shares === -For the users to access the content through their browser it must exist and have a share. A share is an entry in the Sharing app relating: - * the Name (an thereby the URL) with which the users will ask for the content, - * the Disk Path of the content to be served and - * the sharing mode. On restricted mode, it also has the list of allowed groups. -Many shares can coexist in the same server. - -Only admins can create, edit or remove shares. They'll find the Sharing app in the Apps section of !FreedomBox web interface. Sharing app is an easy to use web application with an evident interface. - -Each share has its own sharing mode (public or restricted) setting. Only groups recognized by !FreedomBox service can be combined in the list of allowed groups. Groups created in the CLI won't be offered by the Sharing app. + * In !FreedomBox web interface, enable the Sharing App. Only admins can create, edit or remove shares. They'll find the Sharing app in the Apps section of the !FreedomBox web interface. Many shares can coexist in the same server. + * Add a new share + * Give it a name (an thereby the URL) with which the users will ask for the content. In the example above it would be called ''content_name''. + * The Disk Path of the content to be served. This path is relative to ''root'' on your !FreedomBox. For instance ''/var/lib/freedombox/sharing/content_name'' might be a choice. + * Sharing mode. On restricted mode, it also has the list of allowed groups. Only groups recognized by !FreedomBox service can be combined in the list of allowed groups. Groups created in the CLI won't be offered by the Sharing app. + * Create the directory specified under ''Disk Path'' on your !FreedomBox through ''Cockpit'', ''Nautilus'' or remote login. + * Make sure the user, who will provide the content, has write access to that directory for instance by making him the owner of that directory. === Providing/Updating Content === diff --git a/doc/manual/en/images/libre-crafts.png b/doc/manual/en/images/libre-crafts.png new file mode 100644 index 000000000..ebd645349 Binary files /dev/null and b/doc/manual/en/images/libre-crafts.png differ diff --git a/doc/manual/es/Hardware.raw.wiki b/doc/manual/es/Hardware.raw.wiki index 03b398cb8..db021f077 100644 --- a/doc/manual/es/Hardware.raw.wiki +++ b/doc/manual/es/Hardware.raw.wiki @@ -11,8 +11,19 @@ Además de soportar varios SBC's (single board computers) y otros dispositivos, == Hardware Recomendado == -El 22 de Abril de 2019, la ''!FreedomBox Foundation'' anunció que los kits ''Pioneer Edition !FreedomBox Home Server'' salían a la [[https://freedomboxfoundation.org/buy/|venta]]. Este es el hardware preinstalado recomendado para todos los usuarios que no quieran construirse su propia (máquina) !FreedomBox eligiendo los componentes adecuados, descargando la imagen y preparando una tarjeta SD con (el software) !FreedomBox. +=== Libre Crafts FreedomBox === +Libre Crafts es una iniviativa de los propios desarrolladores de !FreedomBox para proporcionar una !FreedomBox potente capaz de alojar las necesidades más exigentes de un servidor casero. +Los propios desarrolladores de !FreedomBox la montan. prueban y entregan. Tu compra ayuda al desarrollo de !FreedomBox. + +Esta máquina lleva un procesador potente, mucha memoria, CPU, un disco de sitema operativo rápido, posibilidad de añador discos duros de alta capacidad, puertos Ethernet multi-gigabit duales, todo ello con bajo consumo. +Úsalo para alojar todas tus fotos, las copias de respaldo de tus otros dispositivos, como NAS, como centro de control de domótica, como ordenador de sobremesa, y más, todo a la vez. + +|| [[FreedomBox/Hardware/LibreCrafts|{{attachment:FreedomBox/libre-crafts.png|FreedomBox de Libre Crafts|height=300}}]]<
> [[FreedomBox/Hardware/LibreCrafts|FreedomBox de Libre Crafts]] || + +=== Olimex's FreedomBox Pioneer Edition === + +On April 22nd, 2019, the !FreedomBox Foundation announced the [[https://freedomboxfoundation.org/buy/|sales]] of the Pioneer Edition !FreedomBox Home Server Kits. This pre-installed hardware is for all users who don't wish to build their own !FreedomBox by choosing the right components, downloading the image and preparing an SD card with !FreedomBox. El kit incluye todo el hardware necesario para arrancar un servidor casero !FreedomBox sobre una placa ''Olimex A20-OLinuXino-LIME2''. Este producto proporciona la combinación perfecta de hardware de fuentes abiertas y software libre. Al comprar este producto, soportas también los esfuerzos de la ''!FreedomBox Foundation'' para crear y promover su software de servidor libre. || [[es/FreedomBox/Hardware/PioneerEdition|{{attachment:FreedomBox/Hardware/pioneer-edition_thumb.jpg|Kits de servidor doméstico FreedomBox edición Pioneer|width=320,height=257}}]]<
> [[es/FreedomBox/Hardware/PioneerEdition|Kits de servidor doméstico FreedomBox edición Pioneer]] || diff --git a/doc/manual/es/PioneerEdition.raw.wiki b/doc/manual/es/PioneerEdition.raw.wiki index 5a48d75de..fe212161b 100644 --- a/doc/manual/es/PioneerEdition.raw.wiki +++ b/doc/manual/es/PioneerEdition.raw.wiki @@ -16,7 +16,7 @@ Los servidores caseros !FreedomBox Pioneer Edition los fabrica y vende Olimex, u == Características del Producto == === HW Recomendado === -Éste es el hardware recomendado para los usuarios que quieran simplemente una !FreedomBox llave en mano, y '''no''' quieran '''construirse''' una. +Éste es un hardware recomendado para los usuarios que quieran simplemente una !FreedomBox llave en mano, y '''no''' quieran '''construirse''' una. (Construir tu propia !FreedomBox implica algunos tecnicismos como elegir y comprar los componentes adecuados, descargar la imágen y preparar una tarjeta SD). diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index 679b05488..e5c23ea66 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,125 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 26.4 (2026-03-02) == + +=== Highlights === + + * backups: Enable key-based SSH authentication for remote backups + * oidc: New app to implement OpenID Connect Provider + * apache: Implement protecting apps using OpenID Connect + * wireguard: Improve server section user experience flow + +=== Other Changes === + + * *: Remove some absolute file paths in SVGs + * *: Update URL base from /plinth to /freedombox + * README/HACKING: Update weblate project path to /freedombox + * Vagrantfile: Drop unnecessary sudo configuration for actions + * action_utils: Drop support for link-local IPv6 addresses + * action_utils: Fix issue with type checking a generator + * action_utils: Implement utility to change umask temporarily + * actions, privileged_daemon: Drop some unused global statements + * apache: Fix diagnosing URLs protected by OpenID Connect + * apache: Preserve host header when proxying to service + * backups: Arrange form for adding remote location + * backups: Avoid some repeated text in form help text + * backups: Copy SSH client public key to remote + * backups: Create .ssh folder before creating SSH key + * backups: Create a better comment in the generated SSH key file + * backups: Display SSH public key when adding remote + * backups: Fix issue with Javascript in add remote location form + * backups: Fix showing proper error for incorrect passphrase + * backups: Fix type checking errors + * backups: Generate SSH client key if needed + * backups: Migrate to SSH key auth when mounting + * backups: Minor refactoring + * backups: Show/hide form elements instead of disabling for simplicity + * backups: Simplify handling of migration to SSH keys + * backups: Test adding/removing remote location + * backups: Tweak appearance of add remote location form + * backups: Use SSH key instead of password + * backups: Use selected SSH credential for remote + * backups: tests: Simplify functional test using more classes + * bin: Add tool to change !FreedomBox password in Django database + * calibre: Use OpenID Connect instead of pubtkt based SSO + * cfg: Drop unused actions_dir option + * cfg: Drop unused config_dir option + * container: Align terminology in printed banner + * db: Create a utility to get credentials from dbconfig + * debian: Ensure that gbp creates a clean tarball prior to build + * deluge: Use OpenID Connect instead of pubtkt based SSO + * doc/dev: Set new theme for developer documentation + * doc/dev: Use OpenID Connect instead of pubtkt based SSO + * doc/dev: always have an up-to-date copyright year + * ejabberd: Fix setting up certificates for multiple domains + * email: Use OpenID Connect instead of pubtkt based SSO + * featherwiki: Use OpenID Connect instead of pubtkt based SSO + * gitweb: Fix issue with running post init due to missing method + * gitweb: Use OpenID Connect instead of pubtkt based SSO + * js: When page load fails during install, show it to user + * letsencrypt: When copying certificate reset the umask reliably + * locale/bg: Fix several translations with HTML links (Bulgarian) + * locale/de: Fix several translations with HTML links (German) + * locale: Update translations for Albanian, Catalan, Chinese (Simplified Han script), Czech, French, German, Greek, Italian, Swedish, Tamil, Turkish + * matrixsynapse: Update apache config to proxy Synapse client API + * miniflux: Get credentials from dbconfig-common directly + * miniflux: Revert workaround for a packaging bug with DB connection + * mumble: murmurd renamed to mumble-server + * oidc: Style the page for authorizing an OIDC app + * pyproject: Use new format to specify licenses + * quassel: Explicitly set permissions on the domain configuration file + * rssbridge: Use OpenID Connect instead of pubtkt based SSO + * searx: Use OpenID Connect instead of pubtkt based SSO + * sharing: Use OpenID Connect instead of pubtkt based SSO + * sso: Merge into users module, drop pubtkt related code + * syncthing: Use OpenID Connect instead of pubtkt based SSO + * syncthing: tests: Fix tests by allowing rapid restarts + * templates: Allow building pages without navigation bar and footer + * tests: functional: Fix expecting !FreedomBox to be home page + * tests: functional: Fix reloading error page during install/uninstall + * tests: functional: Increase systemd rate limits for starting units + * tiddlywiki: Use OpenID Connect instead of pubtkt based SSO + * transmission: Use OpenID Connect instead of pubtkt based SSO + * ui: Add animation for notification dismissal + * ui: Dismiss notifications without page reload + * ui: Refactor notification delete buttons to avoid repeating code + * web_framework: Allow !FreedomBox apps to override templates + * web_server: Log requests to WSGI app + * wireguard: Accept/use netmask with IP address for server connection + * wireguard: Fix format when showing multiple endpoints of the server + * wireguard: Fix showing default route setting in server edit form + * wireguard: Fix split tunneling + * wireguard: Show status of default route in server information page + * wireguard: filter .local addresses from showClient view + * wireguard: show server vpn ip in show client page + * wordpress: Use OpenID Connect instead of pubtkt based SSO when private + +== FreedomBox 26.3 (2026-02-02) == + +=== Highlights === + + * ui: Use HTMX to eliminate full page reloads + * wireguard: Add 'Start Server' button to help with client setup + +=== Other Changes === + + * debian: Follows policy 4.7.3 + * debian: Ignore lintian warning: service file missing Install section + * debian: Remove default Rules-Requires-Root + * debian: Remove preinst script + * debian: Update copyright years + * docs: Update container script usage + * lintian: Remove mismatched overrides + * locale: Update translations for Chinese (Simplified Han script), German, Italian, Turkish + * Makefile: Fix removing extra license file + * ui: Add HTMX as a dependency + * ui: Use HTMX to update notifications on partial page updates + * wireguard: Remove NM connections when app is uninstalled + * wireguard: Show next available client IP in Add Client form + * wireguard: Update functional tests to handle Start Server button + * wireguard: Show server endpoint on main app page + == FreedomBox 26.2 (2026-01-20) == * gitweb: Fix deleting last repo disables app diff --git a/doc/manual/es/Sharing.raw.wiki b/doc/manual/es/Sharing.raw.wiki index 0ef13607e..54c36241d 100644 --- a/doc/manual/es/Sharing.raw.wiki +++ b/doc/manual/es/Sharing.raw.wiki @@ -19,15 +19,15 @@ El contenido se puede compartir públicamente o restringido a usuarios de una li === Editando comparticiones === -Para que los usuarios accedan al contenido mediante su navegador debe existir y tener una compartición. Una compartición es una entrada en la aplicación Sharing que relaciona: - * El Nombre (y por tanto la URL) que usarán los usuarios para solicitar el contenido, - * el Ruta de acceso al contenido a servir y - * el modo de compartición. Si es restringido, también contendrá la lista de grupos autorizados. -En el mismo servidor pueden coexistir múltiples comparticiones. +Cada compartición tiene su propio ajuste de modo de compartición (pública o restringida). Sólo los grupos que reconoce el servicio !FreedomBox se pueden combinar en la lista de grupos autorizados. La aplicación ''Sharing'' no ofrecerá los grupos creados en el interfaz de línea de órdenes. -Sólo los administradores pueden crear, editar o eliminar comparticiones. Encontrarán la aplicación ''Sharing'' en la sección Aplicacions del interfaz web de !FreedomBox. La aplicación ''Sharing'' es una aplicación web fácil de usar y con un interfaz evidente. - -Cada compartición tiene su priopio ajuste de modo de compartición (pública o restrigida). Sólo los grupos que reconoce el servicio !FreedomBox se pueden combinar en la lista de grupos autorizados. La aplicación ''Sharing'' no ofrecerá los grupos creados en el interfaz de línea de órdenes. + * In el interfaz web de !FreedomBox, habilita la App ''Sharing''. Sólo los administradores pueden crear, editar o eliminar comparticiones. Encontrarán la aplicación ''Sharing'' en la sección Aplicaciones del interfaz web de !FreedomBox. En el mismo servidor pueden coexistir múltiples comparticiones. + * Añadir una nueva compartición: + * Dale un nombre (y por tanto la URL) que usarán los usuarios para solicitar el contenido, En el ejemplo anterior se llamaría ''nombre del contenido''. + * La Ruta completa de acceso al contenido a servir. Por ejemplo ''/var/lib/freedombox/sharing/nombre_del_contenido''. + * El modo de compartición. Si es restringido, también contendrá la lista de grupos autorizados. Solo los grupos reconocidos por el servicio !FreedomBox se pueden combinar en la lista de grupos autorizados. La app no ofrecerá los grupos creados sólo en la línea de órdenes. + * Crea el directorio especificado en ''Ruta de Disco'' en !FreedomBox mediante ''Cockpit'', ''Nautilus'' o ingreso remoto. + * Asegúrate de que el usuario que proporcione el contenido tiene permiso para escribir en el directorio, por ejemplo, haciéndole dueño del directorio. === Provisionar/actualizar el contenido === diff --git a/doc/manual/es/images/libre-crafts.png b/doc/manual/es/images/libre-crafts.png new file mode 100644 index 000000000..ebd645349 Binary files /dev/null and b/doc/manual/es/images/libre-crafts.png differ diff --git a/doc/plinth.xml b/doc/plinth.xml index 1331e08e1..083e68936 100644 --- a/doc/plinth.xml +++ b/doc/plinth.xml @@ -73,8 +73,8 @@ This the URL fragment under which Plinth will provide its services. Plinth is shipped with a default value of - /plinth. This means that Plinth will be - available as http://localhost:8000/plinth by default. + /freedombox. This means that Plinth will be + available as http://localhost:8000/freedombox by default. @@ -194,7 +194,7 @@ $ plinth --server_dir='/myurl' Run Plinth with the '/myurl' prefix. Note that Apache forwards requests - to '/plinth' by default, so /myurl is not accessible outside of your + to '/freedombox' by default, so /myurl is not accessible outside of your FreedomBox without adapting the apache configuration. diff --git a/doc/scripts/wikiparser.py b/doc/scripts/wikiparser.py index a8026f09e..5e08b67cf 100755 --- a/doc/scripts/wikiparser.py +++ b/doc/scripts/wikiparser.py @@ -13,7 +13,7 @@ from pathlib import Path from xml.sax.saxutils import escape BASE_URL = 'https://wiki.debian.org/' -LOCAL_BASE = '/plinth/help/manual/{lang}/' +LOCAL_BASE = '/freedombox/help/manual/{lang}/' ICONS_DIR = 'icons' DEFAULT_LANGUAGE = 'en' @@ -624,21 +624,21 @@ def resolve_url(url, context): Locally available page in default language => shortcut to local copy: >>> resolve_url('FreedomBox/Contribute', {'language': '', 'title': ''}) - '/plinth/help/manual/en/Contribute#' + '/freedombox/help/manual/en/Contribute#' Translated available page => shortcut to local copy: >>> resolve_url('es/FreedomBox/Contribute', {'language': '', 'title': ''}) - '/plinth/help/manual/es/Contribute#' + '/freedombox/help/manual/es/Contribute#' Available page in default language refferred as translated => shortcut to local copy: >>> resolve_url('en/FreedomBox/Contribute', {'language': '', 'title': ''}) - '/plinth/help/manual/en/Contribute#' + '/freedombox/help/manual/en/Contribute#' Unrecognized language => handle considering it as default language: >>> resolve_url('missing/FreedomBox/Contribute', {'language': '', \ 'title': ''}) - '/plinth/help/manual/en/Contribute#' + '/freedombox/help/manual/en/Contribute#' """ # Process first all easy, straight forward cases: @@ -1191,11 +1191,11 @@ from="## BEGIN_INCLUDE", to="## END_INCLUDE")>>') [Paragraph([PlainText('a')]), Paragraph([PlainText('b ')])] >>> parse_wiki('{{{#!wiki caution\\n\\nOnce some other app is set as the \ home page, you can only navigate to the !FreedomBox Service (Plinth) by \ -typing https://myfreedombox.rocks/plinth/ into the browser. <
>\\n\ +typing https://myfreedombox.rocks/freedombox/ into the browser. <
>\\n\ ''/freedombox'' can also be used as an alias to ''/plinth''\\n}}}') [Admonition('caution', [Paragraph([PlainText('Once some other app is set \ as the home page, you can only navigate to the FreedomBox Service (Plinth) by \ -typing '), Url('https://myfreedombox.rocks/plinth/'), PlainText(' into the \ +typing '), Url('https://myfreedombox.rocks/freedombox/'), PlainText(' into the \ browser. ')]), Paragraph([PlainText('/freedombox can also be used as an alias \ to /plinth ')])])] @@ -1761,7 +1761,7 @@ Features introduction' >>> generate_inner_docbook([Link('../../Contribute', \ [PlainText('Contribute')])], context={'title': 'FreedomBox/Manual/Hardware'}) - '\ + '\ Contribute' >>> generate_inner_docbook([Link('/Code', \ @@ -1772,9 +1772,9 @@ Code' >>> generate_inner_docbook([Link('DebianBug:1234', [PlainText('Bug')])]) 'Bug' - >>> generate_inner_docbook([Link('DebianPkg:plinth', \ + >>> generate_inner_docbook([Link('DebianPkg:freedombox', \ [PlainText('Plinth')])]) - 'Plinth' + 'Plinth' >>> generate_inner_docbook([Link('AliothList:freedombox-discuss', \ [PlainText('Discuss')])]) @@ -1911,7 +1911,7 @@ PlainText(' on it. ')])]) 'An alternative to downloading these images is to \ \ install Debian on the BeagleBone and then \ -install \ +install \ FreedomBox on it. ' >>> generate_inner_docbook([Paragraph([PlainText('After Roundcube is \ diff --git a/plinth/__init__.py b/plinth/__init__.py index 89fd2c275..ea0650fb5 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '26.2' +__version__ = '26.4' diff --git a/plinth/action_utils.py b/plinth/action_utils.py index b6805d6fa..168e390b0 100644 --- a/plinth/action_utils.py +++ b/plinth/action_utils.py @@ -10,6 +10,7 @@ import shutil import subprocess import tempfile from contextlib import contextmanager +from typing import Generator import augeas @@ -370,12 +371,13 @@ def get_addresses() -> list[dict[str, str | bool]]: 'url_address': hostname }) - # XXX: When a hostname is resolved to IPv6 address, it may likely - # be link-local address. Link local IPv6 addresses are valid only - # for a given link and need to be scoped with interface name such - # as '%eth0' to work. Tools such as curl don't seem to handle + # When a hostname is resolved to IPv6 address, it may likely be link-local + # address. Link local IPv6 addresses are valid only for a given link and + # need to be scoped with interface name such as '%eth0' to work. Browsers + # refused to implement support for link-local addresses (with zone IDs) in + # URLs due to platform specific parsing rules and other implementation + # difficulties. mod_auth_openidc does not support them either. # this correctly. - # addresses.append({'kind': '6', 'address': hostname, 'numeric': False}) return addresses @@ -397,13 +399,15 @@ def get_ip_addresses() -> list[dict[str, str | bool]]: } if address['kind'] == '6' and address['numeric']: - if address['scope'] != 'link': - address['url_address'] = '[{0}]'.format(address['address']) - else: - address['url_address'] = '[{0}%{1}]'.format( - address['url_address'], address['interface']) + address['url_address'] = '[{0}]'.format(address['address']) - addresses.append(address) + if address['scope'] != 'link': + # Do not include link local addresses. Browsers refused to + # implement support for link-local addresses (with zone IDs) in + # URLs due to platform specific parsing rules and other + # implementation difficulties. mod_auth_openidc does not support + # them either. + addresses.append(address) return addresses @@ -838,3 +842,13 @@ def run(command, **kwargs): raise exception return process + + +@contextmanager +def umask(mask) -> Generator: + """Set the umask temporarily for a operation and then revert it.""" + old_umask = os.umask(mask) + try: + yield + finally: + os.umask(old_umask) diff --git a/plinth/actions.py b/plinth/actions.py index 689dc58c1..d1ab50d2c 100644 --- a/plinth/actions.py +++ b/plinth/actions.py @@ -369,7 +369,6 @@ class JSONEncoder(json.JSONEncoder): def _setup_thread_storage(): """Setup collection of stdout/stderr from any process in this thread.""" - global thread_storage thread_storage.stdout = b'' thread_storage.stderr = b'' @@ -380,14 +379,12 @@ def _clear_thread_storage(): Python documentation is silent on whether thread local storage will be cleaned up after a thread terminates. """ - global thread_storage thread_storage.stdout = None thread_storage.stderr = None def get_return_value_from_exception(exception): """Return the value to return from server when an exception is raised.""" - global thread_storage return_value = { 'result': 'exception', 'exception': { diff --git a/plinth/cfg.py b/plinth/cfg.py index 0ab90174c..d95ff07dc 100644 --- a/plinth/cfg.py +++ b/plinth/cfg.py @@ -12,13 +12,11 @@ logger = logging.getLogger(__name__) # [Path] section file_root = '/usr/share/plinth' -config_dir = '/etc/plinth' data_dir = '/var/lib/plinth' custom_static_dir = '/var/www/plinth/custom/static' store_file = data_dir + '/plinth.sqlite3' -actions_dir = '/usr/share/plinth/actions' doc_dir = '/usr/share/freedombox' -server_dir = '/plinth' +server_dir = '/freedombox' # [Network] section host = '127.0.0.1' @@ -111,11 +109,9 @@ def read_file(config_path): config_items = ( ('Path', 'file_root', 'string'), - ('Path', 'config_dir', 'string'), ('Path', 'data_dir', 'string'), ('Path', 'custom_static_dir', 'string'), ('Path', 'store_file', 'string'), - ('Path', 'actions_dir', 'string'), ('Path', 'doc_dir', 'string'), ('Path', 'server_dir', 'string'), ('Network', 'host', 'string'), diff --git a/plinth/conftest.py b/plinth/conftest.py index a67589b22..a4ce1bbec 100644 --- a/plinth/conftest.py +++ b/plinth/conftest.py @@ -64,10 +64,10 @@ def fixture_load_cfg(): """Load test configuration.""" from plinth import cfg - keys = ('file_root', 'config_dir', 'data_dir', 'custom_static_dir', - 'store_file', 'actions_dir', 'doc_dir', 'server_dir', 'host', - 'port', 'use_x_forwarded_for', 'use_x_forwarded_host', - 'secure_proxy_ssl_header', 'box_name', 'develop') + keys = ('file_root', 'data_dir', 'custom_static_dir', 'store_file', + 'doc_dir', 'server_dir', 'host', 'port', 'use_x_forwarded_for', + 'use_x_forwarded_host', 'secure_proxy_ssl_header', 'box_name', + 'develop') saved_state = {} for key in keys: saved_state[key] = getattr(cfg, key) diff --git a/plinth/db/dbconfig.py b/plinth/db/dbconfig.py new file mode 100644 index 000000000..b3e31125b --- /dev/null +++ b/plinth/db/dbconfig.py @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Utilities for parsing dbconfig-common files with Augeas.""" + +import pathlib + +import augeas + + +def get_credentials(dbconfig_path: str) -> dict[str, str]: + """Parse dbconfig-common file with Augeas Shellvars lens.""" + if not pathlib.Path(dbconfig_path).is_file(): + raise FileNotFoundError(f'DB config not found: {dbconfig_path}') + + aug = _load_augeas(dbconfig_path) + + required = ['dbc_dbuser', 'dbc_dbpass', 'dbc_dbname'] + credentials = {} + for key in required + ['dbc_dbserver']: + credentials[key] = aug.get(key).strip('\'"') + + if not all(credentials.get(key) for key in required): + raise ValueError('Missing required dbconfig-common credentials') + + return { + 'user': credentials['dbc_dbuser'], + 'password': credentials['dbc_dbpass'], + 'database': credentials['dbc_dbname'], + 'host': credentials['dbc_dbserver'] or 'localhost' + } + + +def _load_augeas(config_path: str): + """Initialize Augeas.""" + aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + + augeas.Augeas.NO_MODL_AUTOLOAD) + pathstr = str(config_path) + aug.transform('Shellvars', pathstr) + aug.set('/augeas/context', f'/files{pathstr}') + aug.load() + return aug diff --git a/plinth/develop.config b/plinth/develop.config index e2a61f89a..f8b70135c 100644 --- a/plinth/develop.config +++ b/plinth/develop.config @@ -1,5 +1,3 @@ [Path] file_root = %(parent_parent_dir)s -config_dir = %(file_root)s/data/etc/plinth -actions_dir = %(file_root)s/actions doc_dir = %(file_root)s/doc diff --git a/plinth/locale/README b/plinth/locale/README index 6102e1274..f6eba93fd 100644 --- a/plinth/locale/README +++ b/plinth/locale/README @@ -10,7 +10,7 @@ translating the PO file from your language directory. Introducing yourself is important since some work may have been done already on Debian translators discussion lists and Weblate localization platform. -https://hosted.weblate.org/projects/freedombox/plinth/ +https://hosted.weblate.org/projects/freedombox/freedombox/ https://www.debian.org/MailingLists/subscribe ## Wiki: translators landing page diff --git a/plinth/locale/ar/LC_MESSAGES/django.po b/plinth/locale/ar/LC_MESSAGES/django.po index 2d19410a1..e6bc693a5 100644 --- a/plinth/locale/ar/LC_MESSAGES/django.po +++ b/plinth/locale/ar/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-04-16 02:28+0000\n" "Last-Translator: MohammedSaalif <2300031323@kluniversity.in>\n" "Language-Team: Arabic SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -534,17 +556,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -580,7 +602,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -605,7 +643,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -613,7 +651,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -729,107 +767,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -899,7 +937,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -984,8 +1022,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1055,6 +1093,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1335,7 +1374,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1876,7 +1915,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2144,8 +2183,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2191,8 +2230,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3023,8 +3062,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "عن" @@ -3568,7 +3607,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4611,9 +4650,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5087,6 +5126,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5290,6 +5330,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5472,8 +5513,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5845,6 +5886,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application installed." +msgid "Application" +msgstr "ثُبت التطبيق." + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6135,8 +6207,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6795,10 +6867,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7048,8 +7122,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7362,26 +7437,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8148,13 +8203,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8377,35 +8425,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8414,94 +8466,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8513,6 +8565,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8526,7 +8582,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8568,7 +8624,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8577,6 +8633,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8613,30 +8673,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8663,55 +8727,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8719,22 +8794,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8746,70 +8821,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8858,18 +8963,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8893,62 +9002,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9105,6 +9226,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9267,35 +9404,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9388,11 +9525,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9542,12 +9683,12 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/ar_SA/LC_MESSAGES/django.po b/plinth/locale/ar_SA/LC_MESSAGES/django.po index d984a0c35..6afe1b06e 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2020-06-10 15:41+0000\n" "Last-Translator: aiman an \n" "Language-Team: Arabic (Saudi Arabia) SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -512,17 +536,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -558,7 +582,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -583,7 +623,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -591,7 +631,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -707,107 +747,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -877,7 +917,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -962,8 +1002,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1033,6 +1073,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1315,7 +1356,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1856,7 +1897,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2126,8 +2167,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2173,8 +2214,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3013,8 +3054,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "" @@ -3558,7 +3599,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4609,9 +4650,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5087,6 +5128,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5290,6 +5332,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5472,8 +5515,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5845,6 +5888,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application installed." +msgid "Application" +msgstr "تم تثبيت التطبيق." + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6135,8 +6209,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6797,10 +6871,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7052,8 +7128,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7366,26 +7443,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8152,13 +8209,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8381,35 +8431,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8418,94 +8472,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8517,6 +8571,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8530,7 +8588,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8572,7 +8630,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8581,6 +8639,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8617,30 +8679,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8667,55 +8733,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8723,22 +8800,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8750,70 +8827,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8862,18 +8969,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8897,62 +9008,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9109,6 +9232,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9271,35 +9410,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9392,11 +9531,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9546,12 +9689,12 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/be/LC_MESSAGES/django.po b/plinth/locale/be/LC_MESSAGES/django.po index 6737614f8..534cbd8f8 100644 --- a/plinth/locale/be/LC_MESSAGES/django.po +++ b/plinth/locale/be/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -99,15 +99,15 @@ msgstr "" msgid "Use the language preference set in the browser" msgstr "" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "" @@ -130,36 +130,40 @@ msgstr "" msgid "Administration" msgstr "" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "" -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "" -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "" -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -201,41 +205,41 @@ msgstr "" msgid "mDNS" msgstr "" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "" -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." msgstr "" -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " "succeed. The latest error is: {error_message}" msgstr "" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "" @@ -370,7 +374,7 @@ msgid "Passphrase" msgstr "" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "" #: plinth/modules/backups/forms.py:190 @@ -408,27 +412,45 @@ msgid "" msgstr "" #: plinth/modules/backups/forms.py:255 -msgid "SSH server password" +msgid "SSH Authentication Type" msgstr "" #: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -504,17 +526,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -550,7 +572,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -575,7 +613,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -583,7 +621,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -699,107 +737,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -869,7 +907,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -954,8 +992,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1025,6 +1063,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1305,7 +1344,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1846,7 +1885,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2114,8 +2153,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2161,8 +2200,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -2993,8 +3032,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "" @@ -3536,7 +3575,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4571,9 +4610,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5045,6 +5084,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5248,6 +5288,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5430,8 +5471,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5803,6 +5844,35 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +msgid "Application" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6091,8 +6161,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6749,10 +6819,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7002,8 +7074,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7316,26 +7389,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8101,13 +8154,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8330,35 +8376,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8367,94 +8417,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8466,6 +8516,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8479,7 +8533,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8521,7 +8575,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8530,6 +8584,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8566,30 +8624,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8616,55 +8678,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8672,22 +8745,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8699,70 +8772,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8811,18 +8914,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8846,62 +8953,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9058,6 +9177,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9208,35 +9343,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9329,11 +9464,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9481,11 +9620,11 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index faf26fae1..d02263a33 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-12-17 07:00+0000\n" -"Last-Translator: 109247019824 <109247019824@users.noreply.hosted.weblate.org>" -"\n" +"Last-Translator: 109247019824 " +"<109247019824@users.noreply.hosted.weblate.org>\n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -106,15 +106,15 @@ msgstr "Език на интерфейса" msgid "Use the language preference set in the browser" msgstr "Използване на предпочитания от четеца език" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Начало" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Приложения" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "Системни" @@ -137,36 +137,40 @@ msgstr "Сигурност" msgid "Administration" msgstr "Администриране" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "Възможно е системата да е натоварена. Опитайте по-късно." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "Страницата не е намерена – {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "Грешка при извършване на действието." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "Грешка при зареждане на страница." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Сървър на Apache HTTP" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Уеб сървър" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} интерфейс (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -214,16 +218,16 @@ msgstr "Местно" msgid "mDNS" msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "Създаване и управление на архиви с резервни копия." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Резервни копия" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -232,19 +236,19 @@ msgstr "" "Предпочетете шифровано местоположение за отдалечено архивиране или " "допълнително свързан диск." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "Включване на резервни копия по график" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "Към {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -254,7 +258,7 @@ msgstr "" "опита за създаване на резервно копие са безуспешни. Последната грешка е: " "{error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Грешка при създаване на резервно копие" @@ -407,7 +411,9 @@ msgid "Passphrase" msgstr "Фраза за достъп" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Фраза за достъп; Необходима е само при използване на шифроване." #: plinth/modules/backups/forms.py:190 @@ -447,29 +453,57 @@ msgstr "" "" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Режим на удостоверяване" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Удостоверяването на отдалечения сървър е неуспешно." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Key-based Authentication" +msgstr "Изключване на удостоверяването с парола" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Изключване на удостоверяването с парола" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Парола за сървъра на SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Парола за сървъра на SSH.
Удостоверяване на SSH с ключове все още не е " -"възможно." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Изключване на удостоверяването с парола" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Изключване на удостоверяването с парола" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Отдалеченото хранилище за резервни копия вече съществува." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Изберете проверен публичен ключ за SSH" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Възстановяване" @@ -549,17 +583,17 @@ msgstr "Системата за резервни копия е заета с д msgid "Not enough space left on the disk or remote location." msgstr "Недостатъчно място на носителя или отдалеченото място." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Съществуващото хранилище не е шифровано." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Хранилище на {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Създаване на резервно копие" @@ -595,7 +629,23 @@ msgstr "Добавяне на отдалечено хранилище за ре msgid "Existing Backups" msgstr "Съществуващи архивни копия" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -620,7 +670,7 @@ msgstr "Съществуващи архивни копия" msgid "Caution:" msgstr "Внимание:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -631,7 +681,7 @@ msgstr "" "
За да възстановите от архивно копие на %(box_name)s са ви е необходими " "данните за достъп през SSH и, ако е избрано шифроване, шифроващата фраза." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Добавяне на хранилище" @@ -765,107 +815,109 @@ msgstr "" msgid "Verify Host" msgstr "Проверяване на хоста" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Графикът за резервни копия е променен." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Резервни копия по график" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Архивът е създаден." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Премахване на архив" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Архивът е премахнат." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Качване и възстановяване от резервно копие" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Файлът е изпратен." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "Не е намерено резервно копие." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Възстановяване от качен файл" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "Файловете от резервното копие са възстановени." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "Няма допълнителни дискове, на които да бъде създадено хранилище." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Създаване на хранилище за резервни копия" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "Добавено е хранилище." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Създаване на отдалечено хранилище за резервни копия" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Създадено е отдалечено хранилище с достъп през SSH." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "Проверяване на ключ за SSH на хост" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "SSH на хоста вече е проверен." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "SSH на хоста е проверен." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "Публичният ключ за SSH на хоста не може да бъде проверен." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "Удостоверяването на отдалечения сървър е неуспешно." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Грешка при свързване със сървъра: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Графикът за резервни копия е променен." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Резервни копия по график" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Архивът е създаден." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Премахване на архив" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Архивът е премахнат." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Качване и възстановяване от резервно копие" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Файлът е изпратен." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "Не е намерено резервно копие." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Възстановяване от качен файл" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "Файловете от резервното копие са възстановени." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "Няма допълнителни дискове, на които да бъде създадено хранилище." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Създаване на хранилище за резервни копия" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Добавено е хранилище." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Създаване на отдалечено хранилище за резервни копия" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Създадено е отдалечено хранилище с достъп през SSH." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "Проверяване на ключ за SSH на хост" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "SSH на хоста вече е проверен." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "SSH на хоста е проверен." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Хранилището е премахнато." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Премахване на хранилище" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Хранилището е премахнато. Резервните копия не са премахнати." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Грешка при размонтиране!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Грешка при монтиране" @@ -939,7 +991,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Права" @@ -1024,8 +1076,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Премахване" @@ -1095,6 +1147,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Сървър" @@ -1375,13 +1428,20 @@ msgid "Webserver Home Page" msgstr "Начална страница на сървъра за уеб" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Изберете подразбирана страница, която да бъде показвана, когато някой отвори " "{box_name} през и тернет. Типичен пример е блог или уики като начална " @@ -1953,7 +2013,7 @@ msgid "Invalid domain name" msgstr "Недопустимо име на домейн" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Потребителско име" @@ -2226,8 +2286,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Състояние" @@ -2273,8 +2333,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3083,7 +3143,7 @@ msgid "" "effect." msgstr "" "След като инсталирате, включите, изключите или премахнете приложението, ще " -"трябва да рестартирате машината, за да влязат " +"трябва да рестартирате машината, за да влязат " "промените в сила." #: plinth/modules/gnome/__init__.py:48 @@ -3149,8 +3209,8 @@ msgstr "Обратна връзка" msgid "Contribute" msgstr "Допринасяне" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "За проекта" @@ -3698,7 +3758,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -3761,10 +3821,10 @@ msgid "" "project or create your own." msgstr "" -"Можете да изтеглите пакети със съдържание от проекта Kiwix " -"или да създадете свои собствени." +"Можете да изтеглите пакети със съдържание от проекта Kiwix или " +"да създадете свои собствени." #: plinth/modules/kiwix/__init__.py:53 msgid "Manage Kiwix content server" @@ -4794,9 +4854,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Редактиране" @@ -5340,6 +5400,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5543,6 +5604,7 @@ msgid "Edit Connection" msgstr "Редактиране на връзката" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Грешка:" @@ -5725,8 +5787,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6101,6 +6163,40 @@ msgstr "Групов софтуер" msgid "Password update failed. Please choose a stronger password." msgstr "Паролата не е променена. Изберете по-сложна парола." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application installed." +msgid "Application" +msgstr "Приложението е инсталирано." + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Удостоверени ключове на SSH" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Удостоверени ключове на SSH" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6395,8 +6491,8 @@ msgstr "Рестартиране" msgid "Shutdown" msgstr "Изключване" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Рестартиране" @@ -6746,8 +6842,8 @@ msgid "" "href=\"{nextcloud_url}\">Nextcloud News to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"Можете да използвате RSS-Bridge заедно с " -"Miniflux или Nextcloud News, за да " +"Можете да използвате RSS-Bridge заедно с Miniflux или Nextcloud News, за да " "следвате различни страници. При добавяне на емисия, включете " "удостоверяването и използвайте данните за вход на {box_name}." @@ -7099,10 +7195,12 @@ msgid "N/A" msgstr "Н/Д" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Да" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Не" @@ -7352,8 +7450,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7678,26 +7777,6 @@ msgstr "Алгоритъм" msgid "Fingerprint" msgstr "Отпечатък" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Единен вход" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Вход" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "Изходът е успешен." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8573,13 +8652,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Към обновяване на дистрибуцията" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "Затваряне" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8852,35 +8924,39 @@ msgstr "" msgid "Users and Groups" msgstr "Потребители и групи" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Достъп до всички услуги и системни настройки" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Проверете записа на LDAP „{search_item}“" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Проверете настройката на nslcd „{key} {value}“" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Проверете настройката на nsswitch „{database}“" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "Потребителското име е заето." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "По желание. Използва се за нулиране на паролата и важни известия." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8894,22 +8970,22 @@ msgstr "" "Те могат също така да влизат в системата чрез SSH и да имат администраторски " "права (sudo)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "Въведете съществуващо потребителско име." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "Задължително. 150 знака или по-малко. Само латински букви, цифри и знаците " "@/./-/_." -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "Парола за удостоверяване" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." @@ -8917,25 +8993,25 @@ msgstr "" "За да разрешите промяната на профила, въведете паролата на потребителя " "„{user}“." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "Грешна парола." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "Не е създаден потребител в LDAP: {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "Новият потребител не е добавен към групата {group}: {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "Удостоверени ключове на SSH" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -8946,11 +9022,11 @@ msgstr "" "няколко ключа, по един на ред. Празните редове и редовете, започващи с #, ще " "бъдат пренебрегнати." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "Премахване на потребител" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -8958,40 +9034,40 @@ msgstr "" "Премахването на профил на потребител ще премахне и всички прилежащи файлове. " "Премахването на файлове може да бъде избегнато, като профилът бъде изключен." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "Потребителят не е премахнат." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "Потребителят на LDAP не е преименуван." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Потребителят не е премахнат от групата." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Потребителят не е добавен към групата." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "Ключовете на SSH не са зададени." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "Състоянието на потребителя не е променено." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "Паролата на потребителя на LDAP не е променена." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "Новият потребител не е добавен към администраторската група: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Профилът е създаден и вече сте влезли" @@ -9003,6 +9079,10 @@ msgstr "Управление на профили" msgid "App permissions" msgstr "Права на приложението" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9016,7 +9096,7 @@ msgstr "Запазване на парола" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Създаване на потребител" @@ -9067,7 +9147,7 @@ msgid "Skip this step" msgstr "Пропускане на стъпката" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Поребители" @@ -9076,6 +9156,10 @@ msgstr "Поребители" msgid "Edit user %(username)s" msgstr "Промяна на потребителя %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Вход" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9119,30 +9203,34 @@ msgstr "Премахване на файловете на %(username)s" msgid "Cancel" msgstr "Отказ" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Изходът е успешен." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Потребителят %(username)s е създаден." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Потребителят %(username)s е променен." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Промяна на потребител" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "Потребителят %(username)s е премахнат." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Промяна на парола" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Паролата е променена." @@ -9169,55 +9257,68 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Въведете съществуващо потребителско име." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9225,22 +9326,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9252,70 +9353,106 @@ msgstr "" msgid "As a Server" msgstr "Като сървър" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Page not found - %(box_name)s" +msgid "Information for this %(box_name)s:" +msgstr "Страницата не е намерена - %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Entry point" +msgid "Endpoint(s)" +msgstr "Входна точка" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Към порт на %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Паролата е променена." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -9364,18 +9501,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9399,62 +9540,76 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Настройките на клиентското приложение са променени." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Настройките на сървъра са променени." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Паролата е променена." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9613,6 +9768,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "Времето за изчакване на диспечера на пакети е изтекло" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Инсталиране на приложение" @@ -9768,35 +9939,35 @@ msgstr "" "данни. Това е безплатен софтуер, който ви позволява да инсталирате и " "управлявате сървърни приложения с лекота." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Начало" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Приложения" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Системни" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Промяна на парола" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Изключване" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Изход" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Избор на език" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Вход" @@ -9889,11 +10060,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Затваряне" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -10047,15 +10222,25 @@ msgstr "Тук" msgid "Setting unchanged" msgstr "Настройките не са променени" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "преди премахване на {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Гуджарати" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Парола за сървъра на SSH.
Удостоверяване на SSH с ключове все още не е " +#~ "възможно." + +#~ msgid "Single Sign On" +#~ msgstr "Единен вход" + #~ msgid "Minetest" #~ msgstr "Luanti" diff --git a/plinth/locale/bn/LC_MESSAGES/django.po b/plinth/locale/bn/LC_MESSAGES/django.po index 27f946cf7..9f2139828 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-04-01 03:02+0000\n" "Last-Translator: MURALA SAI GANESH \n" "Language-Team: Bengali SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Configuration" +msgid "Password-based Authentication" +msgstr "পছন্দসমূহ" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -510,17 +534,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -556,7 +580,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -581,7 +621,7 @@ msgstr "" msgid "Caution:" msgstr "সতর্কতা:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -589,7 +629,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -705,107 +745,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -875,7 +915,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -960,8 +1000,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "মুছো" @@ -1031,6 +1071,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1311,7 +1352,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1869,7 +1910,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "নাম" @@ -2145,8 +2186,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "অবস্থা" @@ -2192,8 +2233,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3040,8 +3081,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "সম্পর্কে" @@ -3585,7 +3626,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4628,9 +4669,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5108,6 +5149,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5311,6 +5353,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5493,8 +5536,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5868,6 +5911,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Actions" +msgid "Application" +msgstr "ক্রিয়া" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6156,8 +6230,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6816,10 +6890,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7069,8 +7145,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7385,26 +7462,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8172,13 +8229,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8403,35 +8453,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8440,96 +8494,96 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete" msgid "Delete user" msgstr "মুছো" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8543,6 +8597,10 @@ msgstr "সক্রিয়" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8556,7 +8614,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8598,7 +8656,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8607,6 +8665,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8643,30 +8705,34 @@ msgstr "" msgid "Cancel" msgstr "বাতিল" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8693,55 +8759,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8749,22 +8826,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8776,70 +8853,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8888,18 +8995,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8923,62 +9034,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9135,6 +9258,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9286,35 +9425,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9407,11 +9546,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9561,12 +9704,12 @@ msgstr "এখানে" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/ca/LC_MESSAGES/django.po b/plinth/locale/ca/LC_MESSAGES/django.po index a2b7a039f..dc3010da9 100644 --- a/plinth/locale/ca/LC_MESSAGES/django.po +++ b/plinth/locale/ca/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2025-12-01 11:00+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-02-06 23:02+0000\n" "Last-Translator: kosagi \n" "Language-Team: Catalan \n" @@ -17,7 +17,7 @@ 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 5.15-dev\n" +"X-Generator: Weblate 5.16-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -25,10 +25,9 @@ msgid "Static configuration {etc_path} is setup properly" msgstr "La configuració estàtica {etc_path} s'ha establert correctament" #: plinth/container.py:140 -#, fuzzy, python-brace-format -#| msgid "Service {service_name} is running" +#, python-brace-format msgid "Container {container_name} is running" -msgstr "El servei {service_name} està en marxa" +msgstr "El contenidor {container_name} està en marxa" #: plinth/context_processors.py:21 plinth/views.py:175 msgid "FreedomBox" @@ -73,10 +72,8 @@ msgid "Repository to backup to" msgstr "Repositori des d'on recuperar" #: plinth/forms.py:62 -#, fuzzy -#| msgid "None" msgid "(None)" -msgstr "Cap" +msgstr "(Cap)" #: plinth/forms.py:68 msgid "Select a domain name to be used with this application" @@ -108,15 +105,15 @@ msgstr "Llengua que s'utilitzarà per presentar aquesta interfície web" msgid "Use the language preference set in the browser" msgstr "Utilitza la configuració de llengua del navegador" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Inici" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Aplicacions" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "Sistema" @@ -139,38 +136,42 @@ msgstr "Seguretat" msgid "Administration" msgstr "Administració" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "" "Segurament el sistema es troba sota molta càrrega. Si us plau, intenta-ho " "més tard." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "Pàgina no trobada: {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "Error al intentar la operació." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "Error al carregar la pàgina." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Servidor HTTP d'Apache" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Servidor Web" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Interfície Web (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -218,17 +219,17 @@ msgstr "Local" msgid "mDNS" msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "" "Còpies de Seguretat permet crear i gestionar arxius de còpia de seguretat." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Còpies de Seguretat" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -237,19 +238,19 @@ msgstr "" "seguretat de les dades. Prefereix una ubicació de còpia de seguretat remota " "xifrada o un disc addicional connectat." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "Activa una programació de Còpies de Seguretat" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "Ves a {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -259,7 +260,7 @@ msgstr "" "intents de còpia de seguretat no han tingut èxit. L’últim error és: " "{error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Error al fer la Còpia de Seguretat" @@ -413,7 +414,9 @@ msgid "Passphrase" msgstr "Frase de Contrasenya" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Contrasenya; Només es necessita si s'utilitza encriptació." #: plinth/modules/backups/forms.py:190 @@ -453,29 +456,53 @@ msgstr "" "i>" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Mode d'Autenticació" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Ha fallat l'autenticació amb el servidor remot." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "Shared Authentication Secret" +msgid "Key-based Authentication" +msgstr "Secret d’autenticació compartit" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Shared Authentication Secret" +msgid "Password-based Authentication" +msgstr "Secret d’autenticació compartit" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Contrasenya del Servidor SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" -"Contrasenya del servidor SSH.
L'autenticació mitjançant clau SSH encara " -"no és possible." #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "El repositori de còpies de seguretat remot ja existeix." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Selecciona la clau pública SSH verificada" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Restaurar" @@ -555,17 +582,17 @@ msgstr "El sistema de còpies de seguretat està ocupat amb una altra operació. msgid "Not enough space left on the disk or remote location." msgstr "No hi ha prou espai disponible al disc o a la ubicació remota." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "El repositori existent no està xifrat." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Emmagatzematge de {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Crea una còpia de seguretat nova" @@ -601,7 +628,23 @@ msgstr "Afegeix ubicació de còpia de seguretat remota" msgid "Existing Backups" msgstr "Còpies de seguretat existents" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -626,7 +669,7 @@ msgstr "Còpies de seguretat existents" msgid "Caution:" msgstr "Precaució:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -638,7 +681,7 @@ msgstr "" "%(box_name)s necessites les credencials SSH i, si s'ha escollit, la frase de " "pas de xifratge." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Crea una ubicació" @@ -712,27 +755,15 @@ msgid "Restore data from" msgstr "Restaura dades des de" #: plinth/modules/backups/templates/backups_upload.html:17 -#, fuzzy, python-format -#| msgid "" -#| "\n" -#| " Upload a backup file downloaded from another %(box_name)s to " -#| "restore its\n" -#| " contents. You can choose the apps you wish to restore after " -#| "uploading a\n" -#| " backup file.\n" -#| " " +#, python-format msgid "" "Upload a backup file downloaded from another %(box_name)s to restore its " "contents. You can choose the apps you wish to restore after uploading a " "backup file." msgstr "" -"\n" -" Carrega un fitxer de còpia de seguretat descarregat d'un altre " -"%(box_name)s per restaurar-ne \n" -"\t\tel contingut. Després de carregar el fitxer de còpia de seguretat, " -"podràs triar les aplicacions \n" -"\t\tque desitges restaurar.\n" -" " +"Carrega un fitxer de còpia de seguretat descarregat d'un altre %(box_name)s " +"per restaurar-ne el contingut. Després de carregar el fitxer de còpia de " +"seguretat, podràs triar les aplicacions que desitges restaurar." #: plinth/modules/backups/templates/backups_upload.html:31 #, python-format @@ -784,107 +815,109 @@ msgstr "" msgid "Verify Host" msgstr "Verifica l'amfitrió" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Programació de còpies de seguretat actualitzada." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Programació de còpies de seguretat" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Arxiu creat." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Elimina l'arxiu" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Arxiu eliminat." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Penja i restaura una còpia de seguretat" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "S'ha penjat correctament." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "No s'ha trobat cap arxiu de còpia de seguretat." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Restaura des de l'arxiu penjat" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "Arxius restaurats des de la còpia de seguretat." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "No hi ha discs addicionals disponibles per afegir un repositori." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Crea repositori de còpia de seguretat" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "S'ha afegit un nou repositori." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Crea un repositori de còpia de seguretat remot" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "S'ha afegit un nou repositori remot SSH." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "Verifica la clau d'amfitrió SSH" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "L'amfitrió SSH ja ha estat verificat." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "Amfitrió SSH verificat." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "No s'ha pogut verificar la clau pública de l'amfitrió SSH." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "Ha fallat l'autenticació amb el servidor remot." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Error en establir la connexió amb el servidor: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Programació de còpies de seguretat actualitzada." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Programació de còpies de seguretat" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Arxiu creat." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Elimina l'arxiu" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Arxiu eliminat." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Penja i restaura una còpia de seguretat" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "S'ha penjat correctament." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "No s'ha trobat cap arxiu de còpia de seguretat." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Restaura des de l'arxiu penjat" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "Arxius restaurats des de la còpia de seguretat." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "No hi ha discs addicionals disponibles per afegir un repositori." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Crea repositori de còpia de seguretat" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "S'ha afegit un nou repositori." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Crea un repositori de còpia de seguretat remot" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "S'ha afegit un nou repositori remot SSH." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "Verifica la clau d'amfitrió SSH" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "L'amfitrió SSH ja ha estat verificat." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "Amfitrió SSH verificat." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Repositori eliminat." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Elimina el repositori" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Repositori eliminat. Les còpies de seguretat no han estat suprimides." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Ha fallat el desmuntatge!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Ha fallat el muntatge" @@ -969,7 +1002,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Permisos" @@ -1058,8 +1091,8 @@ msgstr "Llista" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Elimina" @@ -1137,6 +1170,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Servidor" @@ -1440,13 +1474,20 @@ msgid "Webserver Home Page" msgstr "Pàgina Inicial del Servidor Web" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Tria la pàgina per defecte que s’ha de mostrar quan algú visiti el teu " "{box_name} a la web. Un cas d’ús típic és establir el teu blog o wiki com a " @@ -1916,13 +1957,6 @@ msgstr "" "IP actual." #: plinth/modules/dynamicdns/__init__.py:41 -#, fuzzy -#| msgid "" -#| "If you are looking for a free dynamic DNS account, you may find a free " -#| "GnuDIP service at ddns.freedombox.org or you may find free update URL " -#| "based services at freedns.afraid.org." msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at ddns.freedombox.org o serveis gratuïts basats en URL " -"d’actualització a freedns.afraid.org." +"target=\"_blank\">ddns.freedombox.org. Amb aquest servei també tens " +"subdominis il·limitats (amb opció d'habilitar comodins a la configuració del " +"compte). Per fer ús d'un subdomini, afegeix un domini estàtic a l'aplicació " +"de Noms." #: plinth/modules/dynamicdns/__init__.py:47 -#, fuzzy -#| msgid "" -#| "If you are looking for a free dynamic DNS account, you may find a free " -#| "GnuDIP service at ddns.freedombox.org or you may find free update URL " -#| "based services at freedns.afraid.org." msgid "" "Alternatively, you may find a free update URL based service at freedns.afraid.org." msgstr "" -"Si busques un compte de DNS dinàmic gratuït, pots trobar un servei gratuït " -"de GnuDIP a ddns.freedombox.org o serveis gratuïts basats en URL " -"d’actualització a freedns.afraid.org." +"També pots trobar un servei gratuït basat en l'actualització d'URL a freedns.afraid.org." #: plinth/modules/dynamicdns/__init__.py:50 msgid "" @@ -2069,7 +2094,7 @@ msgid "Invalid domain name" msgstr "Nom del domini incorrecte" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Nom d'usuari" @@ -2360,8 +2385,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Estat" @@ -2428,9 +2453,13 @@ msgstr "" "automàticament i apunten al primer usuari administrador." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "L’aplicació Roundcube ofereix una " "interfície web perquè els usuaris puguin accedir al correu electrònic." @@ -3348,8 +3377,8 @@ msgstr "Enviar comentaris" msgid "Contribute" msgstr "Contribueix" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Sobre" @@ -3755,10 +3784,8 @@ msgid "Home Assistant" msgstr "Home Assistant" #: plinth/modules/homeassistant/manifest.py:62 -#, fuzzy -#| msgid "Automatic" msgid "Home Automation" -msgstr "Automàtic" +msgstr "Automatització de la Llar" #: plinth/modules/homeassistant/manifest.py:63 msgid "IoT" @@ -3999,9 +4026,8 @@ msgid "Janus" msgstr "Janus" #: plinth/modules/janus/manifest.py:7 -#, fuzzy msgid "Janus Video Room" -msgstr "Janus Video Room" +msgstr "Sala de Video Janus" #: plinth/modules/janus/manifest.py:16 #, fuzzy @@ -4014,7 +4040,7 @@ msgstr "Videoconferència" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Informació de la llicència de JavaScript" @@ -4216,9 +4242,8 @@ msgstr "" "d’utilitzar aquest servei." #: plinth/modules/letsencrypt/__init__.py:60 -#, fuzzy msgid "Let's Encrypt" -msgstr "Let's Encrypt" +msgstr "Let's Encrypt (Encriptem)" #: plinth/modules/letsencrypt/manifest.py:11 msgid "Certificates" @@ -4453,20 +4478,16 @@ msgstr "" "almenys un domini per poder utilitzar Matrix Synapse." #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:20 -#, fuzzy, python-format -#| msgid "" -#| "Your XMPP server domain is set to %(domain_name)s. User IDs will " -#| "look like username@%(domain_name)s. You can setup your domain on " -#| "the system Name Services page." +#, python-format msgid "" "The Matrix server domain is set to %(domain_name)s. User IDs will " "look like @username:%(domain_name)s. Changing the domain name " "requires uninstalling and reinstalling the app which will wipe app's data." msgstr "" -"El domini del teu servidor XMPP està configurat a %(domain_name)s. " -"Els ID d’usuari tindran aquest format: username@%(domain_name)s. Pots " -"configurar el teu domini a la pàgina de Serveis de " -"Noms del sistema." +"El domini del teu servidor de Matrix està configurat a %(domain_name)s. Els ID d’usuari tindran aquest format: username:%(domain_name)s. Canviar el domini requereix desinstalar i reinstal·lar l'aplicació, " +"cosa que eliminarà les dades de l'aplicació." #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:28 msgid "" @@ -4509,10 +4530,8 @@ msgid "Unlimited" msgstr "Il·limitat" #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:78 -#, fuzzy -#| msgid "Conversations" msgid "Federation" -msgstr "Converses" +msgstr "Federació" #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:81 #, python-format @@ -4714,26 +4733,21 @@ msgid "Default language changed" msgstr "Llengua per defecte modificada" #: plinth/modules/minetest/__init__.py:33 -#, fuzzy, python-brace-format -#| msgid "" -#| "Minetest is a multiplayer infinite-world block sandbox. This module " -#| "enables the Minetest server to be run on this {box_name}, on the default " -#| "port (30000). To connect to the server, a Minetest client is needed." +#, python-brace-format msgid "" "Luanti, formally known as Minetest, is a multiplayer infinite-world block " "sandbox. This module enables the Luanti server to be run on this {box_name}, " "on the default port (30000). To connect to the server, a Luanti client is needed." msgstr "" -"Minetest és un sandbox multijugador de blocs amb món infinit. Aquest mòdul " -"permet executar el servidor Minetest en aquest {box_name}, al port per " -"defecte (30000). Per connectar-se al servidor, cal un client de Minetest." +"Luanti, abans conegut com a Minetest, és un sandbox multijugador de blocs " +"amb món infinit. Aquest mòdul permet executar el servidor Luanti en aquest " +"{box_name}, al port per defecte (30000). Per connectar-se al servidor, cal " +"un client de Luanti." #: plinth/modules/minetest/__init__.py:57 plinth/modules/minetest/manifest.py:9 msgid "Luanti" -msgstr "" +msgstr "Luanti" #: plinth/modules/minetest/forms.py:13 msgid "Maximum number of players" @@ -4836,7 +4850,6 @@ msgstr "" "Xbox 360) o aplicacions com totem i Kodi." #: plinth/modules/minidlna/manifest.py:10 -#, fuzzy msgid "vlc" msgstr "vlc" @@ -4899,6 +4912,11 @@ msgid "" "are several third-party clients as well." msgstr "" +"Les característiques principals inclouen dreceres de teclat per a una " +"navegació ràpida, cerca de text complet, filtratge d’articles, categories i " +"favorits. Miniflux preserva la privadesa de l’usuari eliminant rastrejadors. " +"La interfície principal és basada en web. També hi ha diversos clients de tercers." #: plinth/modules/miniflux/__init__.py:42 #: plinth/modules/miniflux/manifest.py:10 @@ -4907,123 +4925,137 @@ msgstr "Miniflux" #: plinth/modules/miniflux/forms.py:12 msgid "Enter a username for the user." -msgstr "" +msgstr "Introdueix un nom d'usuari per a l'usuari nou." #: plinth/modules/miniflux/forms.py:16 msgid "Enter a strong password with a minimum of 6 characters." -msgstr "" +msgstr "Introdueix una Contrasenya forta amb un mínim de 6 caràcters." #: plinth/modules/miniflux/forms.py:18 msgid "Password confirmation" -msgstr "" +msgstr "Confirmació de contrasenya" #: plinth/modules/miniflux/forms.py:20 msgid "Enter the same password for confirmation." -msgstr "" +msgstr "Introdueix la mateixa contrasenya per a confirmar-ho." #: plinth/modules/miniflux/forms.py:31 msgid "Passwords do not match." -msgstr "" +msgstr "Les contrasenyes no coincideixen." #: plinth/modules/miniflux/manifest.py:18 +#, fuzzy msgid "Fluent Reader Lite" -msgstr "" +msgstr "Fluent Reader Lite" #: plinth/modules/miniflux/manifest.py:33 +#, fuzzy msgid "Fluent Reader" -msgstr "" +msgstr "Fluent Reader" #: plinth/modules/miniflux/manifest.py:46 +#, fuzzy msgid "FluxNews" -msgstr "" +msgstr "FluxNews" #: plinth/modules/miniflux/manifest.py:61 +#, fuzzy msgid "MiniFlutt" -msgstr "" +msgstr "MiniFlutt" #: plinth/modules/miniflux/manifest.py:71 +#, fuzzy msgid "NetNewsWire" -msgstr "" +msgstr "NetNewsWire" #: plinth/modules/miniflux/manifest.py:86 +#, fuzzy msgid "Newsflash" -msgstr "" +msgstr "Newsflash" #: plinth/modules/miniflux/manifest.py:96 +#, fuzzy msgid "Read You" -msgstr "" +msgstr "Read You" #: plinth/modules/miniflux/manifest.py:106 +#, fuzzy msgid "RSS Guard" -msgstr "" +msgstr "RSS Guard" #: plinth/modules/miniflux/manifest.py:138 +#, fuzzy msgid "Feed reader" -msgstr "" +msgstr "Feed reader" #: plinth/modules/miniflux/manifest.py:138 msgid "News aggregation" -msgstr "" +msgstr "Agrupació de notícies" #: plinth/modules/miniflux/manifest.py:138 #: plinth/modules/rssbridge/manifest.py:16 msgid "RSS" -msgstr "" +msgstr "RSS" #: plinth/modules/miniflux/manifest.py:138 #: plinth/modules/rssbridge/manifest.py:16 +#, fuzzy msgid "ATOM" -msgstr "" +msgstr "ATOM" #: plinth/modules/miniflux/templates/miniflux.html:14 msgid "" "Create an admin user to get started. Other users can be created from within " "Miniflux." msgstr "" +"Crea un usuari administrador per començar. Altres usuaris es poden crear des " +"de dins de Miniflux." #: plinth/modules/miniflux/templates/miniflux.html:22 #: plinth/modules/miniflux/templates/miniflux.html:24 msgid "Create admin user" -msgstr "" +msgstr "Crea un usuari administrador" #: plinth/modules/miniflux/templates/miniflux.html:27 #: plinth/modules/miniflux/templates/miniflux.html:29 msgid "Reset user password" -msgstr "" +msgstr "Restableix la contrasenya de l'usuari" #: plinth/modules/miniflux/views.py:38 msgid "Create Admin User" -msgstr "" +msgstr "Crea l'Usuari Administrador" #: plinth/modules/miniflux/views.py:48 #, python-brace-format msgid "Created admin user: {username}" -msgstr "" +msgstr "Usuari d'administrador creat:{username}" #: plinth/modules/miniflux/views.py:53 #, python-brace-format msgid "An error occurred while creating the user: {error}." -msgstr "" +msgstr "Hi ha hagut un error al crear l'usuari:{error}." #: plinth/modules/miniflux/views.py:70 msgid "Reset User Password" -msgstr "" +msgstr "Restableix la Contrasenya de l'Usuari" #: plinth/modules/miniflux/views.py:80 #, python-brace-format msgid "Password reset for user: {username}" -msgstr "" +msgstr "Contrasenya restablerta per l'usuari:{username}" #: plinth/modules/miniflux/views.py:85 #, python-brace-format msgid "An error occurred during password reset: {error}." -msgstr "" +msgstr "Hi ha hagut un error al restablir la contrasenya:{error}." #: plinth/modules/mumble/__init__.py:26 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" +"Mumble és un programari de xat de veu de codi obert, de baixa latència, " +"xifrat i d’alta qualitat." #: plinth/modules/mumble/__init__.py:28 msgid "" @@ -5031,6 +5063,9 @@ msgid "" "href=\"http://mumble.info\">Clients to connect to Mumble from your " "desktop and mobile devices are available." msgstr "" +"Pots connectar-te al teu servidor Mumble al port habitual de Mumble 64738. " +"Estan disponibles Clients per connectar-" +"te a Mumble des del teu escriptori i dispositius mòbils." #: plinth/modules/mumble/__init__.py:46 plinth/modules/mumble/manifest.py:9 msgid "Mumble" @@ -5038,61 +5073,71 @@ msgstr "Mumble" #: plinth/modules/mumble/__init__.py:158 msgid "Mumble server is configured" -msgstr "" +msgstr "El servidor Mumble està configurat" #: plinth/modules/mumble/forms.py:30 msgid "Set SuperUser Password" -msgstr "" +msgstr "Estableix la Contrasenya del SuperUser (SuperUsuari)" #: plinth/modules/mumble/forms.py:33 msgid "" "Optional. Leave this field blank to keep the current password. SuperUser " "password can be used to manage permissions in Mumble." msgstr "" +"Opcional. Deixa aquest camp en blanc per mantenir la contrasenya actual. La " +"contrasenya de SuperUser (SuperUsuari) es pot utilitzar per gestionar els " +"permisos a Mumble." #: plinth/modules/mumble/forms.py:40 msgid "Set a password to join the server" -msgstr "" +msgstr "Estableix una contrasenya per unir-te al servidor" #: plinth/modules/mumble/forms.py:42 msgid "" "Set a password that is required to join the server. Leave empty to use the " "current password." msgstr "" +"Estableix una contrasenya requerida per unir-se al servidor. Deixa-ho en " +"blanc per utilitzar la contrasenya actual." #: plinth/modules/mumble/forms.py:48 msgid "Set the name for the root channel" -msgstr "" +msgstr "Estableix el nom del canal d'arrel" #: plinth/modules/mumble/forms.py:52 msgid "" "Set the name of the main channel of your mumble server. If the name was " "never changed, the channel is named Root." msgstr "" +"Estableix el nom del canal principal del teu servidor Mumble. Si el nom mai " +"s’ha canviat, el canal es diu Root." #: plinth/modules/mumble/manifest.py:34 +#, fuzzy msgid "Mumblefly" -msgstr "" +msgstr "Mumblefly" #: plinth/modules/mumble/manifest.py:43 +#, fuzzy msgid "Mumla" -msgstr "" +msgstr "Mumla" #: plinth/modules/mumble/manifest.py:67 msgid "Group conference" -msgstr "" +msgstr "Conferència de Grup" #: plinth/modules/mumble/views.py:43 msgid "SuperUser password successfully updated." msgstr "" +"La contrasenya del SuperUser (SuperUsuari) s'ha actualitzat correctament." #: plinth/modules/mumble/views.py:48 msgid "Join password changed" -msgstr "" +msgstr "La contrasenya per unir-se al servidor s'ha canviat" #: plinth/modules/mumble/views.py:53 msgid "Root channel name changed." -msgstr "" +msgstr "El nom del canal root (d'arrel) s'ha canviat." #: plinth/modules/names/__init__.py:34 #, python-brace-format @@ -5102,47 +5147,53 @@ msgid "" "each type of name, it is shown whether the HTTP, HTTPS, and SSH services are " "enabled or disabled for incoming connections through the given name." msgstr "" +"El Servei de Noms proporciona una visió general de les maneres en què es pot " +"accedir a {box_name} des d’Internet públic: nom de domini, servei Tor onion " +"i Pagekite. Per a cada tipus de nom, es mostra si els serveis HTTP, HTTPS i " +"SSH estan habilitats o deshabilitats per a connexions entrants a través del " +"nom indicat." #: plinth/modules/names/__init__.py:55 msgid "Name Services" -msgstr "" +msgstr "Serveis de Nom" #: plinth/modules/names/__init__.py:69 msgid "Domain (regular)" -msgstr "" +msgstr "Domini (normal)" #: plinth/modules/names/__init__.py:178 msgid "Package systemd-resolved is installed" -msgstr "" +msgstr "S'ha instal·lat el paquet systemd-resolved" #: plinth/modules/names/__init__.py:232 #, python-brace-format msgid "Resolve domain name: {domain}" -msgstr "" +msgstr "Resol el nom de domini:{domain}" #: plinth/modules/names/components.py:14 msgid "All" -msgstr "" +msgstr "Tot" #: plinth/modules/names/components.py:18 plinth/modules/names/components.py:22 msgid "All web apps" -msgstr "" +msgstr "Totes les aplicacions web" #: plinth/modules/names/components.py:26 +#, fuzzy msgid "Secure Shell" -msgstr "" +msgstr "Secure Shell" #: plinth/modules/names/forms.py:22 msgid "Use DNS-over-TLS for resolving domains (global preference)" -msgstr "" +msgstr "Utilitza DNS-sobre-TLS per resoldre dominis (preferència global)" #: plinth/modules/names/forms.py:50 msgid "Use DNSSEC when resolving domains (global preference)" -msgstr "" +msgstr "Utilitza DNSSEC en resoldre dominis (preferència global)" #: plinth/modules/names/forms.py:85 plinth/modules/names/manifest.py:12 msgid "Hostname" -msgstr "" +msgstr "Nom de l'amfitrió" #: plinth/modules/names/forms.py:86 #, python-brace-format @@ -5152,10 +5203,14 @@ msgid "" "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" +"El nom de l’amfitrió és el nom local pel qual altres dispositius a la xarxa " +"local poden accedir al teu {box_name}. Ha de començar i acabar amb una " +"lletra o un dígit i només pot contenir lletres, dígits i guions com a " +"caràcters interiors. La longitud total ha de ser de 63 caràcters o menys." #: plinth/modules/names/forms.py:92 msgid "Invalid hostname" -msgstr "" +msgstr "El nom d'amfitrió no és vàlid" #: plinth/modules/names/forms.py:108 #, python-brace-format @@ -5167,10 +5222,16 @@ msgid "" "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" +"El nom de domini és el nom global pel qual altres dispositius a Internet " +"poden accedir al teu {box_name}. Ha de consistir en etiquetes separades per " +"punts. Cada etiqueta ha de començar i acabar amb una lletra o un dígit i " +"només pot contenir lletres, dígits i guions com a caràcters interiors. La " +"longitud de cada etiqueta ha de ser de 63 caràcters o menys. La longitud " +"total del nom de domini ha de ser de 253 caràcters o menys." #: plinth/modules/names/manifest.py:13 msgid "DNS Resolution" -msgstr "" +msgstr "Resolució de DNS" #: plinth/modules/names/resolved.py:91 plinth/modules/names/resolved.py:101 #: plinth/modules/networks/forms.py:28 @@ -5179,29 +5240,29 @@ msgstr "" #: plinth/modules/networks/templates/connection_show.html:253 #: plinth/modules/networks/views.py:125 msgid "yes" -msgstr "" +msgstr "Sí" #: plinth/modules/names/resolved.py:92 plinth/modules/networks/forms.py:29 #: plinth/modules/networks/views.py:124 msgid "opportunistic" -msgstr "" +msgstr "oportunista" #: plinth/modules/names/resolved.py:93 plinth/modules/names/resolved.py:103 #: plinth/modules/networks/forms.py:30 plinth/modules/networks/views.py:123 msgid "no" -msgstr "" +msgstr "No" #: plinth/modules/names/resolved.py:102 msgid "allow-downgrade" -msgstr "" +msgstr "permetre baixar de categoria" #: plinth/modules/names/resolved.py:110 msgid "supported" -msgstr "" +msgstr "compatible" #: plinth/modules/names/resolved.py:110 msgid "unsupported" -msgstr "" +msgstr "no compatible" #: plinth/modules/names/templates/names-domain-add.html:11 #, python-format @@ -5210,6 +5271,9 @@ msgid "" "here. The name servers responsible for the domain must be pointing (A and " "AAAA records) to the public IP addresses of the %(box_name)s." msgstr "" +"Si has comprat un nom de domini a un registrador de dominis, el pots " +"configurar aquí. Els servidors de noms responsables del domini han d’apuntar " +"(registres A i AAAA) a les adreces IP públiques del %(box_name)s." #: plinth/modules/names/templates/names-domain-add.html:18 #, python-format @@ -5219,302 +5283,351 @@ msgid "" "to %(box_name)s. Subdomains are useful for hosting multiple applications " "that each require a dedicted domain for themselves." msgstr "" +"Si també vols utilitzar un subdomini d’un domini ja configurat, afegeix-ne " +"una altra entrada aquí. Assegura’t que el subdomini estigui configurat per " +"apuntar a %(box_name)s. Els subdominis són útils per allotjar diverses " +"aplicacions que cadascuna requereix un domini dedicat." #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" -msgstr "" +msgstr "Editar" #: plinth/modules/names/templates/names.html:59 msgid "Add Domains" -msgstr "" +msgstr "Afegeix Dominis" #: plinth/modules/names/templates/names.html:87 msgid "Resolver Status" -msgstr "" +msgstr "Estat del resolutor" #: plinth/modules/names/templates/names.html:97 +#, fuzzy msgid "Global" -msgstr "" +msgstr "Global" #: plinth/modules/names/templates/names.html:99 msgid "Link" -msgstr "" +msgstr "Enllaç" #: plinth/modules/names/templates/names.html:104 #: plinth/modules/networks/templates/connection_show.html:268 msgid "DNS-over-TLS" -msgstr "" +msgstr "DNS-sobre-TLS" #: plinth/modules/names/templates/names.html:108 +#, fuzzy msgid "DNSSEC" -msgstr "" +msgstr "DNSSEC" #: plinth/modules/names/templates/names.html:113 msgid "Current DNS Server" -msgstr "" +msgstr "Servidor DNS Actual" #: plinth/modules/names/templates/names.html:119 msgid "DNS Servers" -msgstr "" +msgstr "Servidors DNS" #: plinth/modules/names/templates/names.html:129 msgid "Fallback DNS Servers" -msgstr "" +msgstr "Servidors DNS de reserva" #: plinth/modules/names/templates/names.html:143 msgid "" "systemd-resolved package is not installed. Install it for additional " "functionality." msgstr "" +"El paquet systemd-resolved no està instal·lat. Instal·la'l per tenir " +"funcionalitats addicionals." #: plinth/modules/names/templates/names.html:152 plinth/templates/setup.html:87 msgid "Install" -msgstr "" +msgstr "Instal·lar" #: plinth/modules/names/templates/names.html:162 msgid "Error retrieving status:" -msgstr "" +msgstr "Error al recuperar l'estat:" #: plinth/modules/names/views.py:83 msgid "Set Hostname" -msgstr "" +msgstr "Estableix el Nom de l'Amfitrió" #: plinth/modules/names/views.py:101 #, python-brace-format msgid "Error setting hostname: {exception}" -msgstr "" +msgstr "Error a l'establir el Nom de l'Amfitrió:{exception}" #: plinth/modules/names/views.py:117 msgid "Add Domain Name" -msgstr "" +msgstr "Afegeix un Nom de Domini" #: plinth/modules/networks/__init__.py:19 msgid "" "Configure network devices. Connect to the Internet via Ethernet, Wi-Fi or " "PPPoE. Share that connection with other devices on the network." msgstr "" +"Configura els dispositius de xarxa. Connecta’t a Internet mitjançant " +"Ethernet, Wi-Fi o PPPoE. Comparteix aquesta connexió amb altres dispositius " +"de la xarxa." #: plinth/modules/networks/__init__.py:21 msgid "" "Devices administered through other methods may not be available for " "configuration here." msgstr "" +"Els dispositius administrats mitjançant altres mètodes poden no estar " +"disponibles per a la configuració aquí." #: plinth/modules/networks/__init__.py:42 msgid "Networks" -msgstr "" +msgstr "Xarxes" #: plinth/modules/networks/forms.py:19 plinth/modules/networks/forms.py:25 #: plinth/modules/networks/views.py:39 plinth/modules/networks/views.py:100 #: plinth/modules/networks/views.py:111 msgid "unknown" -msgstr "" +msgstr "desconegut" #: plinth/modules/networks/forms.py:38 msgid "Connection Type" -msgstr "" +msgstr "Tipus de Connexió" #: plinth/modules/networks/forms.py:45 msgid "Connection Name" -msgstr "" +msgstr "Nom de la Connexió" #: plinth/modules/networks/forms.py:47 msgid "Network Interface" -msgstr "" +msgstr "Interfície de Xarxa" #: plinth/modules/networks/forms.py:48 msgid "The network device that this connection should be bound to." -msgstr "" +msgstr "El dispositiu de xarxa al qual s’ha d’associar aquesta connexió." #: plinth/modules/networks/forms.py:51 msgid "Firewall Zone" -msgstr "" +msgstr "Zona del Tallafocs" #: plinth/modules/networks/forms.py:52 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" +"La zona del tallafocs controlarà quins serveis estan disponibles a través " +"d’aquesta interfície. Selecciona Només interna per a xarxes de confiança." #: plinth/modules/networks/forms.py:56 msgid "Use DNS-over-TLS" -msgstr "" +msgstr "Utilitza DNS-sobre-TLS" #: plinth/modules/networks/forms.py:90 msgid "IPv4 Addressing Method" -msgstr "" +msgstr "Mètode d’adreçament IPv4" #: plinth/modules/networks/forms.py:92 msgid "" "Automatic (DHCP): Configure automatically, use Internet connection from this " "network" msgstr "" +"Automàtic (DHCP): Configura automàticament, utilitza la connexió a Internet " +"d’aquesta xarxa" #: plinth/modules/networks/forms.py:95 msgid "" "Shared: Act as a router, provide Internet connection to other devices on " "this network" msgstr "" +"Compartida: Actua com a encaminador, proporciona connexió a Internet a " +"altres dispositius d’aquesta xarxa" #: plinth/modules/networks/forms.py:98 plinth/modules/networks/forms.py:139 msgid "" "Manual: Use manually specified parameters, use Internet connection from this " "network" msgstr "" +"Manual: Utilitza els paràmetres especificats manualment, utilitza la " +"connexió a Internet d’aquesta xarxa" #: plinth/modules/networks/forms.py:101 msgid "Disabled: Do not configure this addressing method" -msgstr "" +msgstr "Deshabilitat: No configures aquest mètode d’adreçament" #: plinth/modules/networks/forms.py:108 +#, fuzzy msgid "Netmask" -msgstr "" +msgstr "Netmask" #: plinth/modules/networks/forms.py:109 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" +"Valor opcional. Si es deixa en blanc, s’utilitzarà una màscara de xarxa " +"predeterminada basada en l’adreça." #: plinth/modules/networks/forms.py:113 plinth/modules/networks/forms.py:152 #: plinth/modules/networks/templates/connection_show.html:197 #: plinth/modules/networks/templates/connection_show.html:238 msgid "Gateway" -msgstr "" +msgstr "Passarel·la" #: plinth/modules/networks/forms.py:113 plinth/modules/networks/forms.py:152 msgid "Optional value." -msgstr "" +msgstr "Valor opcional." #: plinth/modules/networks/forms.py:116 plinth/modules/networks/forms.py:155 msgid "DNS Server" -msgstr "" +msgstr "Servidor DNS" #: plinth/modules/networks/forms.py:117 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" +"Valor opcional. Si s’introdueix aquest valor i el mètode d’adreçament IPv4 " +"és \"Automàtic\", els servidors DNS proporcionats per un servidor DHCP seran " +"ignorats." #: plinth/modules/networks/forms.py:122 plinth/modules/networks/forms.py:161 msgid "Second DNS Server" -msgstr "" +msgstr "Segon Servidor DNS" #: plinth/modules/networks/forms.py:123 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" +"Valor opcional. Si s’introdueix aquest valor i el Mètode d’adreçament IPv4 " +"és \"Automàtic\", els servidors DNS proporcionats per un servidor DHCP seran " +"ignorats." #: plinth/modules/networks/forms.py:128 msgid "IPv6 Addressing Method" -msgstr "" +msgstr "Mètode d’adreçament IPv6" #: plinth/modules/networks/forms.py:130 msgid "" "Automatic: Configure automatically, use Internet connection from this network" msgstr "" +"Automàtic: Configura automàticament, utilitza la connexió a Internet " +"d’aquesta xarxa" #: plinth/modules/networks/forms.py:133 msgid "" "Automatic (DHCP only): Configure automatically, use Internet connection from " "this network" msgstr "" +"Automàtic (només DHCP): Configura automàticament, utilitza la connexió a " +"Internet d’aquesta xarxa" #: plinth/modules/networks/forms.py:136 msgid "" "Link-local: Configure automatically to use an address that is only relevant " "to this network." msgstr "" +"Link-local: Configura automàticament per utilitzar una adreça que només és " +"rellevant per a aquesta xarxa." #: plinth/modules/networks/forms.py:141 msgid "Ignore: Ignore this addressing method" -msgstr "" +msgstr "Ignora: Ignora aquest mètode d’adreçament" #: plinth/modules/networks/forms.py:142 msgid "Disabled: Disable IPv6 for this connection" -msgstr "" +msgstr "Deshabilitat: Desactiva IPv6 per a aquesta connexió" #: plinth/modules/networks/forms.py:147 +#, fuzzy msgid "Prefix" -msgstr "" +msgstr "Prefix" #: plinth/modules/networks/forms.py:148 msgid "Value between 1 and 128." -msgstr "" +msgstr "Valor entre 1 i 128." #: plinth/modules/networks/forms.py:156 msgid "" "Optional value. If this value is given and IPv6 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" +"Valor opcional. Si s’introdueix aquest valor i el mètode d’adreçament IPv6 " +"és \"Automàtic\", els servidors DNS proporcionats per un servidor DHCP seran " +"ignorats." #: plinth/modules/networks/forms.py:162 msgid "" "Optional value. If this value is given and IPv6 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" +"Valor opcional. Si s’introdueix aquest valor i el Mètode d’adreçament IPv6 " +"és \"Automàtic\", els servidors DNS proporcionats per un servidor DHCP seran " +"ignorats." #: plinth/modules/networks/forms.py:183 msgid "-- select --" -msgstr "" +msgstr "-- selecciona --" #: plinth/modules/networks/forms.py:312 #: plinth/modules/networks/templates/connection_show.html:139 +#, fuzzy msgid "SSID" -msgstr "" +msgstr "SSID" #: plinth/modules/networks/forms.py:313 msgid "The visible name of the network." -msgstr "" +msgstr "El nom visible de la xarxa." #: plinth/modules/networks/forms.py:315 #: plinth/modules/networks/templates/connection_show.html:152 msgid "Mode" -msgstr "" +msgstr "Mode" #: plinth/modules/networks/forms.py:315 msgid "Infrastructure" -msgstr "" +msgstr "Infraestructura" #: plinth/modules/networks/forms.py:316 msgid "Access Point" -msgstr "" +msgstr "Punt d'Accés" #: plinth/modules/networks/forms.py:317 msgid "Ad-hoc" -msgstr "" +msgstr "Ad-hoc" #: plinth/modules/networks/forms.py:319 msgid "Frequency Band" -msgstr "" +msgstr "Banda de freqüència" #: plinth/modules/networks/forms.py:320 +#, fuzzy msgid "A (5 GHz)" -msgstr "" +msgstr "A (5 GHz)" #: plinth/modules/networks/forms.py:321 +#, fuzzy msgid "B/G (2.4 GHz)" -msgstr "" +msgstr "B/G (2.4 GHz)" #: plinth/modules/networks/forms.py:323 #: plinth/modules/networks/templates/connection_show.html:166 msgid "Channel" -msgstr "" +msgstr "Canal" #: plinth/modules/networks/forms.py:324 msgid "" "Optional value. Wireless channel in the selected frequency band to restrict " "to. Blank or 0 value means automatic selection." msgstr "" +"Valor opcional. Canal sense fils a la banda de freqüència seleccionada per " +"restringir-hi. Un valor en blanc o 0 significa selecció automàtica." #: plinth/modules/networks/forms.py:329 +#, fuzzy msgid "BSSID" -msgstr "" +msgstr "BSSID" #: plinth/modules/networks/forms.py:330 msgid "" @@ -5522,29 +5635,35 @@ msgid "" "an access point, connect only if the BSSID of the access point matches the " "one provided. Example: 00:11:22:aa:bb:cc." msgstr "" +"Valor opcional. Identificador únic per al punt d’accés. En connectar-se a un " +"punt d’accés, connecta només si el BSSID del punt d’accés coincideix amb el " +"proporcionat. Exemple: 00:11:22:aa:bb:cc." #: plinth/modules/networks/forms.py:336 msgid "Authentication Mode" -msgstr "" +msgstr "Mode d'Autenticació" #: plinth/modules/networks/forms.py:337 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" +"Selecciona WPA si la xarxa sense fils està protegida i requereix que els " +"clients tinguin la contrasenya per connectar-se." #: plinth/modules/networks/forms.py:339 +#, fuzzy msgid "WPA" -msgstr "" +msgstr "WPA" #: plinth/modules/networks/forms.py:339 msgid "Open" -msgstr "" +msgstr "Obert" #: plinth/modules/networks/forms.py:375 #, python-brace-format msgid "Specify how your {box_name} is connected to your network" -msgstr "" +msgstr "Especifica com està connectat el teu {box_name} a la teva xarxa" #: plinth/modules/networks/forms.py:382 #, python-brace-format @@ -5553,6 +5672,9 @@ msgid "" "Internet connection from your router via Wi-Fi or Ethernet cable. This is a " "typical home setup.

" msgstr "" +"Connectat a un encaminador

El teu {box_name} obté la " +"connexió a Internet del teu encaminador mitjançant Wi-Fi o cable Ethernet. " +"Aquesta és una configuració típica a casa.

" #: plinth/modules/networks/forms.py:389 #, python-brace-format @@ -5562,6 +5684,11 @@ msgid "" "adapter. {box_name} is directly connected to the Internet and all your " "devices connect to {box_name} for their Internet connectivity.

" msgstr "" +"{box_name} és el teu encaminador

El teu {box_name} " +"té diverses interfícies de xarxa, com diversos ports Ethernet o un adaptador " +"Wi-Fi. {box_name} està connectat directament a Internet i tots els teus " +"dispositius es connecten a {box_name} per obtenir la seva connectivitat a " +"Internet.

" #: plinth/modules/networks/forms.py:398 #, python-brace-format @@ -5570,10 +5697,14 @@ msgid "" "connection is directly attached to your {box_name} and there are no other " "devices on the network. This can happen on community or cloud setups.

" msgstr "" +"Connectat directament a Internet

La teva connexió a " +"Internet està connectada directament al teu {box_name} i no hi ha altres " +"dispositius a la xarxa. Això pot passar en configuracions comunitàries o al " +"núvol.

" #: plinth/modules/networks/forms.py:417 msgid "Choose your internet connection type" -msgstr "" +msgstr "Tria el teu tipus de connexió a Internet" #: plinth/modules/networks/forms.py:421 msgid "" @@ -5585,6 +5716,14 @@ msgid "" "connectivity. If you have a public IP address but are unsure if it changes " "over time or not, it is safer to choose this option.

" msgstr "" +"Tinc una adreça IP pública que pot canviar amb el temps

Això significa que els dispositius a Internet poden accedir-te quan " +"estàs connectat a Internet. Cada vegada que et connectes a Internet amb el " +"teu Proveïdor de Serveis d’Internet (ISP), pots obtenir una adreça IP " +"diferent, especialment després d’un període desconnectat. Molts ISP " +"ofereixen aquest tipus de connectivitat. Si tens una adreça IP pública però " +"no estàs segur si canvia amb el temps o no, és més segur triar aquesta opció." +"

" #: plinth/modules/networks/forms.py:433 #, python-brace-format @@ -5597,6 +5736,13 @@ msgid "" "but very few ISPs offer this. You may be able to get this service from your " "ISP by making an additional payment.

" msgstr "" +"Tinc una adreça IP pública que no canvia amb el temps (recomanat)

Això significa que els dispositius a Internet poden " +"accedir-te quan estàs connectat a Internet. Cada vegada que et connectes a " +"Internet amb el teu Proveïdor de Serveis d’Internet (ISP), sempre obtens la " +"mateixa adreça IP. Aquesta és la configuració més senzilla per a molts " +"serveis de {box_name}, però molt pocs ISP l’ofereixen. És possible que " +"puguis obtenir aquest servei del teu ISP fent un pagament addicional.

" #: plinth/modules/networks/forms.py:446 #, python-brace-format @@ -5609,16 +5755,26 @@ msgid "" "troublesome situation for hosting services at home. {box_name} provides many " "workaround solutions but each solution has some limitations.

" msgstr "" +"No tinc una adreça IP pública

Això significa que els " +"dispositius a Internet no poden accedir-te quan estàs connectat a " +"Internet. Cada vegada que et connectes a Internet amb el teu Proveïdor de " +"Serveis d’Internet (ISP), obtens una adreça IP que només és rellevant per a " +"xarxes locals. Molts ISP ofereixen aquest tipus de connectivitat. Aquesta és " +"la situació més complicada per allotjar serveis a casa. {box_name} ofereix " +"diverses solucions alternatives, però cada solució té algunes limitacions." #: plinth/modules/networks/forms.py:459 msgid "" "I do not know the type of connection my ISP provides

You will be suggested the most conservative actions.

" msgstr "" +"No sé quin tipus de connexió proporciona el meu ISP

Se’t suggeriran les accions més conservadores.

" #: plinth/modules/networks/forms.py:476 msgid "Preferred router configuration" -msgstr "" +msgstr "Configuració preferida de l’encaminador" #: plinth/modules/networks/forms.py:481 #, python-brace-format @@ -5630,6 +5786,12 @@ msgid "" "configure a static local IP address for your {box_name} in your router's " "configuration.

" msgstr "" +"Utilitza la funció DMZ per reenviar tot el tràfic (recomanat)

La majoria d’encaminadors ofereixen una configuració " +"anomenada DMZ. Això permetrà que l’encaminador reenviï tot el tràfic entrant " +"des d’Internet a una sola adreça IP, com ara l’adreça IP del {box_name}. " +"Recorda primer configurar una adreça IP local estàtica per al teu {box_name} " +"a la configuració de l’encaminador.

" #: plinth/modules/networks/forms.py:493 #, python-brace-format @@ -5642,6 +5804,14 @@ msgid "" "ports 80 and 443 to work. Each of the other applications will suggest which " "port(s) need to be forwarded for that application to work.

" msgstr "" +"Reenvia tràfic específic segons les necessitats de cada aplicació

Alternativament, pots triar reenviar només el tràfic " +"específic al teu {box_name}. Això és ideal si tens altres servidors com " +"{box_name} a la teva xarxa o si el teu encaminador no admet la funció DMZ. " +"Totes les aplicacions que ofereixen una interfície web requereixen que " +"reenviïs el tràfic dels ports 80 i 443 per funcionar. Cada una de les altres " +"aplicacions suggerirà quin(s) port(s) cal reenviar perquè l’aplicació " +"funcioni.

" #: plinth/modules/networks/forms.py:507 msgid "" @@ -5649,20 +5819,25 @@ msgid "" "have not configured or are unable to configure the router currently and wish " "to be reminded later. Some of the other configuration steps may fail.

" msgstr "" +"L’encaminador no està configurat actualment

Tria " +"aquesta opció si no has configurat l’encaminador o no pots configurar-lo ara " +"i vols que se’t recordi més tard. Algunes de les altres passes de " +"configuració poden fallar.

" #: plinth/modules/networks/manifest.py:8 #: plinth/modules/networks/templates/connections_diagram.html:11 +#, fuzzy msgid "Internet" -msgstr "" +msgstr "Internet" #: plinth/modules/networks/manifest.py:8 plinth/modules/privoxy/manifest.py:10 #: plinth/modules/samba/manifest.py:82 msgid "Local network" -msgstr "" +msgstr "Xarxa local" #: plinth/modules/networks/manifest.py:8 msgid "Topology" -msgstr "" +msgstr "Topologia" #: plinth/modules/networks/templates/connection_show.html:27 #, python-format @@ -5672,136 +5847,143 @@ msgid "" "that you have other means to access %(box_name)s before altering this " "connection." msgstr "" +"Aquesta és la connexió principal de la qual depèn %(box_name)s per a la " +"connectivitat a Internet. Alterar-la pot fer que el teu %(box_name)s sigui " +"inaccessibles. Assegura’t de tenir altres maneres d’accedir a %(box_name)s " +"abans de modificar aquesta connexió." #: plinth/modules/networks/templates/connection_show.html:40 msgid "Edit connection" -msgstr "" +msgstr "Edita la connexió" #: plinth/modules/networks/templates/connection_show.html:47 #: plinth/modules/networks/templates/connections_list.html:61 msgid "Deactivate" -msgstr "" +msgstr "Desactivar" #: plinth/modules/networks/templates/connection_show.html:54 #: plinth/modules/networks/templates/connections_list.html:69 msgid "Activate" -msgstr "" +msgstr "Activar" #: plinth/modules/networks/templates/connection_show.html:60 msgid "Delete connection" -msgstr "" +msgstr "Elimina la connexió" #: plinth/modules/networks/templates/connection_show.html:63 #: plinth/modules/networks/templates/connections_diagram.html:19 #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" -msgstr "" +msgstr "Connexió" #: plinth/modules/networks/templates/connection_show.html:68 msgid "Primary connection" -msgstr "" +msgstr "Connexió principal" #: plinth/modules/networks/templates/connection_show.html:81 #: plinth/modules/storage/templates/storage.html:23 msgid "Device" -msgstr "" +msgstr "Dispositiu" #: plinth/modules/networks/templates/connection_show.html:85 msgid "State" -msgstr "" +msgstr "Estat" #: plinth/modules/networks/templates/connection_show.html:90 msgid "State reason" -msgstr "" +msgstr "Indica el motiu" #: plinth/modules/networks/templates/connection_show.html:99 msgid "MAC address" -msgstr "" +msgstr "Adreça MAC" #: plinth/modules/networks/templates/connection_show.html:103 msgid "Interface" -msgstr "" +msgstr "Interfície" #: plinth/modules/networks/templates/connection_show.html:107 #: plinth/modules/snapshot/templates/snapshot_delete_selected.html:19 #: plinth/modules/snapshot/templates/snapshot_manage.html:34 #: plinth/modules/snapshot/templates/snapshot_rollback.html:27 msgid "Description" -msgstr "" +msgstr "Descripció" #: plinth/modules/networks/templates/connection_show.html:113 msgid "Physical Link" -msgstr "" +msgstr "Enllaç Físic" #: plinth/modules/networks/templates/connection_show.html:118 msgid "Link state" -msgstr "" +msgstr "Estat de l'Enllaç" #: plinth/modules/networks/templates/connection_show.html:121 msgid "cable is connected" -msgstr "" +msgstr "el cable està connectat" #: plinth/modules/networks/templates/connection_show.html:124 msgid "please check cable" -msgstr "" +msgstr "si us plau, comproveu el cable" #: plinth/modules/networks/templates/connection_show.html:128 #: plinth/modules/networks/templates/connection_show.html:144 msgid "Speed" -msgstr "" +msgstr "Velocitat" #: plinth/modules/networks/templates/connection_show.html:130 #, python-format msgid "%(ethernet_speed)s Mbit/s" -msgstr "" +msgstr "%(ethernet_speed)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:146 -#, python-format +#, fuzzy, python-format msgid "%(wireless_bitrate)s Mbit/s" -msgstr "" +msgstr "%(wireless_bitrate)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:158 msgid "Signal strength" -msgstr "" +msgstr "Força del senyal" #: plinth/modules/networks/templates/connection_show.html:174 #: plinth/modules/networks/templates/connections_fields.html:67 +#, fuzzy msgid "IPv4" -msgstr "" +msgstr "IPv4" #: plinth/modules/networks/templates/connection_show.html:179 #: plinth/modules/networks/templates/connection_show.html:222 #: plinth/modules/shadowsocks/forms.py:36 #: plinth/modules/shadowsocksserver/forms.py:42 msgid "Method" -msgstr "" +msgstr "Mètode" #: plinth/modules/networks/templates/connection_show.html:188 #: plinth/modules/networks/templates/connection_show.html:229 msgid "IP address" -msgstr "" +msgstr "Adreça IP" #: plinth/modules/networks/templates/connection_show.html:204 #: plinth/modules/networks/templates/connection_show.html:245 msgid "DNS server" -msgstr "" +msgstr "Servidor DNS" #: plinth/modules/networks/templates/connection_show.html:211 #: plinth/modules/networks/templates/connection_show.html:252 #: plinth/modules/storage/forms.py:132 msgid "Default" -msgstr "" +msgstr "Configuració per defecte" #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connections_fields.html:94 +#, fuzzy msgid "IPv6" -msgstr "" +msgstr "IPv6" #: plinth/modules/networks/templates/connection_show.html:260 msgid "This connection is not active." -msgstr "" +msgstr "Aquesta connexió no es troba activa." #: plinth/modules/networks/templates/connection_show.html:264 #: plinth/modules/networks/templates/connections_fields_privacy.html:15 @@ -5809,20 +5991,20 @@ msgstr "" #: plinth/modules/privacy/__init__.py:77 #: plinth/modules/wireguard/manifest.py:45 msgid "Privacy" -msgstr "" +msgstr "Privacitat" #: plinth/modules/networks/templates/connection_show.html:279 #: plinth/modules/networks/templates/connection_show.html:304 #: plinth/modules/networks/templates/connection_show.html:328 msgid "Firewall zone" -msgstr "" +msgstr "Zona de tallafocs" #: plinth/modules/networks/templates/connection_show.html:289 #: plinth/modules/networks/templates/connection_show.html:314 #: plinth/modules/networks/templates/connection_show.html:338 #: plinth/templates/internal-zone.html:13 plinth/templates/messages.html:20 msgid "Info:" -msgstr "" +msgstr "Informació:" #: plinth/modules/networks/templates/connection_show.html:292 msgid "" @@ -5830,6 +6012,10 @@ msgid "" "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" +"Aquesta interfície ha d’estar connectada a una xarxa/màquina local. Si " +"connectes aquesta interfície a una xarxa pública, els serveis destinats a " +"estar disponibles només internament estaran disponibles externament. Això " +"constitueix un risc de seguretat." #: plinth/modules/networks/templates/connection_show.html:317 #: plinth/modules/networks/templates/connection_show.html:345 @@ -5838,12 +6024,15 @@ msgid "" "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" +"Aquesta interfície ha de rebre la teva connexió a Internet. Si la connectes " +"a una xarxa/màquina local, molts serveis destinats a estar disponibles només " +"internament no estaran disponibles." #: plinth/modules/networks/templates/connection_show.html:330 #: plinth/modules/networks/templates/connections_diagram.html:24 #: plinth/network.py:25 msgid "External" -msgstr "" +msgstr "Extern" #: plinth/modules/networks/templates/connection_show.html:341 #, python-format @@ -5851,120 +6040,128 @@ msgid "" "This interface is not maintained by %(box_name)s. For security, it is " "automatically assigned to the external zone." msgstr "" +"Aquesta interfície no és gestionada per %(box_name)s. Per seguretat, " +"s’assigna automàticament a la zona externa." #: plinth/modules/networks/templates/connections_create.html:18 msgid "Create Connection" -msgstr "" +msgstr "Crea Una Connexió" #: plinth/modules/networks/templates/connections_delete.html:11 #: plinth/modules/networks/views.py:545 msgid "Delete Connection" -msgstr "" +msgstr "Elimina la Connexió" #: plinth/modules/networks/templates/connections_delete.html:14 #, python-format msgid "Delete connection %(name)s permanently?" -msgstr "" +msgstr "Eliminar la connexió %(name)s de manera permanent?" #: plinth/modules/networks/templates/connections_diagram.html:16 #: plinth/modules/networks/templates/connections_diagram.html:48 msgid "Spacing" -msgstr "" +msgstr "Espaiat" #: plinth/modules/networks/templates/connections_diagram.html:29 #: plinth/modules/networks/templates/connections_diagram.html:59 #: plinth/modules/networks/views.py:101 plinth/network.py:28 +#, fuzzy msgid "Ethernet" -msgstr "" +msgstr "Ethernet" #: plinth/modules/networks/templates/connections_diagram.html:35 #: plinth/modules/networks/templates/connections_diagram.html:65 #: plinth/modules/networks/templates/connections_list.html:43 #, python-format msgid "Show connection %(name)s" -msgstr "" +msgstr "Mostra la connexió %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:53 #: plinth/network.py:25 msgid "Internal" -msgstr "" +msgstr "Intern" #: plinth/modules/networks/templates/connections_diagram.html:77 msgid "Computer" -msgstr "" +msgstr "Ordinador" #: plinth/modules/networks/templates/connections_edit.html:24 #: plinth/modules/networks/views.py:253 plinth/modules/networks/views.py:341 msgid "Edit Connection" -msgstr "" +msgstr "Edita la Connexió" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" -msgstr "" +msgstr "Error:" #: plinth/modules/networks/templates/connections_fields.html:20 #: plinth/modules/users/templates/users_update.html:51 #: plinth/templates/messages.html:30 msgid "Close" -msgstr "" +msgstr "Tanca" #: plinth/modules/networks/templates/connections_fields.html:32 msgid "General" -msgstr "" +msgstr "General" #: plinth/modules/networks/templates/connections_fields_pppoe.html:15 #: plinth/network.py:30 +#, fuzzy msgid "PPPoE" -msgstr "" +msgstr "PPPoE" #: plinth/modules/networks/templates/connections_list.html:8 msgid "Connections" -msgstr "" +msgstr "Connexions" #: plinth/modules/networks/templates/connections_list.html:12 #: plinth/modules/networks/templates/connections_list.html:14 #: plinth/modules/networks/views.py:395 msgid "Nearby Wi-Fi Networks" -msgstr "" +msgstr "Xarxes de Wi-Fi Properes" #: plinth/modules/networks/templates/connections_list.html:17 #: plinth/modules/networks/templates/connections_list.html:19 #: plinth/modules/networks/views.py:420 #: plinth/modules/wireguard/templates/wireguard_add_server.html:19 msgid "Add Connection" -msgstr "" +msgstr "Afegeix una Connexió" #: plinth/modules/networks/templates/connections_list.html:31 msgid "Active" -msgstr "" +msgstr "Actiu" #: plinth/modules/networks/templates/connections_list.html:35 msgid "Inactive" -msgstr "" +msgstr "Inactiu" #: plinth/modules/networks/templates/connections_list.html:77 #, python-format msgid "Delete connection %(name)s" -msgstr "" +msgstr "Elimina la connexió %(name)s" #: plinth/modules/networks/templates/connections_type_select.html:19 msgid "Create..." -msgstr "" +msgstr "Crea..." #: plinth/modules/networks/templates/internet_connectivity_content.html:10 msgid "What Type Of Internet Connection Do You Have?" -msgstr "" +msgstr "Quin Tipus de Connexió a Internet Tens?" #: plinth/modules/networks/templates/internet_connectivity_content.html:16 msgid "" "Select an option that best describes the type of Internet connection. This " "information is used only to guide you with further setup." msgstr "" +"Selecciona l’opció que descrigui millor el tipus de connexió a Internet. " +"Aquesta informació s’utilitza només per guiar-te en la configuració " +"posterior." #: plinth/modules/networks/templates/internet_connectivity_main.html:9 msgid "Your Internet Connection Type" -msgstr "" +msgstr "El Teu Tipus de Connexió a Internet" #: plinth/modules/networks/templates/internet_connectivity_main.html:14 msgid "" @@ -5972,27 +6169,32 @@ msgid "" "your ISP. This information is only used to suggest you necessary " "configuration actions." msgstr "" +"El següent descriu millor el tipus de connexió a Internet que proporciona el " +"teu ISP. Aquesta informació s’utilitza només per suggerir-te les accions de " +"configuració necessàries." #: plinth/modules/networks/templates/internet_connectivity_main.html:23 msgid "My ISP provides a public IP address that does not change over time." msgstr "" +"El meu ISP proporciona una adreça IP pública que no canvia amb el temps." #: plinth/modules/networks/templates/internet_connectivity_main.html:27 msgid "My ISP provides a public IP address that may change over time." msgstr "" +"El meu ISP proporciona una adreça IP pública que pot canviar amb el temps." #: plinth/modules/networks/templates/internet_connectivity_main.html:31 msgid "My ISP does not provide a public IP address." -msgstr "" +msgstr "El meu ISP no proporciona una adreça IP pública." #: plinth/modules/networks/templates/internet_connectivity_main.html:35 msgid "I do not know the type of connection my ISP provides." -msgstr "" +msgstr "No sé quin tipus de connexió em proporciona el meu ISP." #: plinth/modules/networks/templates/internet_connectivity_main.html:41 #: plinth/modules/networks/templates/network_topology_main.html:41 msgid "Update..." -msgstr "" +msgstr "Actualitza..." #: plinth/modules/networks/templates/internet_connectivity_type.html:18 #: plinth/modules/networks/templates/network_topology_update.html:18 @@ -6001,12 +6203,12 @@ msgstr "" #: plinth/modules/sharing/templates/sharing_add_edit.html:25 #: plinth/templates/form.html:22 msgid "Submit" -msgstr "" +msgstr "Enviar" #: plinth/modules/networks/templates/network_topology_content.html:10 #, python-format msgid "How is Your %(box_name)s Connected to the Internet?" -msgstr "" +msgstr "Com es Connecta la Teva %(box_name)s a Internet?" #: plinth/modules/networks/templates/network_topology_content.html:16 #, python-format @@ -6015,11 +6217,14 @@ msgid "" "your network. This information is used to guide you with further setup. It " "can be changed later." msgstr "" +"Selecciona l’opció que descrigui millor com està connectat el teu " +"%(box_name)s a la teva xarxa. Aquesta informació s’utilitza per guiar-te en " +"la configuració posterior. Es pot canviar més endavant." #: plinth/modules/networks/templates/network_topology_main.html:9 #, python-format msgid "%(box_name)s Internet Connectivity" -msgstr "" +msgstr "Connectivitat d'Internet de %(box_name)s" #: plinth/modules/networks/templates/network_topology_main.html:15 #, python-format @@ -6028,6 +6233,9 @@ msgid "" "network. This information is used only to suggest necessary configuration " "actions." msgstr "" +"El següent descriu millor com està connectat el teu %(box_name)s a la teva " +"xarxa. Aquesta informació s’utilitza només per suggerir les accions de " +"configuració necessàries." #: plinth/modules/networks/templates/network_topology_main.html:24 #, python-format @@ -6035,6 +6243,8 @@ msgid "" "Your %(box_name)s gets its Internet connection from your router via Wi-Fi or " "Ethernet cable. This is a typical home setup." msgstr "" +"El teu %(box_name)s obté la connexió a Internet del teu encaminador " +"mitjançant Wi-Fi o cable Ethernet. Aquesta és una configuració típica a casa." #: plinth/modules/networks/templates/network_topology_main.html:29 #, python-format @@ -6042,6 +6252,9 @@ msgid "" "Your %(box_name)s is directly connected to the Internet and all your devices " "connect to %(box_name)s for their Internet connectivity." msgstr "" +"El teu %(box_name)s està connectat directament a Internet i tots els teus " +"dispositius es connecten al %(box_name)s per obtenir la connectivitat a " +"Internet." #: plinth/modules/networks/templates/network_topology_main.html:34 #, python-format @@ -6049,17 +6262,22 @@ msgid "" "Your Internet connection is directly attached to your %(box_name)s and there " "are no other devices on the network." msgstr "" +"La teva connexió a Internet està connectada directament al teu %(box_name)s " +"i no hi ha altres dispositius a la xarxa." #: plinth/modules/networks/templates/networks_configuration.html:24 msgid "" "Advanced networking operations such as bonding, bridging and VLAN management " "are provided by the Cockpit app." msgstr "" +"Operacions de xarxa avançades com, com ara bonding, bridging i la gestió de " +"VLAN, són proporcionades per l’aplicació Cockpit." #: plinth/modules/networks/templates/router_configuration_content.html:10 #, python-format msgid "Setup %(box_name)s Behind a Router" -msgstr "" +msgstr "Configura %(box_name)s Darrere un Encaminador" #: plinth/modules/networks/templates/router_configuration_content.html:16 #, python-format @@ -6081,8 +6299,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6454,6 +6672,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Actions" +msgid "Application" +msgstr "Accions" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6742,8 +6991,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -7139,10 +7388,8 @@ msgid "Samba" msgstr "Samba" #: plinth/modules/samba/manifest.py:12 -#, fuzzy -#| msgid "Samba" msgid "SambaLite" -msgstr "Samba" +msgstr "SambaLite" #: plinth/modules/samba/manifest.py:26 msgid "Ghost Commander" @@ -7402,10 +7649,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7655,8 +7904,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7969,26 +8219,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8754,13 +8984,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8983,35 +9206,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9020,94 +9247,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -9119,6 +9346,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9132,7 +9363,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -9174,7 +9405,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -9183,6 +9414,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9219,30 +9454,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -9269,55 +9508,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9325,22 +9575,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9352,70 +9602,101 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "%(box_name)s is up to date." +msgid "%(box_name)s VPN IP for services" +msgstr "%(box_name)s està actualitzat." + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -9464,18 +9745,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9499,62 +9784,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9711,6 +10008,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9861,35 +10174,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9982,11 +10295,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -10087,10 +10404,8 @@ msgid "Toggle theme" msgstr "" #: plinth/templates/theme-menu.html:23 -#, fuzzy -#| msgid "Weight" msgid "Light" -msgstr "Pes" +msgstr "Light (lleuger)" #: plinth/templates/theme-menu.html:32 msgid "Dark" @@ -10103,10 +10418,8 @@ msgid "Auto" msgstr "Automàtic" #: plinth/templates/toolbar.html:39 plinth/templates/toolbar.html:40 -#, fuzzy -#| msgid "Logs" msgid "View Logs" -msgstr "Registres" +msgstr "Consulta els Registres" #: plinth/templates/toolbar.html:46 plinth/templates/toolbar.html:47 msgid "Backup" @@ -10140,15 +10453,22 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Contrasenya del servidor SSH.
L'autenticació mitjançant clau SSH " +#~ "encara no és possible." + #~ msgid "Minetest" #~ msgstr "Minetest" diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po index 35a68fe7d..2148046dd 100644 --- a/plinth/locale/cs/LC_MESSAGES/django.po +++ b/plinth/locale/cs/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2025-12-17 07:00+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-02-09 19:09+0000\n" "Last-Translator: Jiří Podhorecký \n" "Language-Team: Czech \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" -"X-Generator: Weblate 5.15.1-dev\n" +"X-Generator: Weblate 5.16-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -104,15 +104,15 @@ msgstr "Jazyk pro toto webové rozhraní" msgid "Use the language preference set in the browser" msgstr "Použít upřednostňovaný jazyk nastavený ve webovém prohlížeči" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Domů" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Aplikace" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "Systém" @@ -135,36 +135,40 @@ msgstr "Zabezpečení" msgid "Administration" msgstr "Správa" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "Systém je pravděpodobně velmi zatížený. Zkuste to prosím později." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "Strana nenalezena: {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "Chyba při provádění operace." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "Chyba při načítání stránky." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Apache HTTP Server" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Webový server" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "Webové rozhraní {box_name} (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -211,16 +215,16 @@ msgstr "Lokální" msgid "mDNS" msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "Zálohy umožňují vytváření a správu zálohových archivů." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Zálohy" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -228,19 +232,19 @@ msgstr "" "Povolit automatický plán zálohování pro bezpečnost dat. Upřednostněte " "šifrované vzdálené umístění zálohování nebo další připojený disk." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "Povolení plánu zálohování" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "Jít na {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -249,7 +253,7 @@ msgstr "" "Naplánované zálohování se nezdařilo. Minulé pokusy o zálohování s počtem " "chyb {error_count} nebyly úspěšné. Poslední chyba je: {error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Chyba při zálohování" @@ -402,7 +406,9 @@ msgid "Passphrase" msgstr "Heslová fráze" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Heslová fráze, potřebná pouze při použití šifrování." #: plinth/modules/backups/forms.py:190 @@ -442,27 +448,57 @@ msgstr "" "path/to/repo/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Režim ověřování" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Ověření vůči vzdálenému serveru se nezdařilo." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "potřebuje ověření" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Zakázat ověřování heslem" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Heslo SSH serveru" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "Heslo serveru SSH.
Ověřování pomocí klíčů SSH zatím není možné." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Zakázat ověřování heslem" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Zakázat ověřování heslem" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Repozitář se zálohou už na protějšku existuje." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Vyberte ověřený SSH veřejný klíč" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Obnovit" @@ -542,17 +578,17 @@ msgstr "Zálohovací systém je zaneprázdněn jinou operací." msgid "Not enough space left on the disk or remote location." msgstr "Na disku nebo ve vzdáleném umístění nezbývá dostatek místa." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Existující repozitář není šifrován." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Úložiště {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Vytvořit novou zálohu" @@ -588,7 +624,23 @@ msgstr "Přidat umístění pro zálohy na protějšku" msgid "Existing Backups" msgstr "Existující zálohy" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -613,7 +665,7 @@ msgstr "Existující zálohy" msgid "Caution:" msgstr "Upozornění:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -624,7 +676,7 @@ msgstr "" "Chcete-li obnovit zálohu na novém %(box_name)s, potřebujete pověření SSH a " "případně šifrovací frázi." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Vytvořit umístění" @@ -755,107 +807,109 @@ msgstr "" msgid "Verify Host" msgstr "Ověřit stroj" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Plán zálohování aktualizován." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Plánování záloh" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Archiv vytvořen." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Smazat archiv" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Archiv smazán." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Nahrát zálohu a obnovit z ní" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Nahrání bylo úspěšné." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "Nebyl nalezen žádný soubor se zálohou." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Obnovit z nahraného souboru" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "Soubory obnovené ze zálohy." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "Nejsou k dispozici žádná další úložiště pro přidání repozitáře." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Vytvořit repozitář pro zálohy" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "Přidáno nové úložiště." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Vytvořit repozitář pro zálohy na protějšku" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Přidán nový vzdálený SSH repozitář." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "Ověřit SSH klíč stroje" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "SSH stroj už je ověřen." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "SSH stroj ověřen." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "Veřejný klíč SSH stroje se nepodařilo ověřit." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "Ověření vůči vzdálenému serveru se nezdařilo." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Chyba při navazování spojení se serverem: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Plán zálohování aktualizován." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Plánování záloh" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Archiv vytvořen." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Smazat archiv" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Archiv smazán." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Nahrát zálohu a obnovit z ní" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Nahrání bylo úspěšné." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "Nebyl nalezen žádný soubor se zálohou." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Obnovit z nahraného souboru" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "Soubory obnovené ze zálohy." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "Nejsou k dispozici žádná další úložiště pro přidání repozitáře." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Vytvořit repozitář pro zálohy" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Přidáno nové úložiště." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Vytvořit repozitář pro zálohy na protějšku" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Přidán nový vzdálený SSH repozitář." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "Ověřit SSH klíč stroje" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "SSH stroj už je ověřen." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "SSH stroj ověřen." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Repozitář odstraněn." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Odebrat repozitář" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Repozitář odebrán. Zálohy jako takové smazány nebyly." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Odpojení se nezdařilo!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Připojení (mount) se nezdařilo" @@ -935,7 +989,7 @@ msgstr "Oprávnění pro anonymní uživatele, kteří nezadali heslo." #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Oprávnění" @@ -1021,8 +1075,8 @@ msgstr "Výpis" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Smazat" @@ -1098,6 +1152,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Server" @@ -1399,13 +1454,20 @@ msgid "Webserver Home Page" msgstr "Domovská stránka domovského serveru" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Zvolte výchozí stránku která je třeba, aby byla poskytována když někdo " "navštíví web vašeho {box_name}. Typickým případem použití je nastavení svého " @@ -2009,7 +2071,7 @@ msgid "Invalid domain name" msgstr "Neplatný doménový název" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Uživatelské jméno" @@ -2299,8 +2361,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Stav" @@ -2364,9 +2426,13 @@ msgstr "" "automaticky a ukazují na prvního uživatele-administrátora." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Aplikace Roundcube poskytuje " "uživatelům webové rozhraní pro přístup k e-mailu." @@ -3281,8 +3347,8 @@ msgstr "Odeslat zpětnou vazbu" msgid "Contribute" msgstr "Zapojit se" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "O projektu" @@ -3930,7 +3996,7 @@ msgstr "Webové konference" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Licenční informace o JavaScriptu" @@ -5136,9 +5202,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Upravit" @@ -5703,6 +5769,7 @@ msgstr "Smazat připojení" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Připojení" @@ -5914,6 +5981,7 @@ msgid "Edit Connection" msgstr "Upravit připojení" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Chyba:" @@ -6123,11 +6191,17 @@ msgstr "" "přijme, a aby %(box_name)s poskytoval služby." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Pokud nemáte kontrolu nad svým routerem, zvolte jej nekonfigurovat. Chcete-" "li zobrazit možnosti, jak toto omezení překonat, vyberte možnost „Nemám " @@ -6532,6 +6606,40 @@ msgstr "Groupware" msgid "Password update failed. Please choose a stronger password." msgstr "Aktualizace hesla se nezdařila. Zvolte prosím silnější heslo." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application enabled" +msgid "Application" +msgstr "Aplikace zapnuta" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Pověřené SSH klíče" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Pověřené SSH klíče" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6862,8 +6970,8 @@ msgstr "Restart" msgid "Shutdown" msgstr "Vypnout" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Restartovat" @@ -7659,10 +7767,12 @@ msgid "N/A" msgstr "N/A" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "ano" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "ne" @@ -7945,10 +8055,17 @@ msgstr "" "automaticky mazány podle níže uvedených nastavení." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Zachycené stavy v tuto chvíli fungují pouze na souborovém systému btrfs a " "kořenovém oddílu. Zachycené stavy nejsou náhradou %(username)s
" @@ -9651,7 +9749,7 @@ msgstr "Uložit heslo" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Vytvořit uživatele" @@ -9701,7 +9799,7 @@ msgid "Skip this step" msgstr "Tento krok přeskočte" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Uživatelé" @@ -9710,6 +9808,10 @@ msgstr "Uživatelé" msgid "Edit user %(username)s" msgstr "Upravit uživatele %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Přihlášení" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9751,30 +9853,34 @@ msgstr "Odstranit uživatele a soubory" msgid "Cancel" msgstr "Storno" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Odhlášení proběhlo úspěšně." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Uživatel %(username)s vytvořen." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Uživatel %(username)s aktualizován." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Upravit uživatele" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "Uživatel %(username)s smazán." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Změnit heslo" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Heslo úspěšně změněno." @@ -9806,14 +9912,25 @@ msgstr "" msgid "Invalid key." msgstr "Neplatný klíč." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Zadejte platné uživatelské jméno." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Veřejný klíč" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9821,22 +9938,22 @@ msgstr "" "Veřejný klíč partnera. Příklad: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Koncový bod serveru" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" "Název domény a port ve tvaru \"ip:port\". Příklad: demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Veřejný klíč serveru" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9844,25 +9961,32 @@ msgstr "" "Poskytuje provozovatel serveru, dlouhý řetězec znaků. Příklad: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "IP adresa klienta poskytnutá serverem" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "IP adresa přiřazená tomuto počítači v síti VPN po připojení ke koncovému " "bodu. Tuto hodnotu obvykle poskytuje provozovatel serveru. Příklad: " "192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Soukromý klíč tohoto stroje" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9874,11 +9998,11 @@ msgstr "" "způsob. Někteří provozovatelé serverů však na jeho poskytnutí trvají. " "Příklad: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Předem sdílený klíč" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -9888,11 +10012,11 @@ msgstr "" "vrstvu zabezpečení. Vyplňte pouze v případě, že byl poskytnut. Příklad: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Toto připojení slouží k odesílání veškerého odchozího provozu" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Obvykle se kontroluje u služby VPN, přes kterou se odesílá veškerý provoz." @@ -9905,70 +10029,106 @@ msgstr "VPN klient" msgid "As a Server" msgstr "Jako server" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Endpoints for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Endpointy pro tento %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Koncový bod" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Na %(box_name)s Porty" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Peery s povolením připojit se k tomuto serveru:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "Povolené IP adresy" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Čas posledního připojení" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "K tomuto %(box_name)s zatím není nakonfigurován žádný partner." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Veřejný klíč pro tento %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Zatím není nakonfigurováno." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Přidání nového peeru" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Přidat povoleného klienta" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "WireGuard server started successfully." +msgid "WireGuard server not started yet." +msgstr "Server WireGuard se úspěšně spustil." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "Spustit WireGuard Server" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Jako klient" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Servery, ke kterým se %(box_name)s připojí:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Koncový bod" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Zatím nejsou nakonfigurována žádná připojení ke vzdáleným serverům." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Přidat nový server" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Přidat připojení k serveru" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "IP adresa, která bude přiřazena k tomuto klientovi" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Přidat klienta" @@ -10019,18 +10179,22 @@ msgstr "Koncové body serveru:" msgid "Server public key:" msgstr "Veřejný klíč serveru:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Přenášená data:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Přijatá data:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Poslední handshake:" @@ -10057,62 +10221,74 @@ msgstr "Veřejný klíč tohoto stroje:" msgid "IP address of this machine:" msgstr "IP adresa tohoto počítače:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Přidán nový klient." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Klient s veřejným klíčem již existuje" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Povolený klient" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Aktualizovaný klient." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Upravit klienta" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Odstranit povoleného klienta" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Klient smazán." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Klient nenalezen" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Přidán nový server." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Připojení k serveru" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Aktualizovaný server." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Změnit připojení k serveru" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Odstranit připojení k serveru" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Server smazán." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "Server WireGuard se úspěšně spustil." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "Spuštění serveru WireGuard selhalo: {}" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10304,6 +10480,24 @@ msgstr "soubor s nastaveními: {file}" msgid "Timeout waiting for package manager" msgstr "Časový limit čekání na správce balíčků" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "vyžadující adresu" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Instalace aplikací" @@ -10470,35 +10664,35 @@ msgstr "" "Jedná se o bezplatný software, který umožňuje snadnou instalaci a správu " "serverových aplikací." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Domů" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplikace" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Systém" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Změnit heslo" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Vypnout" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Odhlásit" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Vyberte jazyk" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Přihlásit" @@ -10597,11 +10791,15 @@ msgstr "" "Jako vnitřní jsou v tuto chvíli nastavená následující síťová rozhraní: " "%(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Odmítnout" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Oznámení" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "před %(time_since)s" @@ -10764,15 +10962,30 @@ msgstr "Zde" msgid "Setting unchanged" msgstr "Nastavení se nezměnila" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "před odinstalací {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "gudžarátština" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "Heslo serveru SSH.
Ověřování pomocí klíčů SSH zatím není možné." + +#~ msgid "Single Sign On" +#~ msgstr "Sdružené přihlášení (SSO)" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Veřejný klíč pro tento %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Zatím není nakonfigurováno." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12170,9 +12383,6 @@ msgstr "gudžarátština" #~ msgid "Settings unchanged" #~ msgstr "Nastavení nezměněna" -#~ msgid "Application enabled" -#~ msgstr "Aplikace zapnuta" - #~ msgid "Application disabled" #~ msgstr "Aplikace vypnuta" diff --git a/plinth/locale/da/LC_MESSAGES/django.po b/plinth/locale/da/LC_MESSAGES/django.po index 8c6cb5066..9765b7cd0 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Danish " #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Autentificeringstilstand" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Godkendelse til serveren mislykkedes." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Key-based Authentication" +msgstr "Brug basal (\"basic\") HTTP-autentifikation" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Password-based Authentication" +msgstr "Brug basal (\"basic\") HTTP-autentifikation" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH-serverens adgangskode" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"SSH-serverens adgangskode.
Nøglebaseret SSH-autentifikation er endnu " -"ikke muligt." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Required for password-based authentication." +msgstr "Brug basal (\"basic\") HTTP-autentifikation" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Brug basal (\"basic\") HTTP-autentifikation" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Fjernlager for sikkerhedskopier eksisterer i forvejen." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Vælg en verificeret offentlig SSH-nøgle" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Genopret" @@ -555,17 +589,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Eksisterende lager er ikke krypteret." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Lagring af {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Opret en ny sikkerhedskopi" @@ -601,7 +635,23 @@ msgstr "Tilføj fjernlager for sikkerhedskopier" msgid "Existing Backups" msgstr "Eksisterende sikkerhedskopier" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -626,7 +676,7 @@ msgstr "Eksisterende sikkerhedskopier" msgid "Caution:" msgstr "Advarsel:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, fuzzy, python-format #| msgid "" #| "The credentials for this repository are stored on your %(box_name)s.
Roundcube app
provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3466,8 +3526,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Om" @@ -4069,7 +4129,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -5300,9 +5360,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Rediger" @@ -5827,6 +5887,7 @@ msgstr "Slet forbindelse" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Forbindelse" @@ -6039,6 +6100,7 @@ msgid "Edit Connection" msgstr "Rediger Forbindelse" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 #, fuzzy #| msgid "error" @@ -6231,8 +6293,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6674,6 +6736,37 @@ msgstr "Tilføj Service" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Applikationer" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -7050,8 +7143,8 @@ msgstr "" msgid "Shutdown" msgstr "Sluk Nu" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 #, fuzzy #| msgid "Restart Now" msgid "Restart" @@ -7847,12 +7940,14 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 #, fuzzy #| msgid "yes" msgid "Yes" msgstr "ja" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -8144,8 +8239,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -8506,28 +8602,6 @@ msgstr "" msgid "Fingerprint" msgstr "SSH-fingeraftryk" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Log ind" - -#: plinth/modules/sso/views.py:86 -#, fuzzy -#| msgid "Password changed successfully." -msgid "Logged out successfully." -msgstr "Kodeord blev ændret." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9393,13 +9467,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Automatisk opdatering aktiveret" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9658,35 +9725,39 @@ msgstr "" msgid "Users and Groups" msgstr "Brugere og Grupper" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Kontrol af LDAP-konfiguration \"{search_item}\"" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 #, fuzzy #| msgid "" #| "Select which services should be available to the new user. The user will " @@ -9708,52 +9779,52 @@ msgstr "" "tjenester. De kan også logge ind på systemet gennem SSH og har " "administratorprivilegier (sudo)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 #, fuzzy #| msgid "Invalid server name" msgid "Enter a valid username." msgstr "Ugyldigt servernavn" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 #, fuzzy #| msgid "Administrator Account" msgid "Authorization Password" msgstr "Administratorkonto" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 #, fuzzy #| msgid "Show password" msgid "Invalid password." msgstr "Vis kodeord" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, fuzzy, python-brace-format #| msgid "Creating LDAP user failed." msgid "Creating LDAP user failed: {error}" msgstr "Kunne ikke oprette LDAP-bruger." -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, fuzzy, python-brace-format #| msgid "Failed to add new user to {group} group." msgid "Failed to add new user to {group} group: {error}" msgstr "Kunne ikke tilføje ny bruger til gruppen {group}." -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9763,57 +9834,57 @@ msgstr "" "sikkert ind på systemet uden et kodeord. Der kan defineres flere nøgler, en " "på hver linje. Tomme linjer og linjer som starter med # bliver ignoreret." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete User" msgid "Delete user" msgstr "Slet Bruger" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 #, fuzzy #| msgid "Failed to add user to group." msgid "Failed to delete user." msgstr "Kunne ikke tilføje bruger til gruppe." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "Kunne ikke omdøbe LDAP-bruger." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Kunne ikke fjerne bruger fra gruppe." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Kunne ikke tilføje bruger til gruppe." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 #, fuzzy #| msgid "Failed to add user to group." msgid "Failed to change user status." msgstr "Kunne ikke tilføje bruger til gruppe." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "Kunne ikke ændre LDAP-kodeord." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, fuzzy, python-brace-format #| msgid "Failed to add new user to admin group." msgid "Failed to add new user to admin group: {error}" msgstr "Kunne ikke tilføje ny bruger til admin-gruppen." -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Brugerkonto oprettet, du er nu logget ind" @@ -9829,6 +9900,10 @@ msgstr "Opret Bruger" msgid "App permissions" msgstr "Rettigheder" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9842,7 +9917,7 @@ msgstr "Gem Kodeord" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Opret Bruger" @@ -9891,7 +9966,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Brugere" @@ -9900,6 +9975,10 @@ msgstr "Brugere" msgid "Edit user %(username)s" msgstr "Rediger Bruger %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Log ind" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9941,31 +10020,37 @@ msgstr "Slet filer" msgid "Cancel" msgstr "Annuller" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +#, fuzzy +#| msgid "Password changed successfully." +msgid "Logged out successfully." +msgstr "Kodeord blev ændret." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Bruger %(username)s oprettet." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Bruger %(username)s opdateret." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Rediger Bruger" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "User %(username)s created." msgid "User %(username)s deleted." msgstr "Bruger %(username)s oprettet." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Ændr kodeord" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Kodeord blev ændret." @@ -9994,59 +10079,72 @@ msgstr "" msgid "Invalid key." msgstr "Ugyldigt kite-name" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Invalid server name" +msgid "Enter a valid IPv4 address." +msgstr "Ugyldigt servernavn" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 #, fuzzy #| msgid "Publish Key" msgid "Public Key" msgstr "Distribuer Nøgle" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 #, fuzzy #| msgid "Published key to keyserver." msgid "Public key of the server" msgstr "Nøgle distribueret til nøgleserver." -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10054,22 +10152,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -10085,76 +10183,113 @@ msgstr "Quassel IRC-klient" msgid "As a Server" msgstr "Webserver" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Mount Point" +msgid "Endpoint(s)" +msgstr "Monteringspunkt" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "%(box_name)s Setup" +msgid "%(box_name)s VPN IP for services" +msgstr "%(box_name)s Konfiguration" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 #, fuzzy #| msgid "Create Connection" msgid "Last Connected Time" msgstr "Opret Forbindelse" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Kodeord blev ændret." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +#, fuzzy +#| msgid "Standard Services" +msgid "Start WireGuard Server" +msgstr "Standardtjenester" + +#: plinth/modules/wireguard/templates/wireguard.html:108 #, fuzzy #| msgid "IRC Client (Quassel)" msgid "As a Client" msgstr "IRC-klient (Quassel)" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" msgid "Add Connection to Server" msgstr "Tilføj forbindelse" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 #, fuzzy #| msgid "Quassel IRC Client" msgid "Add Client" @@ -10213,18 +10348,22 @@ msgstr "Serverdomæne" msgid "Server public key:" msgstr "Serverport" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -10250,88 +10389,102 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 #, fuzzy #| msgid "This service already exists" msgid "Client with public key already exists" msgstr "Denne tjeneste eksisterer allerede" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 #, fuzzy #| msgid "Email Client (Roundcube)" msgid "Allowed Client" msgstr "Emailklient (Roundcube)" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 #, fuzzy #| msgid "Update setup" msgid "Updated client." msgstr "Opdater indstillinger" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 #, fuzzy #| msgid "Email Client (Roundcube)" msgid "Modify Client" msgstr "Emailklient (Roundcube)" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 #, fuzzy #| msgid "Delete" msgid "Delete Allowed Client" msgstr "Slet" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 #, fuzzy #| msgid "{name} deleted." msgid "Client deleted." msgstr "{name} slettet." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 #, fuzzy #| msgid "packages not found" msgid "Client not found" msgstr "pakker ikke fundet" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 #, fuzzy #| msgid "Added custom service" msgid "Added new server." msgstr "Tilføjet brugerdefineret tjeneste" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 #, fuzzy #| msgid "Connection Type" msgid "Connection to Server" msgstr "Forbindelsestype" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 #, fuzzy #| msgid "Update setup" msgid "Updated server." msgstr "Opdater indstillinger" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 #, fuzzy #| msgid "Edit Connection" msgid "Modify Connection to Server" msgstr "Rediger Forbindelse" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "Slet Forbindelse" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "{name} deleted." msgid "Server deleted." msgstr "{name} slettet." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Kodeord blev ændret." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10496,6 +10649,22 @@ msgstr "konfigurationsfil: {file}" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 #, fuzzy #| msgid "Install Apps" @@ -10692,39 +10861,39 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Apps" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " System" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Ændr kodeord" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 #, fuzzy #| msgid "Shut Down Now" msgid "Shut down" msgstr "Sluk Nu" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Log ud" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "Sprog" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Log ind" @@ -10826,13 +10995,17 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 #, fuzzy #| msgid "No certficate" msgid "Notifications" msgstr "Intet certifikat" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -10998,15 +11171,22 @@ msgstr "" msgid "Setting unchanged" msgstr "Indstilling uændret" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "SSH-serverens adgangskode.
Nøglebaseret SSH-autentifikation er endnu " +#~ "ikke muligt." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12289,9 +12469,6 @@ msgstr "" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "Du har ikke nogen aktive brugerdefinerede tjenester" -#~ msgid "Standard Services" -#~ msgstr "Standardtjenester" - #~ msgid "Tor is running" #~ msgstr "Tor er aktiv" @@ -12638,9 +12815,6 @@ msgstr "" #~ " (Transmission)" #~ msgstr "BitTorrent (Transmission)" -#~ msgid "Applications" -#~ msgstr "Applikationer" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index f063c77fb..e090b17f0 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2025-12-21 10:00+0000\n" -"Last-Translator: Ettore Atalan \n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-02-05 11:01+0000\n" +"Last-Translator: Dietmar \n" "Language-Team: German \n" "Language: de\n" @@ -19,7 +19,7 @@ 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 5.15.1\n" +"X-Generator: Weblate 5.16-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -107,15 +107,15 @@ msgstr "Sprache für die Darstellung dieser Weboberfläche" msgid "Use the language preference set in the browser" msgstr "Die im Browser festgelegte Sprache verwenden" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Startseite" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Apps" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "System" @@ -138,38 +138,42 @@ msgstr "Sicherheit" msgid "Administration" msgstr "Verwaltung" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "" "Das System ist möglicherweise stark belastet. Bitte versuchen Sie es später " "erneut." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "Seite nicht gefunden: {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "Fehler bei der Ausführung des Vorgangs." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "Fehler beim Laden der Seite." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Apache HTTP Server" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Webserver" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Weboberfläche (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -207,7 +211,7 @@ msgstr "Lokale Netzwerkdomäne" #: plinth/modules/avahi/manifest.py:14 msgid "Auto-discovery" -msgstr "" +msgstr "Automatische Erkennung" #: plinth/modules/avahi/manifest.py:14 plinth/modules/backups/manifest.py:17 msgid "Local" @@ -217,16 +221,16 @@ msgstr "Lokal" msgid "mDNS" msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "Erstellen und Verwalten von Sicherungs-Archiven." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Sicherungen" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -235,19 +239,19 @@ msgstr "" "Bevorzugen Sie einen verschlüsselten Remote-Backup-Speicherort oder einen " "zusätzlich angeschlossenen Datenträger." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "Aktivieren eines Sicherungszeitplans" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "Gehe zu {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -257,7 +261,7 @@ msgstr "" "Versuche zur Sicherung waren nicht erfolgreich. Der letzte Fehler ist: " "{error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Fehler beim Sichern" @@ -411,7 +415,9 @@ msgid "Passphrase" msgstr "Passwort" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Passphrase; Nur notwendig, wenn Verschlüsselung genutzt wird." #: plinth/modules/backups/forms.py:190 @@ -451,29 +457,57 @@ msgstr "" "benutzer@hostrechner:~/pfad/zum/archiv/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Authentifizierungsmodus" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Authentifizierung am Server fehlgeschlagen." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "benötigt Authentifizierung" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Passwortauthentifizierung deaktivieren" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH-Server-Passwort" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Passwort des SSH-Hostrechners.
SSH-Schlüssel-basierte Authentifizierung " -"ist noch nicht möglich." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Passwortauthentifizierung deaktivieren" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Passwortauthentifizierung deaktivieren" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Remote-Sicherungs-Archiv existiert bereits." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Wähle verifizierten öffentlichen SSH-Schlüssel" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Wiederherstellen" @@ -556,17 +590,17 @@ msgstr "" "Nicht genügend Speicherplatz auf dem Datenträger oder an einem entfernten " "Ort." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Vorhandenes Repository ist nicht verschlüsselt." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name}-Speichermedien" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Neue Sicherung erstellen" @@ -602,7 +636,23 @@ msgstr "Hinzufügen eines entfernten Sicherungs-Standorts" msgid "Existing Backups" msgstr "Vorhandene Sicherungen" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -627,7 +677,7 @@ msgstr "Vorhandene Sicherungen" msgid "Caution:" msgstr "Achtung:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -639,7 +689,7 @@ msgstr "" "wiederherzustellen, benötigen Sie die SSH-Anmeldeinformationen und, sofern " "ausgewählt, die Verschlüsselungs-Passphrase." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Standort anlegen" @@ -774,110 +824,112 @@ msgstr "" msgid "Verify Host" msgstr "Host verifizieren" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "" +"Der öffentliche SSH-Schlüssel des Hosts konnte nicht verifiziert werden." + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "Authentifizierung am Server fehlgeschlagen." + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "Fehler beim Verbinden mit Server: {}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "Sicherungsplan aktualisiert." -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 msgid "Schedule Backups" msgstr "Zeitplan für Sicherungen" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "Archiv angelegt." -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "Archiv löschen" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "Archiv gelöscht." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "Hochladen und Wiederherstellen einer Sicherung" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 msgid "Upload successful." msgstr "Hochladen erfolgreich." -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "Keine Sicherungsdatei gefunden." -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "Wiederherstellen aus hochgeladener Datei" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "Dateien aus Sicherung wiederhergestellt." -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "" "Es sind keine zusätzlichen Festplatten verfügbar, um ein Repository " "hinzuzufügen." -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "Sicherungs-Repository erstellen" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 msgid "Added new repository." msgstr "Neues Repository hinzugefügt." -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "Remote-Sicherungs-Archiv anlegen" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "Neue Remote-SSH-Archiv hinzugefügt." -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "Verifiziere SSH-Schlüssel des Hosts" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "SSH-Host bereits verifiziert." -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "SSH-Host verifiziert." -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "" -"Der öffentliche SSH-Schlüssel des Hosts konnte nicht verifiziert werden." - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "Authentifizierung am Server fehlgeschlagen." - -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" -msgstr "Fehler beim Verbinden mit Server: {}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Archiv gelöscht." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Archiv entfernen" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Repository entfernt. Sicherungen wurden nicht gelöscht." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Aushängen fehlgeschlagen!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Einhängen fehlgeschlagen" @@ -962,7 +1014,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Berechtigungen" @@ -1051,8 +1103,8 @@ msgstr "Auflisten" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Löschen" @@ -1130,6 +1182,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Server" @@ -1434,13 +1487,20 @@ msgid "Webserver Home Page" msgstr "Webserver-Startseite" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Wählen Sie die Standard-Web-Anwendung die angezeigt wird wenn jemand ihre " "{box_name} im Web aufruft. Ein typischer Anwendungsfall ist ihren Blog oder " @@ -1813,9 +1873,8 @@ msgstr "App: %(app_name)s" #: plinth/modules/diagnostics/templates/diagnostics_app.html:21 #: plinth/modules/diagnostics/templates/diagnostics_full.html:85 -#, fuzzy msgid "Try to repair" -msgstr "Versuche, zu reparieren" +msgstr "Reparatur versuchen" #: plinth/modules/diagnostics/templates/diagnostics_app.html:29 msgid "This app does not support diagnostics" @@ -2055,7 +2114,7 @@ msgid "Invalid domain name" msgstr "Ungültiger Domain-Name" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Benutzername" @@ -2349,8 +2408,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Status" @@ -2414,9 +2473,13 @@ msgstr "" "werden automatisch erstellt und verweisen auf den ersten Admin-Benutzer." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube App bietet eine " "Weboberfläche für den Zugriff auf E-Mails." @@ -2580,7 +2643,7 @@ msgid "" "you have multiple public IP addresses." msgstr "" "Wenn Ihr %(box_name)s auf einer Cloud-Service-Infrastruktur läuft, sollten " -"Sie Reverse DNS " +"Sie Reverse DNS " "konfigurieren. Dies ist nicht zwingend erforderlich, verbessert aber die " "Zustellbarkeit von E-Mails erheblich. Reverse DNS ist nicht dort " "konfiguriert, wo Ihr regulärer DNS ist. Sie sollten es in den Einstellungen " @@ -2660,10 +2723,9 @@ msgid "" "supported." msgstr "" "Wikis sind standardmäßig nicht öffentlich, aber sie können zum Teilen oder " -"Veröffentlichen heruntergeladen werden. Sie können von jedem Benutzer auf {box_name}, der zur Wiki-" -"Gruppe gehört, bearbeitet werden. Gleichzeitige Bearbeitung wird nicht " -"unterstützt." +"Veröffentlichen heruntergeladen werden. Sie können von jedem Benutzer auf {box_name}, der zur Wiki-Gruppe gehört, bearbeitet " +"werden. Gleichzeitige Bearbeitung wird nicht unterstützt." #: plinth/modules/featherwiki/__init__.py:56 #: plinth/modules/ikiwiki/__init__.py:79 @@ -3020,8 +3082,8 @@ msgid "" "Automatic software update " "runs daily by default. For the first time, manually run it now." msgstr "" -"Die automatische Softwareaktualisierung läuft standardmäßig täglich. " +"Die automatische Softwareaktualisierung läuft standardmäßig täglich. " "Führen Sie es jetzt zum ersten Mal manuell aus." #: plinth/modules/first_boot/templates/firstboot_complete.html:30 @@ -3034,8 +3096,8 @@ msgstr "Jetzt aktualisieren" msgid "" "Review privacy options." msgstr "" -"Überprüfen Sie die Datenschutzoptionen." +"Überprüfen Sie die Datenschutzoptionen." #: plinth/modules/first_boot/templates/firstboot_complete.html:49 #, python-format @@ -3043,8 +3105,8 @@ msgid "" "Review and setup network " "connections. Change the default Wi-Fi password, if applicable." msgstr "" -"Überprüfen und richten Sie Netzwerkverbindungen ein. Ändern Sie das Standard-Wi-" +"Überprüfen und richten Sie Netzwerkverbindungen ein. Ändern Sie das Standard-Wi-" "Fi-Passwort, falls erforderlich." #: plinth/modules/first_boot/templates/firstboot_complete.html:60 @@ -3052,8 +3114,8 @@ msgstr "" msgid "" "Configure a domain name." msgstr "" -"Konfigurieren Sie einen Domainnamen." +"Konfigurieren Sie einen Domainnamen." #: plinth/modules/first_boot/templates/firstboot_complete.html:70 #, python-format @@ -3061,8 +3123,8 @@ msgid "" "Configure and schedule remote backups." msgstr "" -"Konfigurieren und planen Sie Remote Backups." +"Konfigurieren und planen Sie Remote Backups." #: plinth/modules/first_boot/templates/firstboot_complete.html:81 #, python-format @@ -3278,8 +3340,8 @@ msgid "" "effect." msgstr "" "Nach der Installation, Aktivierung, Deaktivierung oder Deinstallation der " -"Anwendung müssen Sie den Neustart des " -"Computers durchführen, damit die Änderungen wirksam werden." +"Anwendung müssen Sie den Neustart des Computers " +"durchführen, damit die Änderungen wirksam werden." #: plinth/modules/gnome/__init__.py:48 msgid "GNOME" @@ -3344,8 +3406,8 @@ msgstr "Feedback geben" msgid "Contribute" msgstr "Mitwirken" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Info" @@ -3754,7 +3816,7 @@ msgstr "Diese App ist experimentell." #: plinth/modules/homeassistant/manifest.py:12 #: plinth/modules/homeassistant/manifest.py:20 msgid "Home Assistant" -msgstr "" +msgstr "Heimassistent" #: plinth/modules/homeassistant/manifest.py:62 msgid "Home Automation" @@ -3779,7 +3841,7 @@ msgstr "ZigBee" #: plinth/modules/homeassistant/manifest.py:66 msgid "Z-Wave" -msgstr "" +msgstr "Z-Wave" #: plinth/modules/homeassistant/manifest.py:67 msgid "Thread" @@ -4013,7 +4075,7 @@ msgstr "Web-Konferenz" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "JavaScript-Lizenzinformation" @@ -5245,9 +5307,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Bearbeiten" @@ -5824,6 +5886,7 @@ msgstr "Verbindung löschen" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Verbindung" @@ -6036,6 +6099,7 @@ msgid "Edit Connection" msgstr "Verbindung bearbeiten" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Fehler:" @@ -6246,11 +6310,17 @@ msgstr "" "weiterleitet, damit %(box_name)s die Dienste bereitstellt." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Wenn Sie keine Kontrolle über Ihren Router haben, können Sie ihn nicht " "konfigurieren. Um Optionen zur Überwindung dieser Einschränkung zu sehen, " @@ -6664,6 +6734,40 @@ msgstr "" "Passwortaktualisierung fehlgeschlagen. Bitte wählen Sie ein stärkeres " "Passwort aus." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Anwendungen" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Autorisierte SSH-Schlüssel" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Autorisierte SSH-Schlüssel" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6999,8 +7103,8 @@ msgstr "Neustart" msgid "Shutdown" msgstr "Herunterfahren" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Neu starten" @@ -7809,10 +7913,12 @@ msgid "N/A" msgstr "N/A" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Ja" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Nein" @@ -8103,10 +8209,17 @@ msgstr "" "automatisch bereinigt." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Schnappschüsse funktionieren derzeit ausschließlich auf Btrfs-Dateisystemen " "und nur auf der Root-Partition. Schnappschüsse sind kein Ersatz für Postfix/Dovecot email " "server app to retrieve, manage, and send email." msgstr "" -"Webmail arbeitet mit der Postfix/Dovecot E-" -"Mail-Server-Anwendung, um E-Mails abzurufen, zu verwalten und zu versenden." +"Webmail arbeitet mit der Postfix/Dovecot E-Mail-" +"Server-Anwendung, um E-Mails abzurufen, zu verwalten und zu versenden." #: plinth/modules/sogo/__init__.py:30 #, python-brace-format @@ -8464,27 +8577,6 @@ msgstr "Algorithmus" msgid "Fingerprint" msgstr "Fingerabdruck" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Einmal-Anmeldung" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" -"Geben Sie die Buchstaben aus dem Bild ein, um zur Anmeldeseite zu gelangen" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "Weiter zum Login" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Anmelden" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "Erfolgreich abgemeldet." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9408,13 +9500,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Zur Distributionsaktualisierung gehen" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "Verwerfen" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9693,37 +9778,42 @@ msgstr "" msgid "Users and Groups" msgstr "Benutzer und Gruppen" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Zugriff auf alle Anwendungen und Systemeinstellungen" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP-Eintrag „{search_item}“ prüfen" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Prüfen Sie die nslcd-Konfiguration \"{key} {value}\"" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Prüfen Sie die nsswitch-Konfiguration \"{database}\"" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" +"Geben Sie die Buchstaben aus dem Bild ein, um zur Anmeldeseite zu gelangen" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "Benutzername wird bereits verwendet oder ist reserviert." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" "Optional. Gebraucht zum Senden von E-Mails für Passwortrücksetzung und für " "wichtige Benachrichtigungen." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9738,22 +9828,22 @@ msgstr "" "allen Diensten anmelden und sie können sich auch über SSH im System anmelden " "und besitzen Administratorrechte (sudo)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "Einen gültigen Benutzernamen eingeben." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "Erforderlich. Bis zu 150 Zeichen. Nur englische Buchstaben, Ziffern und " "@/./-/_." -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "Autorisierungs-Passwort" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." @@ -9761,26 +9851,26 @@ msgstr "" "Geben Sie das Passwort für den Benutzer „{user}“ ein, um Kontoänderungen zu " "autorisieren." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "Ungültiges Passwort." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "Erstellen des LDAP-Benutzers ist fehlgeschlagen:{error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" "Fehler beim Hinzufügen eines neuen Benutzers zur {group}-Gruppe: {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "Autorisierte SSH-Schlüssel" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9791,11 +9881,11 @@ msgstr "" "eingeben, einen pro Zeile. Leerzeilen und Zeilen, die mit # beginnen, werden " "ignoriert." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "Benutzer löschen" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -9804,41 +9894,41 @@ msgstr "" "verbundenen Dateien gelöscht. Das Löschen von Dateien kann vermieden werden, " "indem das Benutzerkonto als inaktiv eingestuft wird." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "Benutzer konnte nicht gelöscht werden." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "Umbenennen des LDAP-Benutzers fehlgeschlagen." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Entfernen des Benutzers von der Gruppe fehlgeschlagen." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Hinzufügen eines Benutzers zur Gruppe ist fehlgeschlagen." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "SSH-Schlüssel kann nicht gesetzt werden." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "Fehler beim Ändern des Benutzerstatus." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "Ändern des LDAP-Benutzerpassworts ist fehlgeschlagen." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" "Fehler beim Hinzufügen eines neuen Benutzers zur Administratorgruppe: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Benutzerkonto wurde erstellt, Sie sind jetzt angemeldet" @@ -9850,6 +9940,10 @@ msgstr "Konten verwalten" msgid "App permissions" msgstr "App-Berechtigungen" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "Weiter zum Login" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9863,7 +9957,7 @@ msgstr "Passwort speichern" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Benutzer anlegen" @@ -9914,7 +10008,7 @@ msgid "Skip this step" msgstr "Überspringen Sie diesen Schritt" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Benutzer" @@ -9923,6 +10017,10 @@ msgstr "Benutzer" msgid "Edit user %(username)s" msgstr "Benutzer %(username)s bearbeiten" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Anmelden" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9965,30 +10063,34 @@ msgstr "Benutzer und Dateien löschen" msgid "Cancel" msgstr "Abbrechen" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Erfolgreich abgemeldet." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Benutzer %(username)s angelegt." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Benutzer %(username)s geändert." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Benutzer bearbeiten" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "Benutzer %(username)s gelöscht." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Passwort ändern" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Passwort erfolgreich geändert." @@ -10022,14 +10124,25 @@ msgstr "" msgid "Invalid key." msgstr "Ungültiger Schlüssel." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Einen gültigen Benutzernamen eingeben." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Öffentlicher Schlüssel" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10037,11 +10150,11 @@ msgstr "" "Öffentlicher Schlüssel des Peers. Beispiel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Endpunkt des Servers" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -10049,11 +10162,11 @@ msgstr "" "Domänenname und Port in der Form \"ip:port\". Beispiel: " "demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Öffentlicher Schlüssel des Servers" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10061,25 +10174,32 @@ msgstr "" "Vom Serveroperator bereitgestellt, eine lange Zeichenfolge. Beispiel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Vom Server bereitgestellte Client-IP-Adresse" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "IP-Adresse, die diesem Computer auf dem VPN zugewiesen ist, nachdem eine " "Verbindung mit dem Endpunkt hergestellt wurde. Dieser Wert wird in der Regel " "vom Serverbetreiber bereitgestellt. Beispiel: 192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Privater Schlüssel dieser Maschine" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10092,11 +10212,11 @@ msgstr "" "bestehen jedoch darauf, dies bereitzustellen. Beispiel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Vorher geteilter Schlüssel" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10106,13 +10226,13 @@ msgstr "" "eine zusätzliche Sicherheitsebene hinzuzufügen. Füllen Sie nur aus, wenn " "dies vorgesehen ist. Beispiel: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" "Verwenden Sie diese Verbindung, um den gesamten ausgehenden Datenverkehr zu " "senden" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "In der Regel auf einem VPN-Dienst überprüft, über den der gesamte " @@ -10126,72 +10246,108 @@ msgstr "VPN-Client" msgid "As a Server" msgstr "Als Server" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Endpoints for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Endpunkte für diese %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Endpunkt" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Zu %(box_name)s Ports" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Peers, die eine Verbindung zu diesem Server herstellen dürfen:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "Zulässige IPs" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Letzte verbundene Zeit" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" "Noch sind keine Peers für eine Verbindung mit diesem %(box_name)s " "konfiguriert." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Öffentlicher Schlüssel für diese %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Noch nicht konfiguriert." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Hinzufügen eines neuen Peers" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Zulässige Clients hinzufügen" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "WireGuard server started successfully." +msgid "WireGuard server not started yet." +msgstr "Der WireGuard-Server wurde erfolgreich gestartet." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "WireGuard-Server starten" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Als Client" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Server, mit denen %(box_name)s eine Verbindung herstellen:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Endpunkt" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Es sind noch keine Verbindungen zu entfernten Servern konfiguriert." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Neuen Server hinzufügen" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Verbindung zum Server hinzufügen" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "IP-Adresse, die diesem Client zugewiesen wird" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Client hinzufügen" @@ -10242,18 +10398,22 @@ msgstr "Server-Endpunkte:" msgid "Server public key:" msgstr "Öffentlicher Schlüssel des Servers:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Übermittelte Daten:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Erhaltene Daten:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Letzter Handshake:" @@ -10281,62 +10441,74 @@ msgstr "Öffentlicher Schlüssel dieses Computers:" msgid "IP address of this machine:" msgstr "IP-Adresse dieses Rechners:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Neuer Client wurde hinzugefügt." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Client mit öffentlichem Schlüssel ist bereits vorhanden" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Zulässiger Client" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Aktualisierter Client." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Client bearbeiten" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Zulässigen Client löschen" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Client gelöscht." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Client nicht gefunden" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Neuer Server wurde hinzugefügt." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Verbindung zum Server" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Aktualisierter Server." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Ändern der Verbindung zum Server" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Verbindung zum Server löschen" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Server gelöscht." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "Der WireGuard-Server wurde erfolgreich gestartet." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "Starten des WireGuard-Servers fehlgeschlagen: {}" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10535,6 +10707,24 @@ msgstr "Konfigurationsdatei: {file}" msgid "Timeout waiting for package manager" msgstr "Zeitüberschreitung beim Warten auf den Paket-Manager" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "Adresse anfordern" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Installation der App" @@ -10706,35 +10896,35 @@ msgstr "" "und Datenschutz entwickelt wurde. Es ist freie Software, mit der Sie Server-" "Apps einfach installieren und verwalten können." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Startseite" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Apps" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " System" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Passwort ändern" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Herunterfahren" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Abmelden" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Sprache wählen" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Anmelden" @@ -10833,11 +11023,15 @@ msgstr "" "Derzeit sind die folgenden Netzwerkschnittstellen als intern konfiguriert: " "%(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Verwerfen" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Benachrichtigungen" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "vor %(time_since)s" @@ -10960,10 +11154,8 @@ msgid "Dark" msgstr "Dunkel" #: plinth/templates/theme-menu.html:41 -#, fuzzy -#| msgid "Automatic" msgid "Auto" -msgstr "Auto" +msgstr "Automatisch" #: plinth/templates/toolbar.html:39 plinth/templates/toolbar.html:40 msgid "View Logs" @@ -11003,15 +11195,32 @@ msgstr "Hier" msgid "Setting unchanged" msgstr "Einstellung unverändert" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "vor der Deinstallation von {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Passwort des SSH-Hostrechners.
SSH-Schlüssel-basierte " +#~ "Authentifizierung ist noch nicht möglich." + +#~ msgid "Single Sign On" +#~ msgstr "Einmal-Anmeldung" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Öffentlicher Schlüssel für diese %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Noch nicht konfiguriert." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12670,9 +12879,6 @@ msgstr "Gujarati" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "Kein spezieller Dienst aktiviert" -#~ msgid "Standard Services" -#~ msgstr "Standarddienste" - #~ msgid "" #~ "When enabled, Syncthing's web interface will be available from /syncthing. Desktop and mobile " @@ -13285,9 +13491,6 @@ msgstr "Gujarati" #~ "BitTorrent\n" #~ "(Transmission)" -#~ msgid "Applications" -#~ msgstr "Anwendungen" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/django.pot b/plinth/locale/django.pot index 26e98113d..e4387cfcf 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -100,15 +100,15 @@ msgstr "" msgid "Use the language preference set in the browser" msgstr "" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "" @@ -131,36 +131,40 @@ msgstr "" msgid "Administration" msgstr "" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "" -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "" -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "" -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -202,41 +206,41 @@ msgstr "" msgid "mDNS" msgstr "" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "" -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." msgstr "" -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " "succeed. The latest error is: {error_message}" msgstr "" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "" @@ -371,7 +375,7 @@ msgid "Passphrase" msgstr "" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "" #: plinth/modules/backups/forms.py:190 @@ -409,27 +413,45 @@ msgid "" msgstr "" #: plinth/modules/backups/forms.py:255 -msgid "SSH server password" +msgid "SSH Authentication Type" msgstr "" #: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -505,17 +527,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -551,7 +573,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -576,7 +614,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -584,7 +622,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -700,107 +738,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -870,7 +908,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -955,8 +993,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1026,6 +1064,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1306,7 +1345,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1847,7 +1886,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2115,8 +2154,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2162,8 +2201,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -2994,8 +3033,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "" @@ -3537,7 +3576,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4572,9 +4611,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5046,6 +5085,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5249,6 +5289,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5431,8 +5472,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5804,6 +5845,35 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +msgid "Application" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6092,8 +6162,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6750,10 +6820,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7003,8 +7075,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7317,26 +7390,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8102,13 +8155,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8331,35 +8377,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8368,94 +8418,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8467,6 +8517,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8480,7 +8534,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8522,7 +8576,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8531,6 +8585,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8567,30 +8625,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8617,55 +8679,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8673,22 +8746,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8700,70 +8773,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8812,18 +8915,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8847,62 +8954,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9059,6 +9178,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9209,35 +9344,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9330,11 +9465,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9482,11 +9621,11 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/el/LC_MESSAGES/django.po b/plinth/locale/el/LC_MESSAGES/django.po index e82b55138..2cab3e97a 100644 --- a/plinth/locale/el/LC_MESSAGES/django.po +++ b/plinth/locale/el/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2022-09-14 17:20+0000\n" -"Last-Translator: ikmaak \n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-02-22 13:17+0000\n" +"Last-Translator: James Valleroy \n" "Language-Team: Greek \n" "Language: el\n" @@ -17,7 +17,7 @@ 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.14.1-dev\n" +"X-Generator: Weblate 5.16.1-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -26,9 +26,8 @@ msgstr "" #: plinth/container.py:140 #, fuzzy, python-brace-format -#| msgid "Service {service_name} is running" msgid "Container {container_name} is running" -msgstr "Το πρόγραμμα {service_name} είναι ενεργοποιημένο" +msgstr "Το πρόγραμμα {container_name} είναι ενεργοποιημένο" #: plinth/context_processors.py:21 plinth/views.py:175 msgid "FreedomBox" @@ -113,15 +112,15 @@ msgstr "Επιλέξτε γλώσσα που θα χρησιμοποιηθεί msgid "Use the language preference set in the browser" msgstr "Χρήση της προεπιλεγμένης γλώσσας του περιηγητή διαδικτύου" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Κεντρική σελίδα" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Εφαρμογές" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "Σύστημα" @@ -148,42 +147,46 @@ msgstr "Ασφάλεια" msgid "Administration" msgstr "Διαχείριση διακομιστή" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "" -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 #, fuzzy #| msgid "Existing Backups" msgid "Error running operation." msgstr "Υπάρχοντα αντίγραφα ασφαλείας" -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 #, fuzzy #| msgid "Existing Backups" msgid "Error loading page." msgstr "Υπάρχοντα αντίγραφα ασφαλείας" -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 #, fuzzy #| msgid "Chat Server" msgid "Apache HTTP Server" msgstr "Διακομιστής συνομιλίας" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Διακομιστής Διαδικτύου (Web Server)" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Εφαρμογή Διαδικτύου (Πλίνθος)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -232,44 +235,44 @@ msgstr "" msgid "mDNS" msgstr "" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "" "Τα αντίγραφα ασφαλείας επιτρέπουν τη δημιουργία και τη διαχείριση εφεδρικών " "αρχείων (backups)." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Αντίγραφα ασφαλείας" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." msgstr "" -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, fuzzy, python-brace-format #| msgid "About {box_name}" msgid "Go to {app_name}" -msgstr "Σχετικά με το {box_name}" +msgstr "Σχετικά με το {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " "succeed. The latest error is: {error_message}" msgstr "" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 #, fuzzy #| msgid "Existing Backups" msgid "Error During Backup" @@ -412,7 +415,9 @@ msgid "Passphrase" msgstr "Κωδικός" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Κωδικός πρόσβασης. Απαιτείται μόνο όταν χρησιμοποιείται κρυπτογράφηση." #: plinth/modules/backups/forms.py:190 @@ -452,29 +457,57 @@ msgstr "" "χρήστης@υπολογιστής:~/μονοπάτι/για/το/αποθετήριο/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Λειτουργία ελέγχου ταυτότητας" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Ο έλεγχος ταυτότητας στον απομακρυσμένο διακομιστή απέτυχε." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Key-based Authentication" +msgstr "Χρήση βασικού ελέγχου ταυτότητας HTTP" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Απενεργοποίηση ελέγχου ταυτότητας με κωδικό πρόσβασης" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Κωδικός πρόσβασης διακομιστή SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Κωδικός πρόσβασης του διακομιστή SSH.
Ο έλεγχος ταυτότητας με κλειδί " -"SSH δεν είναι ακόμα δυνατός." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Απενεργοποίηση ελέγχου ταυτότητας με κωδικό πρόσβασης" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Απενεργοποίηση ελέγχου ταυτότητας με κωδικό πρόσβασης" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Το απομακρυσμένο αποθετήριο αντιγράφων ασφαλείας υπάρχει ήδη." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Επιλογή εξακριβωμένου δημόσιου κλειδιού SSH" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Επαναφορά" @@ -564,17 +597,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Το υπάρχον αποθετήριο δεν είναι κρυπτογραφημένο." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Αποθηκευτικός χώρος {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Δημιουργία νέου αντιγράφου ασφαλείας" @@ -610,7 +643,23 @@ msgstr "Προσθήκη απομακρυσμένης τοποθεσίας αν msgid "Existing Backups" msgstr "Υπάρχοντα αντίγραφα ασφαλείας" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -635,7 +684,7 @@ msgstr "Υπάρχοντα αντίγραφα ασφαλείας" msgid "Caution:" msgstr "Προσοχή:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, fuzzy, python-format #| msgid "" #| "The credentials for this repository are stored on your %(box_name)s.
%(domainname)s. User IDs will " -#| "look like username@%(domainname)s. You can setup your domain on " -#| "the system Configure page." +#, python-format msgid "" "Your XMPP server domain is set to %(domain_name)s. User IDs will look " "like username@%(domain_name)s. You can setup your domain on the " "system Name Services page." msgstr "" "To όνομα διαδικτύου για το διακομιστή XMPP έχει ρυθμιστεί ως το " -"%(domainname)s. Ταυτότητες χρηστών θα είναι όπως: " -"username@%(domainname)s. Μπορείτε να ρυθμίσετε το όνομα της υπηρεσίας " -"στο Ρυθμίστε page." +"%(domain_name)s. Ταυτότητες χρηστών θα είναι όπως: " +"username@%(domain_name)s. Μπορείτε να ρυθμίσετε το όνομα της " +"υπηρεσίας στο Ρυθμίστε page." #: plinth/modules/ejabberd/templates/ejabberd.html:30 #, fuzzy, python-format @@ -2517,10 +2555,8 @@ msgid "" "Your XMPP server domain is not set. You can setup your domain on the system " "Name Services page." msgstr "" -"To όνομα διαδικτύου για το διακομιστή XMPP έχει ρυθμιστεί ως το " -"%(domainname)s. Ταυτότητες χρηστών θα είναι όπως: " -"username@%(domainname)s. Μπορείτε να ρυθμίσετε το όνομα της υπηρεσίας " -"στο Ρυθμίστε page." +"Το domain XMPP server σας δεν έχει οριστεί. Μπορείτε να ρυθμίσετε τον τομέα " +"σας στο σύστημα Name Services σελίδα." #: plinth/modules/email/__init__.py:26 msgid "" @@ -2549,8 +2585,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -2908,7 +2944,7 @@ msgstr "Δεν υπάρχουν διαθέσιμα αποθετήρια." #, fuzzy, python-format #| msgid "Go to site %(site)s" msgid "Go to wiki %(wiki)s" -msgstr "Μεταβείτε στην τοποθεσία %(site)s" +msgstr "Μεταβείτε στην τοποθεσία %(wiki)s" #: plinth/modules/featherwiki/templates/featherwiki_configure.html:43 #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:43 @@ -2921,7 +2957,7 @@ msgstr "" #, fuzzy, python-format #| msgid "Delete site %(site)s" msgid "Delete wiki %(wiki)s" -msgstr "Διαγραφή ιστότοπου %(site)s" +msgstr "Διαγραφή ιστότοπου %(wiki)s" #: plinth/modules/featherwiki/templates/featherwiki_delete.html:12 #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:12 @@ -3005,10 +3041,9 @@ msgstr "Απέτυχε η προσθήκη χρήστη στην ομάδα." #: plinth/modules/featherwiki/views.py:138 #: plinth/modules/tiddlywiki/views.py:139 -#, fuzzy, python-brace-format -#| msgid "Could not delete {name}: {error}" +#, python-brace-format msgid "Could not delete {name}" -msgstr "Δεν ήταν δυνατή η διαγραφή του {name}: {error}" +msgstr "Δεν ήταν δυνατή η διαγραφή του {name}" #: plinth/modules/firewall/__init__.py:25 #, python-brace-format @@ -3485,8 +3520,8 @@ msgstr "Υποβάλετε σχόλια" msgid "Contribute" msgstr "Συνεισφέρετε" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Σχετικά με" @@ -3507,12 +3542,13 @@ msgstr "" "%(box_name)s." #: plinth/modules/help/templates/help_about.html:35 -#, fuzzy, python-format -#| msgid "There is a new %(box_name)s version available." +#, python-format msgid "" "There is a new %(box_name)s version available." -msgstr "Υπάρχει μια νέα έκδοση %(box_name)s διαθέσιμη." +msgstr "" +"Υπάρχει μια νέα έκδοση %(box_name)s διαθέσιμη." #: plinth/modules/help/templates/help_about.html:40 #: plinth/modules/upgrades/templates/upgrades_configure.html:42 @@ -4132,7 +4168,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Πληροφορίες άδειας χρήσης JavaScript" @@ -4281,7 +4317,7 @@ msgstr "Δεν υπάρχουν διαθέσιμα αποθετήρια." #, fuzzy, python-format #| msgid "Delete site %(site)s" msgid "Delete package %(title)s" -msgstr "Διαγραφή ιστότοπου %(site)s" +msgstr "Διαγραφή ιστότοπου %(title)s" #: plinth/modules/kiwix/views.py:49 msgid "Content package added." @@ -4401,15 +4437,12 @@ msgid "Obtain" msgstr "Αποκτήσετε" #: plinth/modules/letsencrypt/templates/letsencrypt.html:112 -#, fuzzy, python-format -#| msgid "" -#| "No domains have been configured. Configure " -#| "domains to be able to obtain certificates for them." +#, python-format msgid "" "No domains have been configured. Configure " "domains to be able to obtain certificates for them." msgstr "" -"Δεν έχουν ρυθμιστεί ονόματα διαδικτύου Ρυθμίσετε " +"Δεν έχουν ρυθμιστεί ονόματα διαδικτύου Ρυθμίσετε " "όνομα διαδικτύου για να μπορείτε να αποκτήσετε πιστοποιητικά για αυτό." #: plinth/modules/letsencrypt/views.py:40 @@ -4422,10 +4455,9 @@ msgstr "" "να διαρκέσει λίγα λεπτά για να τεθεί σε ισχύ." #: plinth/modules/letsencrypt/views.py:46 -#, fuzzy, python-brace-format -#| msgid "Failed to revoke certificate for domain {domain}: {error}" +#, python-brace-format msgid "Failed to revoke certificate for domain {domain}" -msgstr "Απέτυχε η ανάκληση του πιστοποιητικού για το όνομα {domain}: {error}" +msgstr "Απέτυχε η ανάκληση του πιστοποιητικού για το όνομα {domain}" #: plinth/modules/letsencrypt/views.py:59 #: plinth/modules/letsencrypt/views.py:77 @@ -4435,10 +4467,9 @@ msgstr "Το πιστοποιητικό αποκτήθηκε με επιτυχί #: plinth/modules/letsencrypt/views.py:64 #: plinth/modules/letsencrypt/views.py:82 -#, fuzzy, python-brace-format -#| msgid "Failed to obtain certificate for domain {domain}: {error}" +#, python-brace-format msgid "Failed to obtain certificate for domain {domain}" -msgstr "Αποτυχία λήψης πιστοποιητικού για το όνομα {domain} {error}" +msgstr "Αποτυχία λήψης πιστοποιητικού για το όνομα {domain}" #: plinth/modules/letsencrypt/views.py:95 #, python-brace-format @@ -4446,10 +4477,9 @@ msgid "Certificate successfully deleted for domain {domain}" msgstr "Το πιστοποιητικό διαγράφηκε επιτυχώς για το όνομα {domain}" #: plinth/modules/letsencrypt/views.py:100 -#, fuzzy, python-brace-format -#| msgid "Failed to delete certificate for domain {domain}: {error}" +#, python-brace-format msgid "Failed to delete certificate for domain {domain}" -msgstr "Αποτυχία διαγραφής πιστοποιητικού για το όνομα {domain}: {error}" +msgstr "Αποτυχία διαγραφής πιστοποιητικού για το όνομα {domain}" #: plinth/modules/matrixsynapse/__init__.py:26 msgid "" @@ -4554,22 +4584,12 @@ msgstr "" "
." #: plinth/modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:31 -#, fuzzy -#| msgid "" -#| "\n" -#| " Warning! Changing the domain name after the " -#| "initial\n" -#| " setup is currently not supported.\n" -#| " " msgid "" "Warning! Changing the domain name after this step will " "require uninstalling and reinstalling the app which will wipe app's data." msgstr "" -"\n" -" το Προσοχη! Αλλαγή στο όνομα διαδικτύου, μετά την " -"αρχική\n" -"εγκατάσταση δεν υποστηρίζεται.\n" -" " +"το Προσοχη! Αλλαγή στο όνομα διαδικτύου, μετά την αρχική\n" +"εγκατάσταση δεν υποστηρίζεται." #: plinth/modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:42 #, python-format @@ -5151,10 +5171,9 @@ msgid "Created admin user: {username}" msgstr "Μη έγκυρο όνομα χρήστη: {username}" #: plinth/modules/miniflux/views.py:53 -#, fuzzy, python-brace-format -#| msgid "An error occurred while creating the repository." +#, python-brace-format msgid "An error occurred while creating the user: {error}." -msgstr "Παρουσιάστηκε σφάλμα κατά τη δημιουργία του αποθετηρίου." +msgstr "Παρουσιάστηκε σφάλμα κατά τη δημιουργία του αποθετηρίου: {error}." #: plinth/modules/miniflux/views.py:70 #, fuzzy @@ -5172,7 +5191,7 @@ msgstr "Μη έγκυρο όνομα χρήστη: {username}" #, fuzzy, python-brace-format #| msgid "An error occurred during configuration." msgid "An error occurred during password reset: {error}." -msgstr "Παρουσιάστηκε σφάλμα κατά τη ρύθμιση παραμέτρων." +msgstr "Παρουσιάστηκε σφάλμα κατά τη ρύθμιση παραμέτρων: {error}." #: plinth/modules/mumble/__init__.py:26 msgid "" @@ -5421,9 +5440,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Επεξεργασία" @@ -5788,7 +5807,7 @@ msgstr "Ανοιχτό" #, fuzzy, python-brace-format #| msgid "Use upstream bridges to connect to Tor network" msgid "Specify how your {box_name} is connected to your network" -msgstr "Χρησιμοποιήστε εξωτερικές γέφυρες για να συνδεθείτε στο δίκτυο Tor" +msgstr "Καθορίστε πώς {box_name} είναι συνδεδεμένο με το δίκτυό σας" #: plinth/modules/networks/forms.py:382 #, python-brace-format @@ -5944,6 +5963,7 @@ msgstr "Διαγραφή σύνδεσης" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Σύνδεση" @@ -6156,6 +6176,7 @@ msgid "Edit Connection" msgstr "Επεξεργασία σύνδεσης" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -6270,7 +6291,7 @@ msgstr "Υποβολή" #, fuzzy, python-format #| msgid "Direct connection to the Internet." msgid "How is Your %(box_name)s Connected to the Internet?" -msgstr "Άμεση σύνδεση στο Internet." +msgstr "Πώς είναι το %(box_name)s Συνδέεται με το Διαδίκτυο?" #: plinth/modules/networks/templates/network_topology_content.html:16 #, python-format @@ -6346,8 +6367,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6378,7 +6399,7 @@ msgstr "" #, fuzzy, python-format #| msgid "Delete %(username)s" msgid "Device: %(interface_name)s" -msgstr "Διαγραφή %(username)s" +msgstr "Συσκευή: %(interface_name)s" #: plinth/modules/networks/templates/wifi_scan.html:27 #, fuzzy @@ -6807,6 +6828,40 @@ msgstr "" "Κωδικός πρόσβασης που χρησιμοποιείται για την κρυπτογράφηση δεδομένων. " "Πρέπει να ταιριάζει με τον κωδικό πρόσβασης του διακομιστή." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application enabled" +msgid "Application" +msgstr "Η εφαρμογή ενεργοποιήθηκε" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Εξουσιοδοτημένα κλειδιά SSH" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Εξουσιοδοτημένα κλειδιά SSH" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6864,12 +6919,7 @@ msgid "Profile" msgstr "Προφίλ" #: plinth/modules/openvpn/templates/openvpn.html:15 -#, fuzzy, python-format -#| msgid "" -#| "To connect to %(box_name)s's VPN, you need to download a profile and feed " -#| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " -#| "Clients are available for most platforms. Click \"Learn more...\" above " -#| "for recommended clients and instructions on how to configure them." +#, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " @@ -6878,17 +6928,16 @@ msgid "" msgstr "" "Για να συνδεθείτε στο VPN του %(box_name)s, πρέπει να κάνετε λήψη ενός " "προφίλ και να το τροφοδοτήσετε σε ένα πρόγραμμα-πελάτη OpenVPN στον φορητό ή " -"επιτραπέζιο υπολογιστή σας. Οι υπολογιστές-πελάτες OpenVPN είναι διαθέσιμοι " -"για τις περισσότερες πλατφόρμες. Κάντε κλικ στην επιλογή \"Μάθετε " +"επιτραπέζιο υπολογιστή σας. Οι υπολογιστές-πελάτες OpenVPN είναι διαθέσιμοι " +"για τις περισσότερες πλατφόρμες.Κάντε κλικ στην επιλογή \"Μάθετε " "περισσότερα...\" Προτεινόμενα προγράμματα-πελάτες και οδηγίες σχετικά με τον " "τρόπο διαμόρφωσης τους." #: plinth/modules/openvpn/templates/openvpn.html:24 -#, fuzzy, python-format -#| msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." +#, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" -"Το προφίλ είναι συγκεκριμένο για κάθε χρήστη του %(box_name)s. Κρατήστε το " +"Το προφίλ είναι συγκεκριμένο για κάθε χρήστη του %(box_name)s. Κρατήστε το " "μυστικό." #: plinth/modules/openvpn/templates/openvpn.html:34 @@ -7165,8 +7214,8 @@ msgstr "" msgid "Shutdown" msgstr "ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣ" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Κάνετε επανεκκίνηση" @@ -7597,15 +7646,12 @@ msgstr "" #: plinth/modules/rssbridge/__init__.py:24 #, fuzzy, python-brace-format -#| msgid "" -#| "When enabled, Tiny Tiny RSS can be accessed by any user with a {box_name} login." msgid "" "When enabled, RSS-Bridge can be accessed by any " "user belonging to the feed-reader group." msgstr "" -"Όταν είναι ενεργοποιημένο, το Tiny Tiny RSS είναι προσβάσιμο από κάθε χρήστη με {box_name} πιστοποιητικά." +"Όταν είναι ενεργοποιημένο, το Tiny RSS είναι προσβάσιμο από κάθε χρήστη με πιστοποιητικά." #: plinth/modules/rssbridge/__init__.py:28 #, python-brace-format @@ -8017,10 +8063,12 @@ msgid "N/A" msgstr "Μη εφαρμόσιμα" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Ναι" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Όχι" @@ -8343,10 +8391,17 @@ msgstr "" "στιγμιότυπα θα καθαρίζονται αυτόματα σύμφωνα με τις παρακάτω ρυθμίσεις." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Τα στιγμιότυπα λειτουργούν αυτήν τη στιγμή μόνο σε συστήματα αρχείων btrfs " "και μόνο στο root διαμέρισμα. Τα στιγμιότυπα δεν αποτελούν αντικατάσταση για " @@ -8718,28 +8773,6 @@ msgstr "Αλγόριθμος" msgid "Fingerprint" msgstr "Ψηφιακό αποτύπωμα" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Ενιαία είσοδος" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Σύνδεση" - -#: plinth/modules/sso/views.py:86 -#, fuzzy -#| msgid "Password changed successfully." -msgid "Logged out successfully." -msgstr "Ο κωδικός πρόσβασης άλλαξε με επιτυχία." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9623,13 +9656,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Oι αυτόματες ενημερώσεις ενεργοποιήθηκαν" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "Κλείσιμο" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9690,7 +9716,7 @@ msgstr "" #, fuzzy, python-format #| msgid "Delete site %(site)s" msgid "Released: %(date)s." -msgstr "Διαγραφή ιστότοπου %(site)s" +msgstr "Εκδόθηκε %(date)s" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:91 #, fuzzy @@ -9902,35 +9928,39 @@ msgstr "" msgid "Users and Groups" msgstr "Χρήστες και ομάδες" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Πρόσβαση σε όλες τις υπηρεσίες και τις ρυθμίσεις συστήματος" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Ελέγξτε την καταχώρηση LDAP \"{search_item}\"" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "Το όνομα χρήστη είναι δεσμευμένο." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 #, fuzzy #| msgid "" #| "Select which services should be available to the new user. The user will " @@ -9952,52 +9982,50 @@ msgstr "" "υπηρεσίες. Μπορούν επίσης να συνδεθούν στο σύστημα μέσω του SSH και να έχουν " "δικαιώματα διαχειριστή (sudo)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 #, fuzzy #| msgid "Invalid server name" msgid "Enter a valid username." msgstr "Μη έγκυρο όνομα διακομιστή" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 #, fuzzy #| msgid "Administrator Password" msgid "Authorization Password" msgstr "Κωδικός Πρόσβασης Διαχειριστή" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 #, fuzzy #| msgid "Show password" msgid "Invalid password." msgstr "Εμφάνιση κωδικού" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 -#, fuzzy, python-brace-format -#| msgid "Creating LDAP user failed." +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 +#, python-brace-format msgid "Creating LDAP user failed: {error}" -msgstr "Η δημιουργία χρήστη LDAP απέτυχε." +msgstr "Η δημιουργία χρήστη LDAP απέτυχε: {error}." -#: plinth/modules/users/forms.py:225 -#, fuzzy, python-brace-format -#| msgid "Failed to add new user to {group} group." +#: plinth/modules/users/forms.py:246 +#, python-brace-format msgid "Failed to add new user to {group} group: {error}" -msgstr "Απέτυχε η προσθήκη νέου χρήστη στην ομάδα {group}." +msgstr "Απέτυχε η προσθήκη νέου χρήστη στην ομάδα {group}: {error}." -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "Εξουσιοδοτημένα κλειδιά SSH" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -10008,55 +10036,54 @@ msgstr "" "Μπορείτε να εισαγάγετε πολλαπλά κλειδιά, ένα σε κάθε γραμμή. Οι κενές " "γραμμές και οι γραμμές που ξεκινούν με # θα αγνοηθούν." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete User" msgid "Delete user" msgstr "Διαγραφή χρήστη" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 #, fuzzy #| msgid "Failed to add user to group." msgid "Failed to delete user." msgstr "Απέτυχε η προσθήκη χρήστη στην ομάδα." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "Η μετονομασία του χρήστη LDAP απέτυχε." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Απέτυχε η κατάργηση του χρήστη από την ομάδα." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Απέτυχε η προσθήκη χρήστη στην ομάδα." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "Δεν ήταν δυνατό να προστεθούν τα κλειδιά SSH." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "Απέτυχε η αλλαγή της κατάστασης χρήστη." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "Η αλλαγή του κωδικού πρόσβασης χρήστη LDAP απέτυχε." -#: plinth/modules/users/forms.py:447 -#, fuzzy, python-brace-format -#| msgid "Failed to add new user to admin group." +#: plinth/modules/users/forms.py:468 +#, python-brace-format msgid "Failed to add new user to admin group: {error}" -msgstr "Αποτυχία προσθήκης νέου χρήστη στην ομάδα διαχειριστών." +msgstr "Αποτυχία προσθήκης νέου χρήστη στην ομάδα διαχειριστών: {error}." -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Ο λογαριασμός χρήστη δημιουργήθηκε, τώρα είστε συνδεδεμένοι" @@ -10072,6 +10099,10 @@ msgstr "Διαχείριση στιγμιότυπων" msgid "App permissions" msgstr "Δικαιώματα" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -10085,7 +10116,7 @@ msgstr "Αποθήκευση κωδικού πρόσβασης" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Δημιουργία χρήστη" @@ -10135,7 +10166,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Χρήστες" @@ -10144,6 +10175,10 @@ msgstr "Χρήστες" msgid "Edit user %(username)s" msgstr "Επεξεργασία χρήστη %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Σύνδεση" + #: plinth/modules/users/templates/users_update.html:17 #, fuzzy, python-format #| msgid "Edit user %(username)s" @@ -10186,31 +10221,37 @@ msgstr "Διαγραφή χρήστη" msgid "Cancel" msgstr "Άκυρο" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +#, fuzzy +#| msgid "Password changed successfully." +msgid "Logged out successfully." +msgstr "Ο κωδικός πρόσβασης άλλαξε με επιτυχία." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Ο χρήστης %(username)s δημιουργήθηκε." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "O χρήστης %(username)s ενημερώθηκε." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Επεξεργασία χρήστη" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "User %(username)s created." msgid "User %(username)s deleted." msgstr "Ο χρήστης %(username)s δημιουργήθηκε." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Αλλαγή κωδικού πρόσβασης" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Ο κωδικός πρόσβασης άλλαξε με επιτυχία." @@ -10239,59 +10280,72 @@ msgstr "" msgid "Invalid key." msgstr "Μη έγκυρο όνομα kite" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Invalid server name" +msgid "Enter a valid IPv4 address." +msgstr "Μη έγκυρο όνομα διακομιστή" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 #, fuzzy #| msgid "Publish Key" msgid "Public Key" msgstr "Δημοσίευση κλειδιού" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 #, fuzzy #| msgid "Published key to keyserver." msgid "Public key of the server" msgstr "Δημοσιεύθηκε το κλειδί στο διακομιστή κλειδιών." -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10299,22 +10353,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -10330,84 +10384,117 @@ msgstr "Πελάτης IRC" msgid "As a Server" msgstr "Διακομιστής συνομιλίας" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Mount Point" +msgid "Endpoint(s)" +msgstr "Σημείο Προσάρτησης" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "%(box_name)s Setup" +msgid "%(box_name)s VPN IP for services" +msgstr "Ρύθμιση του %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 #, fuzzy #| msgid "Create Connection" msgid "Last Connected Time" msgstr "Δημιουργία σύνδεσης" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -#, fuzzy -#| msgid "No shares currently configured." -msgid "Not configured yet." -msgstr "Δεν έχουν ρυθμιστεί μερίσματα." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 #, fuzzy #| msgid "Add new introducer" msgid "Add a new peer" msgstr "Προσθέστε νέο εισαγωγέα" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Ο κωδικός πρόσβασης άλλαξε με επιτυχία." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 #, fuzzy #| msgid "Chat Client" msgid "As a Client" msgstr "Πρόγραμμα-πελάτης συνομιλίας" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 #, fuzzy #| msgid "Authentication to remote server failed." msgid "No connections to remote servers are configured yet." msgstr "Ο έλεγχος ταυτότητας στον απομακρυσμένο διακομιστή απέτυχε." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 #, fuzzy #| msgid "Add new introducer" msgid "Add a new server" msgstr "Προσθέστε νέο εισαγωγέα" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" msgid "Add Connection to Server" msgstr "Προσθήκη σύνδεσης" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 #, fuzzy #| msgid "IRC Client" msgid "Add Client" @@ -10470,18 +10557,22 @@ msgstr "Όνομα διαδικτύου διακομιστή" msgid "Server public key:" msgstr "Επιλογή εξακριβωμένου δημόσιου κλειδιού SSH" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -10507,88 +10598,102 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 #, fuzzy #| msgid "Add new introducer" msgid "Added new client." msgstr "Προσθέστε νέο εισαγωγέα" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 #, fuzzy #| msgid "A share with this name already exists." msgid "Client with public key already exists" msgstr "Υπάρχει ήδη ένα μέρισμα με αυτό το όνομα." -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 #, fuzzy #| msgid "Email Client" msgid "Allowed Client" msgstr "Πρόγραμμα-πελάτης ηλεκτρονικού ταχυδρομείου" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 #, fuzzy #| msgid "Update setup" msgid "Updated client." msgstr "Ενημέρωση ρυθμίσεων" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 #, fuzzy #| msgid "Email Client" msgid "Modify Client" msgstr "Πρόγραμμα-πελάτης ηλεκτρονικού ταχυδρομείου" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 #, fuzzy #| msgid "Archive deleted." msgid "Client deleted." msgstr "Το αρχείο διαγράφηκε." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 #, fuzzy #| msgid "Repository not found" msgid "Client not found" msgstr "Το αποθετήριο δεν βρέθηκε" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 #, fuzzy #| msgid "Added custom service" msgid "Added new server." msgstr "Προστέθηκε τροποποιημένη υπηρεσία" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 #, fuzzy #| msgid "Connection Type" msgid "Connection to Server" msgstr "Τύπος σύνδεσης" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 #, fuzzy #| msgid "Update setup" msgid "Updated server." msgstr "Ενημέρωση ρυθμίσεων" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 #, fuzzy #| msgid "Edit Connection" msgid "Modify Connection to Server" msgstr "Επεξεργασία σύνδεσης" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "Διαγραφή σύνδεσης" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "Share deleted." msgid "Server deleted." msgstr "Το μέρισμα διαγράφηκε." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Ο κωδικός πρόσβασης άλλαξε με επιτυχία." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10706,10 +10811,9 @@ msgid "Generic" msgstr "Γενικός" #: plinth/operation.py:120 -#, fuzzy, python-brace-format -#| msgid "Error setting hostname: {exception}" +#, python-brace-format msgid "Error: {name}: {exception}" -msgstr "Σφάλμα κατά τη ρύθμιση του ονόματος του υπολογιστή: {exception}" +msgstr "Σφάλμα κατά τη ρύθμιση του ονόματος του υπολογιστή {name}: {exception}" #: plinth/operation.py:123 #, python-brace-format @@ -10752,6 +10856,22 @@ msgstr "αρχείο ρυθμίσεων: {file}" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 #, fuzzy #| msgid "Install Apps" @@ -10765,22 +10885,21 @@ msgid "Updating app" msgstr "Eνημερώνεται..." #: plinth/setup.py:80 -#, fuzzy, python-brace-format -#| msgid "Error installing application: {error}" +#, python-brace-format msgid "Error installing app: {exception}" -msgstr "Σφάλμα κατά την εγκατάσταση της εφαρμογής: {error}" +msgstr "Σφάλμα κατά την εγκατάσταση της εφαρμογής: {exception}" #: plinth/setup.py:82 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error repairing app: {exception}" -msgstr "Σφάλμα κατά την εγκατάσταση της εφαρμογής: {error}" +msgstr "Σφάλμα κατά την εγκατάσταση της εφαρμογής: {exception}" #: plinth/setup.py:84 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error updating app: {exception}" -msgstr "Σφάλμα κατά την εγκατάσταση της εφαρμογής: {error}" +msgstr "Σφάλμα κατά την εγκατάσταση της εφαρμογής: {exception}" #: plinth/setup.py:87 #, fuzzy @@ -10911,10 +11030,10 @@ msgid "" "the logs to the bug report." msgstr "" "Αυτό είναι ένα εσωτερικό σφάλμα και όχι κάτι που προκαλέσατε ή μπορείτε να " -"διορθώσετε. Αναφέρετε το σφάλμα στο κατάλογος σφαλμάτων ώστε να μπορούμε να " -"το διορθώσουμε. Επίσης, Παρακαλούμε επισυνάψτε το αρχείο καταγραφής κατάστασης στην αναφορά " +"διορθώσετε. Αναφέρετε το σφάλμα στο κατάλογος σφαλμάτων ώστε να " +"μπορούμε να το διορθώσουμε. Επίσης, Παρακαλούμε επισυνάψτε το αρχείο καταγραφής κατάστασης στην αναφορά " "σφάλματος." #: plinth/templates/app-header.html:26 @@ -10963,35 +11082,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Κεντρική σελίδα" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Εφαρμογές" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Σύστημα" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Αλλαγή κωδικού πρόσβασης" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣ" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Αποσύνδεση" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Επιλογή γλώσσας" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Σύνδεση" @@ -11075,8 +11194,8 @@ msgid "" "%(service_name)s is available only on internal networks or when the " "client is connected to %(box_name)s through VPN." msgstr "" -"Η υπηρεσία %(service_name)s είναι διαθέσιμη μόνο σε εσωτερικά " -"δίκτυα." +"Το %(service_name)s είναι διαθέσιμο μόνο σε εσωτερικά δίκτυα ή όταν " +"ο πελάτης συνδέεται με το %(box_name)s μέσω VPN." #: plinth/templates/internal-zone.html:25 msgid "Currently there are no network interfaces configured as internal." @@ -11093,13 +11212,17 @@ msgstr "" "Προς το παρόν οι ακόλουθες διασυνδέσεις δικτύου έχουν ρυθμιστεί ως " "εσωτερικές: %(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Κλείσιμο" + #: plinth/templates/notifications-dropdown.html:11 #, fuzzy #| msgid "No certificate" msgid "Notifications" msgstr "Δεν υπάρχει πιστοποιητικό" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -11139,9 +11262,9 @@ msgid "" "are not using the DMZ feature. You will need to set up port forwarding on " "your router. You should forward the following ports for %(service_name)s:" msgstr "" -"Αν το FreedomBox είναι πίσω από ένα router, θα πρέπει να ρυθμίσετε την " -"προώθηση των θυρών στο δρομολογητή σας. Θα πρέπει να προωθήσετε τις " -"ακόλουθες θύρες για %(service_name)s:" +"Αν το FreedomBox είναι πίσω από ένα router, " +"θα πρέπει να ρυθμίσετε την προώθηση των θυρών στο δρομολογητή σας. Θα πρέπει " +"να προωθήσετε τις ακόλουθες θύρες για %(service_name)s:" #: plinth/templates/port-forwarding-info.html:42 #, fuzzy @@ -11264,7 +11387,7 @@ msgstr "Εγκατάσταση" #, fuzzy, python-format #| msgid "Edit user %(username)s" msgid "Uninstall App %(app_name)s?" -msgstr "Επεξεργασία χρήστη %(username)s" +msgstr "Εφαρμογή %(app_name)s?" #: plinth/templates/uninstall.html:17 msgid "" @@ -11280,15 +11403,30 @@ msgstr "" msgid "Setting unchanged" msgstr "Οι ρυθμίσεις δεν άλλαξαν" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Κωδικός πρόσβασης του διακομιστή SSH.
Ο έλεγχος ταυτότητας με κλειδί " +#~ "SSH δεν είναι ακόμα δυνατός." + +#~ msgid "Single Sign On" +#~ msgstr "Ενιαία είσοδος" + +#, fuzzy +#~| msgid "No shares currently configured." +#~ msgid "Not configured yet." +#~ msgstr "Δεν έχουν ρυθμιστεί μερίσματα." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12639,9 +12777,6 @@ msgstr "Gujarati" #~ msgid "Settings unchanged" #~ msgstr "Οι ρυθμίσεις δεν άλλαξαν" -#~ msgid "Application enabled" -#~ msgstr "Η εφαρμογή ενεργοποιήθηκε" - #~ msgid "Application disabled" #~ msgstr "Η εφαρμογή απενεργοποιήθηκε" diff --git a/plinth/locale/es/LC_MESSAGES/django.po b/plinth/locale/es/LC_MESSAGES/django.po index 6dc88db56..c278dc230 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2024-11-01 17:00+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Spanish " #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Modo de autenticación" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Ha fallado la autenticación en el servidor remoto." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "necesita autenticación" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Desactivar autentificación de clave" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Contraseña del servidor SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Contraseña del servidor SSH.
La autenticación basada en clave SSH aún no " -"es posible." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Desactivar autentificación de clave" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Desactivar autentificación de clave" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "El repositorio de copias de seguridad remoto ya existe." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Seleccione una clave pública SSH verificada" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Restaurar" @@ -566,17 +600,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "El repositorio existente no está cifrado." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Almacenamiento en {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Crear una copia de seguridad nueva" @@ -612,7 +646,23 @@ msgstr "Añadir sitio remoto para copias de seguridad" msgid "Existing Backups" msgstr "Copias de seguridad existentes" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -637,7 +687,7 @@ msgstr "Copias de seguridad existentes" msgid "Caution:" msgstr "Precaución:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -648,7 +698,7 @@ msgstr "" "Para restaurar una copia de seguridad a un nuevo %(box_name)s, necesita las " "credenciales SSH y, si se selecciona, la frase de contraseña de cifrado." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Crear sitio" @@ -793,111 +843,113 @@ msgstr "" msgid "Verify Host" msgstr "Verificar anfitrión" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "No se pudo verificar la clave pública SSH del anfitrión." + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "Ha fallado la autenticación en el servidor remoto." + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "Error al conectar con el servidor: {}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "Calendario de respaldos actualizado." -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 msgid "Schedule Backups" msgstr "Agendar respaldos" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "Archivo creado." -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "Borrar archivo" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "Archivo borrado." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "Subir y restaurar una copia de seguridad" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 #, fuzzy #| msgid "Logged out successfully." msgid "Upload successful." msgstr "Desconectado con éxito." -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "No se encontraron copias de seguridad." -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "Restaurar desde la copia de seguridad subida" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "Archivos restaurados desde la copia de seguridad." -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "No hay más discos disponibles para añadir un repositorio." -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "Crear repositorio de copias de seguridad" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 #, fuzzy #| msgid "Added new remote SSH repository." msgid "Added new repository." msgstr "Añadido nuevo repositorio SSH remoto." -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "Crear repositorio de copias de seguridad remotas" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "Añadido nuevo repositorio SSH remoto." -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "Verificar la clave de anfitrión SSH" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "Clave SSH de anfitrión verificada." -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "Anfitrión SSH verificado." -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "No se pudo verificar la clave pública SSH del anfitrión." - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "Ha fallado la autenticación en el servidor remoto." - -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" -msgstr "Error al conectar con el servidor: {}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Repositorio eliminado." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Eliminar repositorio" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Repositorio dado de baja. Las copias de seguridad no se han borrado." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "¡No se pudo desmontar!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Montaje fallido" @@ -979,7 +1031,7 @@ msgstr "Permisos para usuarios anónimos que no han puesto contraseña." #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Permisos" @@ -1067,8 +1119,8 @@ msgstr "Listar" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Eliminar" @@ -1149,6 +1201,7 @@ msgstr "DNSSEC" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Servidor" @@ -1458,13 +1511,20 @@ msgid "Webserver Home Page" msgstr "Página de inicio del servidor web" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Elija la página predeterminada que se servirá cuando alguien visite su " "{box_name} desde la web. Un supuesto típico es configurar su blog o wiki " @@ -2097,7 +2157,7 @@ msgid "Invalid domain name" msgstr "Nombre de dominio no válido" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Nombre de usuaria/o" @@ -2413,8 +2473,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Estado" @@ -2480,9 +2540,13 @@ msgstr "" "administrador." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube app proporciona un " "interfaz web para que los usuarios accedan a correo electrónico." @@ -3392,8 +3456,8 @@ msgstr "Enviar Comentarios" msgid "Contribute" msgstr "Contribuír" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Acerca de" @@ -4040,7 +4104,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Información de licencia de JavaScript" @@ -5297,9 +5361,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Editar" @@ -5867,6 +5931,7 @@ msgstr "Eliminar conexión" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Conexión" @@ -6078,6 +6143,7 @@ msgid "Edit Connection" msgstr "Editar conexión" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 #, fuzzy #| msgid "Error" @@ -6284,11 +6350,17 @@ msgstr "" "provee los servicios." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Si no tiene acceso a su router, elija la opción de no configurarlo. Para ver " "opciones para solucionar esta limitación, elija la opción \"No tengo " @@ -6705,6 +6777,40 @@ msgstr "Compartir con grupo" msgid "Password update failed. Please choose a stronger password." msgstr "Error al actualizar la contraseña. Elija una contraseña más segura." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Aplicaciones" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Claves de SSH autorizadas" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Claves de SSH autorizadas" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -7050,8 +7156,8 @@ msgstr "" msgid "Shutdown" msgstr "Apagar" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Reiniciar" @@ -7887,10 +7993,12 @@ msgid "N/A" msgstr "N/A" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Sí" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "No" @@ -8188,10 +8296,17 @@ msgstr "" "configuración." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Las instantáneas funcionan actualmente solo en sistemas de archivos btrfs y " "en la partición raíz. Las instantáneas no son un sustituto de %(username)s" @@ -9922,7 +10018,7 @@ msgstr "Guardar clave de acceso" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Crear usuaria/o" @@ -9979,7 +10075,7 @@ msgid "Skip this step" msgstr "Saltar este paso" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Usuarias/os" @@ -9988,6 +10084,10 @@ msgstr "Usuarias/os" msgid "Edit user %(username)s" msgstr "Editar el usuario %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Inicio de sesión" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -10029,31 +10129,35 @@ msgstr "Eliminar archivos" msgid "Cancel" msgstr "Cancelar" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Desconectado con éxito." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Se ha creado el o la usuaria %(username)s." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "El o la usuaria %(username)s se ha actualizado." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Editar usuario" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "User %(username)s created." msgid "User %(username)s deleted." msgstr "Se ha creado el o la usuaria %(username)s." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Cambiar clave de acceso" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Clave de acceso cambiada con éxito." @@ -10085,14 +10189,25 @@ msgstr "" msgid "Invalid key." msgstr "Clave no válida." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Indique un nombre de usuario válido." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Clave pública" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10100,11 +10215,11 @@ msgstr "" "Clave pública del par. Ejemplo: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Extremo final del servidor" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -10112,11 +10227,11 @@ msgstr "" "Nombre de dominio y puerto de la forma: \"ip:port\". Ejemplo: " "demo.wireguard.com:12912." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Clave pública del servidor" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10124,25 +10239,32 @@ msgstr "" "Cadena larga de caracteres provista por el operador del servicio. Ejemplo: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Dirección de cliente IP facilitada por el servidor" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "Dirección IP asignada a este dispositivo en la VPN tras conectar al extremo " "final. Este valor por lo general lo facilita el operador del servidor. " "Ejemplo: 192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Clave privada en este dispositivo" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10154,11 +10276,11 @@ msgstr "" "es la opción recomendada. Sin embargo, algunos operadores insisten en " "facilitarle ellos. Ejemplo: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Clave pre-compartida" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10168,11 +10290,11 @@ msgstr "" "capa adicional de seguridad. Úselo solo si la tiene. Ejemplo: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Use esta conexión para todo el tráfico saliente" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Generalmente activado para el servicio VPN a través del que se envía el " @@ -10188,70 +10310,108 @@ msgstr "Cliente IRC" msgid "As a Server" msgstr "Como servidor" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Public key for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Clave pública para esta %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Extremo" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "A los puertos de %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Pares autorizados para conectarse a este servidor:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "IP permitidas" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Última conexión" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Todavía no hay pares configurados para conectarse a %(box_name)s." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Clave pública para esta %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Sin configurar todavía." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Añadir nuevo par" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Añadir cliente autorizado" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Clave de acceso cambiada con éxito." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Como cliente" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Servidores a los que se conectará %(box_name)s:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Extremo" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Todavía no se han configurado conexiones a servidores remotos." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Añadir nuevo servidor" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Añadir conexión a servidor" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +#, fuzzy +#| msgid "IP address to use for client:" +msgid "IP address that will be assigned to this client" +msgstr "Dirección IP para el cliente:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Añadir cliente" @@ -10302,18 +10462,22 @@ msgstr "Extremos del servidor:" msgid "Server public key:" msgstr "Clave pública del servidor:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Datos transmitidos:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Datos recibidos:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Última comunicación establecida:" @@ -10340,62 +10504,76 @@ msgstr "Clave pública para este dispositivo:" msgid "IP address of this machine:" msgstr "Dirección IP para este dispositivo:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Nuevo cliente añadido." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Ya existe un cliente con esa clave pública" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Cliente autorizado" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Cliente actualizado." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Modificar cliente" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Eliminar cliente autorizado" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Cliente eliminado." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Cliente no encontrado" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Nuevo servidor añadido." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Conexión al servidor" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Servidor actualizado." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Cambiar conexión al servidor" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Eliminar conexión al servidor" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Servidor eliminado." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Clave de acceso cambiada con éxito." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10590,6 +10768,24 @@ msgstr "archivo de configuración: {file}" msgid "Timeout waiting for package manager" msgstr "Tiempo máximo esperando al administrador de paquetes" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "solicitando dirección" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Instalando app" @@ -10777,35 +10973,35 @@ msgstr "" "propiedad de los datos. Es un software gratuito que te permite instalar y " "gestionar aplicaciones de un servidor con facilidad." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Inicio" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplicaciones" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistema" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Cambiar clave de acceso" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Apagar" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Cerrar sesión" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Seleccionar idioma" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Iniciar sesión" @@ -10904,11 +11100,15 @@ msgstr "" "Las siguientes interfaces de red están configuradas como internas " "actualmente: %(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Descartar" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Notificaciones" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -11079,15 +11279,32 @@ msgstr "" msgid "Setting unchanged" msgstr "Configuración sin cambio" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "antes de desinstalar {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Contraseña del servidor SSH.
La autenticación basada en clave SSH aún " +#~ "no es posible." + +#~ msgid "Single Sign On" +#~ msgstr "Inicio de sesión único" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Clave pública para esta %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Sin configurar todavía." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -13322,9 +13539,6 @@ msgstr "Gujarati" #~ "Servidor SIP \n" #~ " (repro)" -#~ msgid "Applications" -#~ msgstr "Aplicaciones" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/et/LC_MESSAGES/django.po b/plinth/locale/et/LC_MESSAGES/django.po index 826ce23d2..2ec670ff4 100644 --- a/plinth/locale/et/LC_MESSAGES/django.po +++ b/plinth/locale/et/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2026-01-09 20:01+0000\n" "Last-Translator: Priit Jõerüüt \n" "Language-Team: Estonian SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Taasta" @@ -527,17 +551,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -573,7 +597,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -598,7 +638,7 @@ msgstr "" msgid "Caution:" msgstr "Hoiatus:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -606,7 +646,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -722,107 +762,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Arhiiv on loodud." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Kustuta arhiiv" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Arhiiv on kustutatud." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Laadi varukoopia üles ja taasta sealt" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Üleslaadimine õnnestus." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "Varukoopiafaili ei leidu." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Taasta üleslaaditud failist" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "Taastasin failid varukoopiast." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Lisa varukoopiate hoidla" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "Varukoopiate hoidla on lisatud." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Loo varukoopiate hoidla kaugseadmes" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Lisasin uue varukoopiate hoidla kaugseadmes." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Arhiiv on loodud." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Kustuta arhiiv" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Arhiiv on kustutatud." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Laadi varukoopia üles ja taasta sealt" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Üleslaadimine õnnestus." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "Varukoopiafaili ei leidu." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Taasta üleslaaditud failist" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "Taastasin failid varukoopiast." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Lisa varukoopiate hoidla" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Varukoopiate hoidla on lisatud." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Loo varukoopiate hoidla kaugseadmes" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Lisasin uue varukoopiate hoidla kaugseadmes." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -892,7 +932,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Õigused" @@ -977,8 +1017,8 @@ msgstr "Loendamine" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Kustutamine" @@ -1048,6 +1088,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1134,8 +1175,8 @@ msgid "" "Only users belonging to calibre group will be able to access the " "app. All users with access can use all the libraries." msgstr "" -"Sellele rakendusele saavad ligi vaid kasutajad, kes kuuluvad gruppi " -"calibre. Neil kõigil on võimalik kasutada kõiki raamatukogusid." +"Sellele rakendusele saavad ligi vaid kasutajad, kes kuuluvad gruppi " +"calibre. Neil kõigil on võimalik kasutada kõiki raamatukogusid." #: plinth/modules/calibre/__init__.py:53 msgid "Use calibre e-book libraries" @@ -1343,7 +1384,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1886,7 +1927,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2154,8 +2195,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Olek" @@ -2201,8 +2242,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"
Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3033,8 +3074,8 @@ msgstr "" msgid "Contribute" msgstr "Tee kaastööd" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Rakenduse teave" @@ -3576,7 +3617,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4611,9 +4652,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5085,6 +5126,7 @@ msgstr "Kustuta ühendus" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Ühendus" @@ -5288,6 +5330,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5470,8 +5513,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5843,6 +5886,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application installed." +msgid "Application" +msgstr "Rakendus on paigaldatud." + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6131,8 +6205,8 @@ msgstr "Käivita arvuti uuesti" msgid "Shutdown" msgstr "Lülita välja" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Käivita uuesti" @@ -6795,10 +6869,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7048,8 +7124,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7364,26 +7441,6 @@ msgstr "Algoritm" msgid "Fingerprint" msgstr "Sõrmejälg" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Ühekordne sisselogimine" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "Suundumaks sisselogimise lehele sisesta sellel pildil kuvatud tähed" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "Jätka sisselogimist" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Logi sisse" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "Väljalogimine õnnestus." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8149,13 +8206,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8378,35 +8428,39 @@ msgstr "" msgid "Users and Groups" msgstr "Kasutajad ja grupid" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Ligipääs kõikidele teenustele ja süsteemi seadistustele" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "Suundumaks sisselogimise lehele sisesta sellel pildil kuvatud tähed" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8415,55 +8469,55 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "Kustuta kasutaja" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -8471,40 +8525,40 @@ msgstr "" "Kasutajakonto kustutamisega kustutatakse ka kõik tema failid. Kui sa seda ei " "soovi, siis alternatiivina on võimalik kasutaja märkida mitteaktiivseks." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "Kasutaja kustutamine ei õnnestunud." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "LDAP-i kasutaja nime muutmine ei õnnestunud." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Kasutaja eemaldamine grupist ei õnnestunud." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Kasutaja lisamine gruppi ei õnnestunud." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8516,6 +8570,10 @@ msgstr "Halda kasutajakontosid" msgid "App permissions" msgstr "Rakenduse õigused" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "Jätka sisselogimist" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8529,7 +8587,7 @@ msgstr "Salvesta salasõna" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Lisa kasutaja" @@ -8574,7 +8632,7 @@ msgid "Skip this step" msgstr "Jäta see samm vahele" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Kasutajad" @@ -8583,6 +8641,10 @@ msgstr "Kasutajad" msgid "Edit user %(username)s" msgstr "Muuda kasutajat %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Logi sisse" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8619,30 +8681,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Väljalogimine õnnestus." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Muuda salasõna" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Salasõna muutmine õnnestus." @@ -8669,55 +8735,66 @@ msgstr "" msgid "Invalid key." msgstr "Vigane võti." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Avalik võti" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8725,22 +8802,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8752,70 +8829,106 @@ msgstr "VPN-klient" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Otspunkt" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "Lubatud IP-aadressid" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Viimase ühendamise aeg" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Salasõna muutmine õnnestus." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Otspunkt" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +#, fuzzy +#| msgid "IP address to use for client:" +msgid "IP address that will be assigned to this client" +msgstr "IP-aadress kasutamiseks kliendi jaoks:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8864,18 +8977,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8899,62 +9016,76 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Salasõna muutmine õnnestus." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9111,6 +9242,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9261,35 +9408,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9382,11 +9529,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9537,11 +9688,14 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" + +#~ msgid "Single Sign On" +#~ msgstr "Ühekordne sisselogimine" diff --git a/plinth/locale/fa/LC_MESSAGES/django.po b/plinth/locale/fa/LC_MESSAGES/django.po index 5ab62d367..b293ee4c5 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Persian SSH key-based authentication is not yet " -"possible." -msgstr "" +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Required for password-based authentication." +msgstr "به‌کاربردن تأیید هویت سادهٔ تحت وب" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "به‌کاربردن تأیید هویت سادهٔ تحت وب" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -552,18 +584,18 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, fuzzy, python-brace-format #| msgid "{box_name} Manual" msgid "{box_name} storage" msgstr "کتاب راهنمای {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 #, fuzzy #| msgid "Create Connection" msgid "Create a new backup" @@ -611,7 +643,23 @@ msgstr "افزودن اتصال" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -636,7 +684,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -644,7 +692,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 #, fuzzy #| msgid "Create Connection" msgid "Create Location" @@ -777,121 +825,121 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "" + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "" + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error installing application: {error}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "خطا هنگام نصب برنامه: {error}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "" -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 #, fuzzy #| msgid "Create Connection" msgid "Schedule Backups" msgstr "ساختن اتصال" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "" -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 #, fuzzy #| msgid "Delete" msgid "Delete Archive" msgstr "پاک‌کردن" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 #, fuzzy #| msgid "{name} deleted." msgid "Archive deleted." msgstr "{name} پاک شد." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 #, fuzzy #| msgid "Partition expanded successfully." msgid "Upload successful." msgstr "پارتیشن با موفقیت بزرگ شد." -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "" -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "" -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "" -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 #, fuzzy #| msgid "Create Connection" msgid "Create backup repository" msgstr "ساختن اتصال" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 #, fuzzy #| msgid "Create Connection" msgid "Added new repository." msgstr "ساختن اتصال" -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "" -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "" -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "" -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "" - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "" - -#: plinth/modules/backups/views.py:465 -#, fuzzy -#| msgid "Error installing application: {error}" -msgid "Error establishing connection to server: {}" -msgstr "خطا هنگام نصب برنامه: {error}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "" -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -963,7 +1011,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -1056,8 +1104,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "پاک‌کردن" @@ -1135,6 +1183,7 @@ msgstr "فعال‌سازی DNS متغیر" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 #, fuzzy #| msgid "Service" msgid "Server" @@ -1450,7 +1499,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -2099,7 +2148,7 @@ msgid "Invalid domain name" msgstr "نام دامنه معتبر نیست" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "نام کاربری" @@ -2402,8 +2451,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 #, fuzzy msgid "Status" msgstr "وضعیت" @@ -2450,8 +2499,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3363,8 +3412,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "درباره" @@ -3960,7 +4009,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -5138,9 +5187,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "ویرایش" @@ -5657,6 +5706,7 @@ msgstr "پاک‌کردن اتصال" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "اتصال" @@ -5867,6 +5917,7 @@ msgid "Edit Connection" msgstr "ویرایش اتصال" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -6058,8 +6109,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6495,6 +6546,37 @@ msgstr "مشترک" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "برنامه‌ها" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6793,8 +6875,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -7504,12 +7586,14 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 #, fuzzy #| msgid "yes" msgid "Yes" msgstr "بله" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7785,8 +7869,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -8138,28 +8223,6 @@ msgstr "" msgid "Fingerprint" msgstr "اثر انگشت SSH" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -#, fuzzy -#| msgid "Partition expanded successfully." -msgid "Logged out successfully." -msgstr "پارتیشن با موفقیت بزرگ شد." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8973,13 +9036,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "برنامه نصب شد." -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9216,35 +9272,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9253,109 +9313,109 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 #, fuzzy #| msgid "Invalid server name" msgid "Enter a valid username." msgstr "نام کاربری معتبر نیست" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 #, fuzzy #| msgid "Administrator Account" msgid "Authorization Password" msgstr "حساب مدیر" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 #, fuzzy #| msgid "Show password" msgid "Invalid password." msgstr "رمز را نشان بده" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, fuzzy, python-brace-format #| msgid "Creating LDAP user failed." msgid "Creating LDAP user failed: {error}" msgstr "ساختن کاربر LDAP شکست خورد." -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, fuzzy, python-brace-format #| msgid "Failed to add new user to admin group." msgid "Failed to add new user to {group} group: {error}" msgstr "افزودن کاربر به گروه مدیران شکست خورد." -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete" msgid "Delete user" msgstr "پاک‌کردن" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 #, fuzzy #| msgid "Failed to add new user to admin group." msgid "Failed to delete user." msgstr "افزودن کاربر به گروه مدیران شکست خورد." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 #, fuzzy #| msgid "Failed to add new user to admin group." msgid "Failed to change user status." msgstr "افزودن کاربر به گروه مدیران شکست خورد." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, fuzzy, python-brace-format #| msgid "Failed to add new user to admin group." msgid "Failed to add new user to admin group: {error}" msgstr "افزودن کاربر به گروه مدیران شکست خورد." -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "حساب کاربری ساخته شد، شما الان وارد سیستم هستید" @@ -9369,6 +9429,10 @@ msgstr "پاک‌کردن %(name)s" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9382,7 +9446,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -9431,7 +9495,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -9440,6 +9504,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, fuzzy, python-format #| msgid "Delete Wiki or Blog %(name)s" @@ -9480,31 +9548,37 @@ msgstr "پاک‌کردن" msgid "Cancel" msgstr "انصراف" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +#, fuzzy +#| msgid "Partition expanded successfully." +msgid "Logged out successfully." +msgstr "پارتیشن با موفقیت بزرگ شد." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "{name} deleted." msgid "User %(username)s deleted." msgstr "{name} پاک شد." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -9533,59 +9607,72 @@ msgstr "" msgid "Invalid key." msgstr "نام میزبان معتبر نیست" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Invalid server name" +msgid "Enter a valid IPv4 address." +msgstr "نام کاربری معتبر نیست" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 #, fuzzy #| msgid "Publish Key" msgid "Public Key" msgstr "انتشار کلید" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 #, fuzzy #| msgid "Published key to keyserver." msgid "Public key of the server" msgstr "کلید در پایگاه کلیدها منتشر شد." -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9593,22 +9680,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9623,75 +9710,110 @@ msgstr "برنامهٔ DNS متغیر (Dynamic DNS Client)" msgid "As a Server" msgstr "سرور وب" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Mount Point" +msgid "Endpoint(s)" +msgstr "نشانی سوارشدن (mount point)" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "%(box_name)s Setup" +msgid "%(box_name)s VPN IP for services" +msgstr "راه‌اندازی %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 #, fuzzy #| msgid "Create Connection" msgid "Last Connected Time" msgstr "ساختن اتصال" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Partition expanded successfully." +msgid "WireGuard server not started yet." +msgstr "پارتیشن با موفقیت بزرگ شد." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 #, fuzzy msgid "As a Client" msgstr "برنامهٔ DNS متغیر (Dynamic DNS Client)" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" msgid "Add Connection to Server" msgstr "افزودن اتصال" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 #, fuzzy msgid "Add Client" msgstr "برنامهٔ DNS متغیر (Dynamic DNS Client)" @@ -9747,18 +9869,22 @@ msgstr "اثر انگشت SSH" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9784,80 +9910,94 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 #, fuzzy msgid "Allowed Client" msgstr "برنامهٔ DNS متغیر (Dynamic DNS Client)" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 #, fuzzy #| msgid "Update setup" msgid "Updated client." msgstr "به‌روزرسانی وضعیت" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 #, fuzzy msgid "Modify Client" msgstr "برنامهٔ DNS متغیر (Dynamic DNS Client)" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 #, fuzzy #| msgid "Delete" msgid "Delete Allowed Client" msgstr "پاک‌کردن" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 #, fuzzy #| msgid "{name} deleted." msgid "Client deleted." msgstr "{name} پاک شد." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 #, fuzzy #| msgid "Connection Type" msgid "Connection to Server" msgstr "نوع اتصال" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 #, fuzzy #| msgid "Update setup" msgid "Updated server." msgstr "به‌روزرسانی وضعیت" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 #, fuzzy #| msgid "Edit Connection" msgid "Modify Connection to Server" msgstr "ویرایش اتصال" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "پاک‌کردن اتصال" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "{name} deleted." msgid "Server deleted." msgstr "{name} پاک شد." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Partition expanded successfully." +msgid "WireGuard server started successfully." +msgstr "پارتیشن با موفقیت بزرگ شد." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10021,6 +10161,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -10187,38 +10343,38 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 #, fuzzy msgid " Apps" msgstr "برنامه‌ها" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "زبان" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -10314,11 +10470,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "اعلان‌ها" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -10478,12 +10638,12 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" @@ -11371,9 +11531,6 @@ msgstr "" #~ msgid "Select the domain name" #~ msgstr "نام دامنه معتبر نیست" -#~ msgid "Applications" -#~ msgstr "برنامه‌ها" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/fake/LC_MESSAGES/django.po b/plinth/locale/fake/LC_MESSAGES/django.po index bea1fb593..447b352a8 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2016-01-31 22:24+0530\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Plinth Developers SSH key-based authentication is not yet " -"possible." -msgstr "" +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Required for password-based authentication." +msgstr "USE HTTP BASIC AUTHENTICATION" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "USE HTTP BASIC AUTHENTICATION" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 #, fuzzy #| msgid "reStore" @@ -571,18 +603,18 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, fuzzy, python-brace-format #| msgid "{box_name} Manual" msgid "{box_name} storage" msgstr "{box_name} MANUAL" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 #, fuzzy #| msgid "PageKite Account" msgid "Create a new backup" @@ -634,7 +666,23 @@ msgstr "EXISTING CUSTOM SERVICES" msgid "Existing Backups" msgstr "EXISTING CUSTOM SERVICES" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -659,7 +707,7 @@ msgstr "EXISTING CUSTOM SERVICES" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -667,7 +715,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 #, fuzzy #| msgid "Create Connection" msgid "Create Location" @@ -806,125 +854,125 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "" + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "" + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error installing packages: {string} {details}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "ERROR INSTALLING PACKAGES: {string} {details}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "" -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 #, fuzzy #| msgid "PageKite Account" msgid "Schedule Backups" msgstr "PAGEKITE ACCOUNT" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "" -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 #, fuzzy #| msgid "Delete" msgid "Delete Archive" msgstr "DELETE" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 #, fuzzy #| msgid "{name} deleted." msgid "Archive deleted." msgstr "{name} DELETED." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 #, fuzzy #| msgid "Password changed successfully." msgid "Upload successful." msgstr "PASSWORD CHANGED SUCCESSFULLY." -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "" -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "" -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "" -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 #, fuzzy #| msgid "Create User" msgid "Create backup repository" msgstr "CREATE USER" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 #, fuzzy #| msgid "Create User" msgid "Added new repository." msgstr "CREATE USER" -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 #, fuzzy #| msgid "Create User" msgid "Added new remote SSH repository." msgstr "CREATE USER" -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "" -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "" -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "" - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "" - -#: plinth/modules/backups/views.py:465 -#, fuzzy -#| msgid "Error installing packages: {string} {details}" -msgid "Error establishing connection to server: {}" -msgstr "ERROR INSTALLING PACKAGES: {string} {details}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 #, fuzzy #| msgid "packages not found" msgid "Repository removed." msgstr "PACKAGES NOT FOUND" -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -998,7 +1046,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 #, fuzzy #| msgid "Transmission BitTorrent" msgid "Permissions" @@ -1095,8 +1143,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "DELETE" @@ -1176,6 +1224,7 @@ msgstr "ENABLE DYNAMIC DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 #, fuzzy #| msgid "Service" msgid "Server" @@ -1503,7 +1552,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -2186,7 +2235,7 @@ msgid "Invalid domain name" msgstr "INVALID DOMAIN NAME" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "USERNAME" @@ -2504,8 +2553,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "STATUS" @@ -2565,8 +2614,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3519,8 +3568,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "ABOUT" @@ -4112,7 +4161,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -5321,9 +5370,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "EDIT" @@ -5846,6 +5895,7 @@ msgstr "DELETE CONNECTION" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "CONNECTION" @@ -6057,6 +6107,7 @@ msgid "Edit Connection" msgstr "EDIT CONNECTION" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -6247,8 +6298,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6691,6 +6742,37 @@ msgstr "ADD SERVICE" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "APPLICATIONS" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, fuzzy, python-brace-format #| msgid "" @@ -7077,8 +7159,8 @@ msgstr "" msgid "Shutdown" msgstr "SHUT DOWN NOW" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 #, fuzzy #| msgid "Restart Now" msgid "Restart" @@ -7876,12 +7958,14 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 #, fuzzy #| msgid "yes" msgid "Yes" msgstr "YES" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -8171,8 +8255,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -8531,28 +8616,6 @@ msgstr "" msgid "Fingerprint" msgstr "GPG FINGERPRINT" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "LOGIN" - -#: plinth/modules/sso/views.py:86 -#, fuzzy -#| msgid "Password changed successfully." -msgid "Logged out successfully." -msgstr "PASSWORD CHANGED SUCCESSFULLY." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9419,13 +9482,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "AUTOMATIC UPGRADES ENABLED" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9682,35 +9738,39 @@ msgstr "" msgid "Users and Groups" msgstr "USERS AND GROUPS" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "CHECK LDAP ENTRY \"{search_item}\"" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 #, fuzzy #| msgid "" #| "Select which services should be available to the new user. The user will " @@ -9731,52 +9791,52 @@ msgstr "" "ABLE TO LOG IN TO ALL SERVICES. THEY CAN ALSO LOG IN TO THE SYSTEM THROUGH " "SSH AND HAVE ADMINISTRATIVE PRIVILEGES (SUDO)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 #, fuzzy #| msgid "Invalid server name" msgid "Enter a valid username." msgstr "INVALID SERVER NAME" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 #, fuzzy #| msgid "Administrator Account" msgid "Authorization Password" msgstr "ADMINISTRATOR ACCOUNT" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 #, fuzzy #| msgid "Show password" msgid "Invalid password." msgstr "SHOW PASSWORD" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, fuzzy, python-brace-format #| msgid "Creating LDAP user failed." msgid "Creating LDAP user failed: {error}" msgstr "CREATING LDAP USER FAILED." -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, fuzzy, python-brace-format #| msgid "Failed to add new user to {group} group." msgid "Failed to add new user to {group} group: {error}" msgstr "FAILED TO ADD NEW USER TO {group} GROUP." -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9786,57 +9846,57 @@ msgstr "" "SYSTEM WITHOUT USING A PASSWORD. YOU MAY ENTER MULTIPLE KEYS, ONE ON EACH " "LINE. BLANK LINES AND LINES STARTING WITH # WILL BE IGNORED." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete User" msgid "Delete user" msgstr "DELETE USER" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 #, fuzzy #| msgid "Failed to add user to group." msgid "Failed to delete user." msgstr "FAILED TO ADD USER TO GROUP." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "RENAMING LDAP USER FAILED." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "FAILED TO REMOVE USER FROM GROUP." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "FAILED TO ADD USER TO GROUP." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 #, fuzzy #| msgid "Failed to add user to group." msgid "Failed to change user status." msgstr "FAILED TO ADD USER TO GROUP." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "CHANGING LDAP USER PASSWORD FAILED." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, fuzzy, python-brace-format #| msgid "Failed to add new user to admin group." msgid "Failed to add new user to admin group: {error}" msgstr "FAILED TO ADD NEW USER TO ADMIN GROUP." -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "USER ACCOUNT CREATED, YOU ARE NOW LOGGED IN" @@ -9852,6 +9912,10 @@ msgstr "CREATE USER" msgid "App permissions" msgstr "TRANSMISSION BITTORRENT" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9865,7 +9929,7 @@ msgstr "SAVE PASSWORD" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "CREATE USER" @@ -9914,7 +9978,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "USERS" @@ -9923,6 +9987,10 @@ msgstr "USERS" msgid "Edit user %(username)s" msgstr "EDIT USER %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "LOGIN" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9964,31 +10032,37 @@ msgstr "DELETE USER" msgid "Cancel" msgstr "CANCEL" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +#, fuzzy +#| msgid "Password changed successfully." +msgid "Logged out successfully." +msgstr "PASSWORD CHANGED SUCCESSFULLY." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "USER %(username)s CREATED." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "USER %(username)s UPDATED." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "EDIT USER" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "User %(username)s created." msgid "User %(username)s deleted." msgstr "USER %(username)s CREATED." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "CHANGE PASSWORD" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "PASSWORD CHANGED SUCCESSFULLY." @@ -10017,59 +10091,72 @@ msgstr "" msgid "Invalid key." msgstr "INVALID KITE NAME" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Invalid server name" +msgid "Enter a valid IPv4 address." +msgstr "INVALID SERVER NAME" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 #, fuzzy #| msgid "Publish Key" msgid "Public Key" msgstr "PUBLISH KEY" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 #, fuzzy #| msgid "Published key to keyserver." msgid "Public key of the server" msgstr "PUBLISHED KEY TO KEYSERVER." -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10077,22 +10164,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -10108,76 +10195,111 @@ msgstr "QUASSEL IRC CLIENT" msgid "As a Server" msgstr "WEB SERVER" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "%(box_name)s Setup" +msgid "%(box_name)s VPN IP for services" +msgstr "%(box_name)s SETUP" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 #, fuzzy #| msgid "Create Connection" msgid "Last Connected Time" msgstr "CREATE CONNECTION" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "PASSWORD CHANGED SUCCESSFULLY." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +#, fuzzy +#| msgid "Standard Services" +msgid "Start WireGuard Server" +msgstr "STANDARD SERVICES" + +#: plinth/modules/wireguard/templates/wireguard.html:108 #, fuzzy #| msgid "IRC Client (Quassel)" msgid "As a Client" msgstr "IRC CLIENT (QUASSEL)" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" msgid "Add Connection to Server" msgstr "ADD CONNECTION" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 #, fuzzy #| msgid "Quassel IRC Client" msgid "Add Client" @@ -10236,18 +10358,22 @@ msgstr "SERVER DOMAIN" msgid "Server public key:" msgstr "SERVER PORT" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -10273,88 +10399,102 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 #, fuzzy #| msgid "This service already exists" msgid "Client with public key already exists" msgstr "THIS SERVICE ALREADY EXISTS" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 #, fuzzy #| msgid "Email Client (Roundcube)" msgid "Allowed Client" msgstr "EMAIL CLIENT (ROUNDCUBE)" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 #, fuzzy #| msgid "Update setup" msgid "Updated client." msgstr "UPDATE SETUP" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 #, fuzzy #| msgid "Email Client (Roundcube)" msgid "Modify Client" msgstr "EMAIL CLIENT (ROUNDCUBE)" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 #, fuzzy #| msgid "Delete" msgid "Delete Allowed Client" msgstr "DELETE" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 #, fuzzy #| msgid "{name} deleted." msgid "Client deleted." msgstr "{name} DELETED." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 #, fuzzy #| msgid "packages not found" msgid "Client not found" msgstr "PACKAGES NOT FOUND" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 #, fuzzy #| msgid "Added custom service" msgid "Added new server." msgstr "ADDED CUSTOM SERVICE" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 #, fuzzy #| msgid "Connection Type" msgid "Connection to Server" msgstr "CONNECTION TYPE" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 #, fuzzy #| msgid "Update setup" msgid "Updated server." msgstr "UPDATE SETUP" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 #, fuzzy #| msgid "Edit Connection" msgid "Modify Connection to Server" msgstr "EDIT CONNECTION" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "DELETE CONNECTION" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "{name} deleted." msgid "Server deleted." msgstr "{name} DELETED." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "PASSWORD CHANGED SUCCESSFULLY." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10524,6 +10664,22 @@ msgstr "CONFIGURATION" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 #, fuzzy #| msgid "Install" @@ -10720,43 +10876,43 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 #, fuzzy #| msgid "Apps" msgid " Apps" msgstr "APPS" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 #, fuzzy #| msgid "System" msgid " System" msgstr "SYSTEM" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "CHANGE PASSWORD" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 #, fuzzy #| msgid "Shut Down Now" msgid "Shut down" msgstr "SHUT DOWN NOW" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "LOG OUT" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "LANGUAGE" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "LOG IN" @@ -10856,13 +11012,17 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 #, fuzzy #| msgid "No certficate" msgid "Notifications" msgstr "NO CERTFICATE" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -11034,12 +11194,12 @@ msgstr "" msgid "Setting unchanged" msgstr "SETTING UNCHANGED" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" @@ -12122,9 +12282,6 @@ msgstr "" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "YOU DON'T HAVE ANY CUSTOM SERVICES ENABLED" -#~ msgid "Standard Services" -#~ msgstr "STANDARD SERVICES" - #~ msgid "Tor is running" #~ msgstr "TOR IS RUNNING" @@ -12453,9 +12610,6 @@ msgstr "" #~ " (Transmission)" #~ msgstr "BITTORRENT (TRANSMISSION)" -#~ msgid "Applications" -#~ msgstr "APPLICATIONS" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/fr/LC_MESSAGES/django.po b/plinth/locale/fr/LC_MESSAGES/django.po index 79f748345..15bc36254 100644 --- a/plinth/locale/fr/LC_MESSAGES/django.po +++ b/plinth/locale/fr/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2025-12-19 20:00+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-02-18 15:09+0000\n" "Last-Translator: Coucouf \n" "Language-Team: French \n" @@ -17,7 +17,7 @@ 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 5.15.1\n" +"X-Generator: Weblate 5.16.1-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -106,15 +106,15 @@ msgstr "Langue de cette interface web" msgid "Use the language preference set in the browser" msgstr "Utiliser la langue du navigateur" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Accueil" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Applis" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "Système" @@ -137,36 +137,40 @@ msgstr "Sécurité" msgid "Administration" msgstr "Administration" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "Le système est peut-être surchargé. Veuillez réessayer ultérieurement." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "Page introuvable : {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "Erreur d’exécution de l’opération." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "Erreur lors du chargement de la page." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Serveur HTTP Apache" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Serveur web" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "Interface web de la {box_name} (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -215,16 +219,16 @@ msgstr "Local" msgid "mDNS" msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "Sauvegardes permet de créer et de gérer des archives de sauvegarde." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Sauvegardes" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -233,19 +237,19 @@ msgstr "" "données. Il est préférable d’utiliser un emplacement de sauvegarde distant " "et chiffré, ou un disque externe additionnel." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "Activer la planification des sauvegardes" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "Aller à {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -254,7 +258,7 @@ msgstr "" "Une sauvegarde régulière a échoué après {error_count} tentatives. Le dernier " "message d’erreur était : {error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Erreur pendant la sauvegarde" @@ -409,7 +413,9 @@ msgid "Passphrase" msgstr "Phrase secrète" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "" "Phrase secrète ; nécessaire uniquement dans le cas où le chiffrement est " "utilisé." @@ -451,29 +457,57 @@ msgstr "" "chemin/vers/le/dépôt/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Mode Authentification" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "L’authentification sur le serveur distant a échoué." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "nécessite une authentification" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Désactiver l’authentification par mot de passe" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Mot de passe du serveur SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Mot de passe du serveur SSH.
L’authentification par clé SSH n’est pas " -"encore prise en charge." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Désactiver l’authentification par mot de passe" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Désactiver l’authentification par mot de passe" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Ce dépôt de sauvegarde distant existe déjà." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Sélectionnez une clé publique SSH vérifiée" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Restaurer" @@ -554,17 +588,17 @@ msgid "Not enough space left on the disk or remote location." msgstr "" "Pas assez d'espace libre restant sur le disque ou sur l'emplacement distant." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Le dépôt existant n’est pas chiffré." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Stockage de la {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Créer une nouvelle sauvegarde" @@ -600,7 +634,23 @@ msgstr "Ajouter un emplacement de sauvegarde distant" msgid "Existing Backups" msgstr "Sauvegardes existantes" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -625,7 +675,7 @@ msgstr "Sauvegardes existantes" msgid "Caution:" msgstr "Attention :" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -637,7 +687,7 @@ msgstr "" "%(box_name)s, vous aurez besoin de ces informations de connexion SSH et, le " "cas échéant, de la phrase secrète de chiffrement." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Créer un emplacement" @@ -771,107 +821,109 @@ msgstr "" msgid "Verify Host" msgstr "Vérifier le serveur" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Planification des sauvegardes mise à jour." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Planifier des sauvegardes" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Archive créée." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Supprimer l’archive" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Archive supprimée." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Téléverser et restaurer une sauvegarde" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Téléversement réussi." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "Aucun fichier de sauvegarde n’a été trouvé." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Restaurer du fichier téléversé" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "Les fichiers ont été restaurés de la sauvegarde." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "Aucun disque supplémentaire n’est disponible pour ajouter un dépôt." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Créer un dépôt de sauvegarde" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "Nouveau dépôt ajouté." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Créer un dépôt de sauvegarde distant" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Ajouter un nouveau dépôt SSH distant." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "Vérifier la clé d’authenticité du serveur SSH" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "Serveur SSH déjà vérifié." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "Serveur SSH vérifié." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "La clé publique d’authenticité du serveur SSH n’a pu être vérifiée." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "L’authentification sur le serveur distant a échoué." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Erreur lors de la connexion au serveur : {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Planification des sauvegardes mise à jour." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Planifier des sauvegardes" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Archive créée." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Supprimer l’archive" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Archive supprimée." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Téléverser et restaurer une sauvegarde" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Téléversement réussi." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "Aucun fichier de sauvegarde n’a été trouvé." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Restaurer du fichier téléversé" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "Les fichiers ont été restaurés de la sauvegarde." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "Aucun disque supplémentaire n’est disponible pour ajouter un dépôt." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Créer un dépôt de sauvegarde" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Nouveau dépôt ajouté." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Créer un dépôt de sauvegarde distant" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Ajouter un nouveau dépôt SSH distant." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "Vérifier la clé d’authenticité du serveur SSH" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "Serveur SSH déjà vérifié." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "Serveur SSH vérifié." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Dépôt supprimé." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Supprimer ce dépôt" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Dépôt supprimé. Les sauvegardes n’ont pas été supprimées." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Le démontage a échoué !" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Le montage a échoué" @@ -958,7 +1010,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Autorisations" @@ -1046,8 +1098,8 @@ msgstr "Listing" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Supprimer" @@ -1126,6 +1178,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Serveur" @@ -1434,13 +1487,20 @@ msgid "Webserver Home Page" msgstr "Page d’accueil du serveur web" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Sélectionnez la page affichée par défaut lorsque quelqu’un visite votre " "{box_name} sur le Web. Vous pouvez typiquement utiliser cette option pour " @@ -2062,7 +2122,7 @@ msgid "Invalid domain name" msgstr "Nom de domaine invalide" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Nom d’utilisateur" @@ -2354,8 +2414,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "État" @@ -2420,9 +2480,13 @@ msgstr "" "automatiquement, pointant vers le premier compte administrateur." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "L’appli Roundcube propose une " "interface Web pour accéder à vos courriels." @@ -3348,8 +3412,8 @@ msgstr "Partager vos impressions" msgid "Contribute" msgstr "Participer" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "À propos" @@ -4023,7 +4087,7 @@ msgstr "Conférence Web" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Information de licence JavaScript" @@ -4767,8 +4831,8 @@ msgstr "Activer PVP" #: plinth/modules/minetest/forms.py:26 msgid "Enabling Player Vs Player will allow players to damage other players." msgstr "" -"Activer le paramètre joueur contre joueur (player versus player, PVP), " -"permettra aux joueurs d’infliger des dommages aux autres joueurs." +"Activer le mode joueur contre joueur (player versus player, PVP), permettra " +"aux joueurs d’infliger des dommages aux autres joueurs." #: plinth/modules/minetest/forms.py:30 msgid "Enable damage" @@ -5263,9 +5327,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Modifier" @@ -5844,6 +5908,7 @@ msgstr "Supprimer la connexion" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Connexion" @@ -6056,6 +6121,7 @@ msgid "Edit Connection" msgstr "Modifier la connexion" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Erreur :" @@ -6269,11 +6335,17 @@ msgstr "" "%(box_name)s puisse fournir ses services." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Si vous n’avez pas le contrôle de votre routeur, choisissez l’option de ne " "pas le configurer. Pour plus d’informations sur les manières de contourner " @@ -6687,6 +6759,40 @@ msgstr "" "Échec de la mise à jour du mot passe. Veuillez choisir un mot de passe plus " "sûr." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Applications" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Clés SSH autorisées" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Clés SSH autorisées" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -7024,8 +7130,8 @@ msgstr "Redémarrer" msgid "Shutdown" msgstr "Éteindre" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Redémarrer" @@ -7187,7 +7293,7 @@ msgstr "Privoxy" #: plinth/modules/privoxy/__init__.py:119 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" -msgstr "Accéder à l’URL {url} avec le mandataire {proxy} sur tcp{kind}" +msgstr "Accéder à l’URL {url} via le mandataire {proxy} sur tcp{kind}" #: plinth/modules/privoxy/manifest.py:10 msgid "Ad blocker" @@ -7424,11 +7530,11 @@ msgid "" "uncheck this option. When unchecked, a text entry field is added to the " "login page so the user can specify to which account they wish to connect." msgstr "" -"Lorsque l'option est activée, les utilisateurs ne peuvent que lire et " +"Lorsque l’option est activée, les utilisateurs ne peuvent que lire et " "envoyer des courriels par cette {box_name}. Si vous souhaitez utiliser " -"Roundcube avec un compte de courriel externe tel que GMail, vous devez " -"décocher cette option. Lorsqu'elle est décochée, un champ d'entrée de texte " -"est ajouté à la page de connexion pour que l'utilisateur puisse indiquer à " +"Roundcube avec un compte de courriel externe tel que Gmail, vous devez " +"décocher cette option. Lorsqu’elle est décochée, un champ supplémentaire est " +"ajouté au formulaire de connexion pour que l’utilisateur puisse indiquer à " "quel compte il veut se connecter." #: plinth/modules/roundcube/manifest.py:23 @@ -7850,10 +7956,12 @@ msgid "N/A" msgstr "Non applicable" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Oui" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Non" @@ -8145,10 +8253,17 @@ msgstr "" "paramétrage qui suit." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Les instantanés ne fonctionnent actuellement que sur des systèmes de " "fichiers btrfs et sur la partition racine uniquement. Les instantanés ne " @@ -8507,27 +8622,6 @@ msgstr "Algorithme" msgid "Fingerprint" msgstr "Empreinte" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Authentification unique" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" -"Saisissez les lettres sur l'image pour continuer vers la page de connexion" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "Continuer vers la page de connexion" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "S’identifier" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "Déconnecté avec succès." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9459,13 +9553,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Aller à la mise à niveau de la distribution" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "Fermer" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9481,8 +9568,8 @@ msgid "" msgstr "" "Votre %(box_name)s reçoit les mises à jour de sécurité, les correctifs " "importants et certaines fonctionnalités via les mises à jour courantes du " -"système. Cependant pour assurer un cycle de vie logiciel plus long aux %" -"(box_name)s, le système d’exploitation doit recevoir une mise à niveau " +"système. Cependant pour assurer un cycle de vie logiciel plus long aux " +"%(box_name)s, le système d’exploitation doit recevoir une mise à niveau " "majeure de la distribution tous les deux ans environ. Cette mise à niveau " "apporte des fonctionnalités et modifications majeures, et il peut arriver " "que certaines anciennes fonctionnalités disparaissent. Veuillez consulter le " @@ -9747,37 +9834,42 @@ msgstr "" msgid "Users and Groups" msgstr "Utilisateurs et groupes" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Accès à tous les services et à la configuration du système" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Vérification de l’entrée LDAP « {search_item} »" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Vérifier la configuration nslcd \"{key} {value}\"" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Vérifier la configuration nsswitch \"{database}\"" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" +"Saisissez les lettres sur l'image pour continuer vers la page de connexion" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "Le nom d’utilisateur est déjà pris ou est réservé." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" "Optionnel. Utilisé afin d'envoyer des courriels pour réinitialiser le mot de " "passe et pour les notifications importantes." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9792,22 +9884,22 @@ msgstr "" "peuvent également se connecter au système avec Secure Shell (SSH) et obtenir " "les privilèges d’administrateur (sudo)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "Entrez un nom d’utilisateur valide." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "Requis. 150 caractères ou moins. Lettres anglaises, chiffres et @/./-/_ " "uniquement." -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "Mot de passe actuel" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." @@ -9815,25 +9907,25 @@ msgstr "" "Veuillez saisir votre mot de passe de l’utilisateur « {user} » pour " "confirmer ces modifications de compte." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "Mot de passe incorrect." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "La création de l’utilisateur LDAP a échoué : {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "L’ajout du nouvel utilisateur au groupe {group} a échoué : {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "Clés SSH autorisées" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9844,11 +9936,11 @@ msgstr "" "plusieurs clefs, une sur chaque ligne. Les lignes vides et celles commençant " "par # sont ignorées." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "Supprimer l'utilisateur" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -9857,40 +9949,40 @@ msgstr "" "relatifs à l'utilisateur. L'effacement des fichiers peut être évité en " "définissant le compte de l'utilisateur comme inactif." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "Échec de la suppression de l'utilisateur." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "Le changement du nom de l’utilisateur LDAP a échoué." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Échec du retrait de l’utilisateur du groupe." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Échec de l’ajout de l’utilisateur au groupe." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "Échec du paramétrage des clefs SSH." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "Échec du changement de statut de l’utilisateur." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "Le changement du mot de passe de l’utilisateur LDAP a échoué." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "L’ajout du nouvel utilisateur au groupe admin a échoué : {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Compte utilisateur créé, vous êtes maintenant connecté" @@ -9902,6 +9994,10 @@ msgstr "Gestion des comptes" msgid "App permissions" msgstr "Autorisations des applis" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "Continuer vers la page de connexion" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9915,7 +10011,7 @@ msgstr "Sauvegarder le mot de passe" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Créer un utilisateur" @@ -9968,7 +10064,7 @@ msgid "Skip this step" msgstr "Passer cette étape" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Utilisateurs" @@ -9977,6 +10073,10 @@ msgstr "Utilisateurs" msgid "Edit user %(username)s" msgstr "Paramètres du compte %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "S’identifier" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -10020,30 +10120,34 @@ msgstr "Supprimer l'utilisateur et les fichiers" msgid "Cancel" msgstr "Annuler" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Déconnecté avec succès." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Utilisateur %(username)s créé." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Utilisateur %(username)s mis à jour." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Modification de l’utilisateur" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "L'utilisateur %(username)s supprimé." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Changer Mot de Passe" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Le mot de passe a été changé." @@ -10077,14 +10181,25 @@ msgstr "" msgid "Invalid key." msgstr "Clé invalide." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Entrez un nom d’utilisateur valide." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Clé publique" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10092,11 +10207,11 @@ msgstr "" "Clé publique du pair. Exemple : " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Point de terminaison du serveur" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -10104,11 +10219,11 @@ msgstr "" "Nom de domaine et port sous la forme « ip:port ». Par exemple : " "demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Clé publique du serveur" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10116,25 +10231,32 @@ msgstr "" "Il s’agit d’une longue chaîne de caractères fournie par l’opérateur du " "serveur. Par exemple : MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Adresse IP du client fournie par le serveur" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "Adresse IP attribuée à cette machine sur le réseau privé virtuel VPN une " "fois connectée au serveur distant. Cette valeur est généralement fournie par " "l’opérateur du serveur. Par exemple : 192.18.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Clé privée de cette machine" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10147,11 +10269,11 @@ msgstr "" "serveur insistent pour fournir eux même cette clé. Exemple : " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Clé pré-partagée" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10162,11 +10284,11 @@ msgstr "" "clé vous a été fournie. Exemple : " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Utiliser cette connexion pour y envoyer tout le trafic sortant" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "À activer lorsque le service de réseau privé virtuel VPN doit être utilisé " @@ -10180,72 +10302,108 @@ msgstr "Client VPN" msgid "As a Server" msgstr "En tant que serveur" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Endpoints for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Points de terminaison de cette %(box_name)s :" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Serveur distant" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Vers les ports %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Pairs autorisés à se connecter à ce serveur :" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "IP autorisées" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Dernière connexion" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" "Aucun pair n’a été configuré pour se connecter à la %(box_name)s pour " "l’instant." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Clé publique de cette %(box_name)s :" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Pas encore configuré." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Ajouter un nouveau pair" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Ajouter un client autorisé" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "WireGuard server started successfully." +msgid "WireGuard server not started yet." +msgstr "Le serveur WireGuard a été démarré." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "Démarrer le serveur WireGuard" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "En tant que client" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Serveurs auxquels la %(box_name)s se connecte :" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Serveur distant" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Aucune connexion vers un serveur distant n’est encore configurée." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Ajouter un nouveau serveur" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Ajouter une connexion à un serveur" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "Adresse IP assignée à ce client" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Ajouter un client" @@ -10289,25 +10447,29 @@ msgstr "Clé pré-partagée :" #: plinth/modules/wireguard/templates/wireguard_show_client.html:33 msgid "Server endpoints:" -msgstr "Points de terminaisons du serveur :" +msgstr "Points de terminaison du serveur :" #: plinth/modules/wireguard/templates/wireguard_show_client.html:41 #: plinth/modules/wireguard/templates/wireguard_show_server.html:28 msgid "Server public key:" msgstr "Clé publique du serveur :" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Données envoyées :" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Données reçues :" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Dernier établissement d’une liaison (« handshake ») :" @@ -10334,62 +10496,74 @@ msgstr "Clé publique de cette machine :" msgid "IP address of this machine:" msgstr "Adresse IP de cette machine :" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Nouveau client ajouté." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Un client existe déjà avec cette clé publique" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Client autorisé" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Client mis à jour." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Modifier le client" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Supprimer un client autorisé" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Client supprimé." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Client introuvable" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Nouveau serveur ajouté." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Connexion au seveur" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Serveur mis à jour." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Modifier la connexion à un serveur" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Supprimer la connexion à un serveur" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Serveur supprimé." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "Le serveur WireGuard a été démarré." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "Échec du démarrage du serveur WireGuard : {}" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10588,6 +10762,24 @@ msgstr "fichier de configuration : {file}" msgid "Timeout waiting for package manager" msgstr "Aucune réponse du gestionnaire de paquets" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "demande d’adresse en cours" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Installation de l’application" @@ -10630,7 +10822,7 @@ msgstr "Erreur lors de l'exécution des diagnostics : {error}" #: plinth/setup.py:158 msgid "Skipping repair, no failed checks" -msgstr "Réparation ignorée, aucune vérification n'a échoué" +msgstr "Réparation ignorée : aucun problème identifié lors des vérifications" #: plinth/setup.py:166 #, python-brace-format @@ -10757,35 +10949,35 @@ msgstr "" "et de la maîtrise de vos données. C’est un logiciel libre qui vous laisse " "installer et gérer facilement des applis de serveur." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Accueil" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Applis" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Système" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Changer le mot de passe" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Éteindre" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Se déconnecter" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Choisir la langue" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "S’identifier" @@ -10886,11 +11078,15 @@ msgstr "" "Actuellement les interfaces-réseau suivantes sont configurées comme " "internes : %(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Fermer" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Notifications" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "Il y a %(time_since)s" @@ -11056,15 +11252,32 @@ msgstr "Ici" msgid "Setting unchanged" msgstr "Paramètre inchangé" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "avant la désinstallation de {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Mot de passe du serveur SSH.
L’authentification par clé SSH n’est pas " +#~ "encore prise en charge." + +#~ msgid "Single Sign On" +#~ msgstr "Authentification unique" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Clé publique de cette %(box_name)s :" + +#~ msgid "Not configured yet." +#~ msgstr "Pas encore configuré." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12739,9 +12952,6 @@ msgstr "Gujarati" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "Vous n'avez pas de Services Personnalisés actifs" -#~ msgid "Standard Services" -#~ msgstr "Services Standards" - #~ msgid "" #~ "When enabled, Syncthing's web interface will be available from /syncthing. Desktop and mobile " @@ -13319,9 +13529,6 @@ msgstr "Gujarati" #~ "BitTorrent\n" #~ " (Transmission)" -#~ msgid "Applications" -#~ msgstr "Applications" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/gl/LC_MESSAGES/django.po b/plinth/locale/gl/LC_MESSAGES/django.po index e66c6c40e..9301bd228 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2022-12-30 10:51+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Galician SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -513,17 +535,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -559,7 +581,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -584,7 +622,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -592,7 +630,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -708,107 +746,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -878,7 +916,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -963,8 +1001,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1034,6 +1072,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1318,7 +1357,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1859,7 +1898,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2127,8 +2166,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2174,8 +2213,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3010,8 +3049,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Acerca de" @@ -3557,7 +3596,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4604,9 +4643,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5080,6 +5119,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5283,6 +5323,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5465,8 +5506,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5842,6 +5883,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application installed." +msgid "Application" +msgstr "Aplicativo instalado." + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6132,8 +6204,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6798,10 +6870,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7051,8 +7125,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7367,26 +7442,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8157,13 +8212,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8390,35 +8438,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8427,94 +8479,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8526,6 +8578,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8539,7 +8595,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8581,7 +8637,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8590,6 +8646,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8626,30 +8686,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8676,55 +8740,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8732,22 +8807,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8761,70 +8836,100 @@ msgstr "" msgid "As a Server" msgstr "Servidor web" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8873,18 +8978,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8908,62 +9017,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9121,6 +9242,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9283,35 +9420,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9404,11 +9541,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9560,12 +9701,12 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/gu/LC_MESSAGES/django.po b/plinth/locale/gu/LC_MESSAGES/django.po index 7f3d0282a..fa7a9c142 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2021-01-18 12:32+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Gujarati SSH key-based authentication is not yet " -"possible." -msgstr "" +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Required for password-based authentication." +msgstr "HTTP મૂળભૂત પ્રમાણીકરણનો ઉપયોગ કરો" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "HTTP મૂળભૂત પ્રમાણીકરણનો ઉપયોગ કરો" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -529,17 +561,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -579,7 +611,23 @@ msgstr "દસ્તાવેજીકરણ" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -604,7 +652,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -612,7 +660,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 #, fuzzy #| msgid "Documentation" msgid "Create Location" @@ -742,111 +790,111 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "" + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "" + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error installing application: {error}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "એપ્લીકેશન પ્રસ્થાપિત કરતાં ભૂલ થઇ છે: {error}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "" -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 msgid "Schedule Backups" msgstr "" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "" -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "" -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 msgid "Upload successful." msgstr "" -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "" -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "" -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "" -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 #, fuzzy #| msgid "Documentation" msgid "Added new repository." msgstr "દસ્તાવેજીકરણ" -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "" -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "" -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "" -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "" - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "" - -#: plinth/modules/backups/views.py:465 -#, fuzzy -#| msgid "Error installing application: {error}" -msgid "Error establishing connection to server: {}" -msgstr "એપ્લીકેશન પ્રસ્થાપિત કરતાં ભૂલ થઇ છે: {error}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "" -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -916,7 +964,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -1007,8 +1055,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1091,6 +1139,7 @@ msgstr "DNSSEC ને શરુ કરો" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1392,7 +1441,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -2024,7 +2073,7 @@ msgid "Invalid domain name" msgstr "અમાન્ય ક્ષેત્રીય નામ" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "વપરાશકર્તા નામ" @@ -2341,8 +2390,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "સ્થિતિ" @@ -2402,8 +2451,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3281,8 +3330,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "વિશે" @@ -3828,7 +3877,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4947,9 +4996,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5436,6 +5485,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5639,6 +5689,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5826,8 +5877,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6217,6 +6268,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application enabled" +msgid "Application" +msgstr "એપ્લિકેશન સક્ષમ કરો" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6511,8 +6593,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -7183,10 +7265,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7440,8 +7524,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7770,26 +7855,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8586,13 +8651,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "વપરાશકર્તા રજીસ્ટ્રેશન અક્ષમ છે" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8835,35 +8893,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8872,98 +8934,98 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 #, fuzzy #| msgid "Invalid server name" msgid "Enter a valid username." msgstr "અમાન્ય સર્વર નામ" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 #, fuzzy #| msgid "Show password" msgid "Invalid password." msgstr "પાસવર્ડ બતાવો" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8977,6 +9039,10 @@ msgstr "પાસવર્ડ" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8990,7 +9056,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -9032,7 +9098,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -9041,6 +9107,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9077,30 +9147,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -9129,57 +9203,70 @@ msgstr "" msgid "Invalid key." msgstr "અમાન્ય હોસ્ટનું નામ" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Invalid server name" +msgid "Enter a valid IPv4 address." +msgstr "અમાન્ય સર્વર નામ" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 #, fuzzy #| msgid "A list of IP addresses, separated by space" msgid "Client IP address provided by server" msgstr "જગ્યા થી અલગ પાડેલ IP સરનામાઓ ની યાદી" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9187,22 +9274,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9216,70 +9303,100 @@ msgstr "" msgid "As a Server" msgstr "ચેટ સર્વર" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -9334,18 +9451,22 @@ msgstr "સર્વર સંચાલન" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9371,72 +9492,84 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 #, fuzzy #| msgid "Update setup" msgid "Updated client." msgstr "સેટઅપ અપડેટ કરો" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 #, fuzzy #| msgid "Conversations" msgid "Connection to Server" msgstr "વાતચીત" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 #, fuzzy #| msgid "Update setup" msgid "Updated server." msgstr "સેટઅપ અપડેટ કરો" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 #, fuzzy #| msgid "Error installing application: {error}" msgid "Modify Connection to Server" msgstr "એપ્લીકેશન પ્રસ્થાપિત કરતાં ભૂલ થઇ છે: {error}" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Direct connection to the Internet." msgid "Delete Connection to Server" msgstr "ઇન્ટરનેટ સાથે સીધો જોડાણ." -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9596,6 +9729,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 #, fuzzy #| msgid "Install Apps" @@ -9764,39 +9913,39 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 #, fuzzy #| msgid "BitTorrent Web Client" msgid " Apps" msgstr "બીટ ટોરેન્ટ વેબ ક્લાયન્ટ" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "ભાષા" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9891,13 +10040,17 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 #, fuzzy #| msgid "Configuration" msgid "Notifications" msgstr "રૂપરેખાંકન" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -10056,12 +10209,12 @@ msgstr "" msgid "Setting unchanged" msgstr "સેટિંગ યથાવત" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" @@ -10431,9 +10584,6 @@ msgstr "" #~ msgid "Upload Password" #~ msgstr "પાસવર્ડ" -#~ msgid "Application enabled" -#~ msgstr "એપ્લિકેશન સક્ષમ કરો" - #~ msgid "Application disabled" #~ msgstr "એપ્લિકેશન અક્ષમ છે" diff --git a/plinth/locale/hi/LC_MESSAGES/django.po b/plinth/locale/hi/LC_MESSAGES/django.po index a8d7635c6..d86ffc056 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-12-16 01:15+0000\n" "Last-Translator: bsurajpatra \n" "Language-Team: Hindi user@host:~/path/to/repo/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "प्रमाणीकरण मोड" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "रिमोट सर्वर पर प्रमाणीकरण विफल हुआ।" + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Key-based Authentication" +msgstr "एचटिटिपि बेसिकॅ प्रमाणीकरण उपयोग करें" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Password-based Authentication" +msgstr "एचटिटिपि बेसिकॅ प्रमाणीकरण उपयोग करें" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH सर्वर का पासवर्ड" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "SSH सर्वर का पासवर्डै।
SSH कुंजी-आधारित प्रमाणीकरण अभी तक संभव नहीं है।" +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Required for password-based authentication." +msgstr "एचटिटिपि बेसिकॅ प्रमाणीकरण उपयोग करें" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "एचटिटिपि बेसिकॅ प्रमाणीकरण उपयोग करें" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "दूरस्थ बैकअप रिपोजिटरी पहले से मौजूद है।" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "सत्यापित SSH सार्वजनिक कुंजी चुनें" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "पुनर्स्थापित करना" @@ -543,17 +579,17 @@ msgstr "बैकअप सिस्टम किसी अन्य ऑपर msgid "Not enough space left on the disk or remote location." msgstr "डिस्क या दूरस्थ स्थान पर पर्याप्त स्थान नहीं बचा है।" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "मौजूदा रिपोजिटरी एन्क्रिप्टेड नहीं है।" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} संग्रहण" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "एक नया बैकअप बनाएं" @@ -589,7 +625,23 @@ msgstr "मौजूदा कस्टम सर्विसस" msgid "Existing Backups" msgstr "मौजूदा कस्टम सर्विसस" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -614,7 +666,7 @@ msgstr "मौजूदा कस्टम सर्विसस" msgid "Caution:" msgstr "सावधान:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -625,7 +677,7 @@ msgstr "" "%(box_name)s पर बैकअप पुनर्स्थापित करने के लिए आपको SSH क्रेडेंशियल और, यदि चुना गया " "हो, तो एन्क्रिप्शन पासफ़्रेज़ की आवश्यकता होगी।" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "जगह बनाएँ" @@ -759,114 +811,114 @@ msgstr "" msgid "Verify Host" msgstr "होस्ट सत्यापित करें" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "बैकअप शेड्यूल अद्यतन किया गया।" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "बैकअप शेड्यूल करें" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "पुरालेख बनाया गया." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "पुरालेख हटाईये" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "पुरालेख हटा गया है." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "नया बैकअप पुरालेख के लिये नाम" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "सफलतापूर्वक अपलोड हो गया।" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "कोई बैकअप फ़ाइल नहीं मिली ।" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "अपलोड की गई फ़ाइल से पुनर्स्थापित करें" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "बैकअप से फ़ाइलें पुनर्स्थापित की गईं।" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "रिपोजिटरी जोड़ने के लिए कोई अतिरिक्त डिस्क उपलब्ध नहीं है।" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "बैकअप रिपॉजिटरी बनाएं" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "नया रिपोजिटरी जोड़ा गया।" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "रिमोट बैकअप रिपॉजिटरी बनाएं" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "नया इंट्रोड्यूसर जोड़ें।" - -#: plinth/modules/backups/views.py:408 -#, fuzzy -msgid "Verify SSH hostkey" -msgstr "होस्टकी को सत्यापित करें" - -#: plinth/modules/backups/views.py:434 -#, fuzzy -msgid "SSH host already verified." -msgstr "होस्ट पहले ही सत्यापित किया जा चुका है।" - -#: plinth/modules/backups/views.py:445 -#, fuzzy -msgid "SSH host verified." -msgstr "SSH होस्ट सत्यापित किया गया।" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 #, fuzzy msgid "SSH host public key could not be verified." msgstr "SSH होस्ट की सार्वजनिक कुंजी की पुष्टि नहीं की जा सकी।" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "रिमोट सर्वर पर प्रमाणीकरण विफल हुआ।" -#: plinth/modules/backups/views.py:465 +#: plinth/modules/backups/views.py:50 #, fuzzy #| msgid "Error installing application: {error}" -msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "एप्लिकेशन नहीं इंस्टॉल जा सकता: {error}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "बैकअप शेड्यूल अद्यतन किया गया।" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "बैकअप शेड्यूल करें" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "पुरालेख बनाया गया." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "पुरालेख हटाईये" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "पुरालेख हटा गया है." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "नया बैकअप पुरालेख के लिये नाम" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "सफलतापूर्वक अपलोड हो गया।" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "कोई बैकअप फ़ाइल नहीं मिली ।" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "अपलोड की गई फ़ाइल से पुनर्स्थापित करें" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "बैकअप से फ़ाइलें पुनर्स्थापित की गईं।" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "रिपोजिटरी जोड़ने के लिए कोई अतिरिक्त डिस्क उपलब्ध नहीं है।" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "बैकअप रिपॉजिटरी बनाएं" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "नया रिपोजिटरी जोड़ा गया।" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "रिमोट बैकअप रिपॉजिटरी बनाएं" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "नया इंट्रोड्यूसर जोड़ें।" + +#: plinth/modules/backups/views.py:434 +#, fuzzy +msgid "Verify SSH hostkey" +msgstr "होस्टकी को सत्यापित करें" + +#: plinth/modules/backups/views.py:468 +#, fuzzy +msgid "SSH host already verified." +msgstr "होस्ट पहले ही सत्यापित किया जा चुका है।" + +#: plinth/modules/backups/views.py:475 +#, fuzzy +msgid "SSH host verified." +msgstr "SSH होस्ट सत्यापित किया गया।" + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "रिपॉज़िटरी हटाई गई।" -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "रिपॉज़िटरी हटाई गई" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "रिपॉज़िटरी हटाई गई। बैकअप नहीं हटाए गए।" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 #, fuzzy msgid "Unmounting failed!" msgstr "अनमाउंट करना विफल रहा!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "बढ़ते विफल" @@ -951,7 +1003,7 @@ msgstr "अनाम उपयोगकर्ताओं के लिए अ #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "अनुमतियाँ" @@ -1040,8 +1092,8 @@ msgstr "सूची" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "हटाईये" @@ -1124,6 +1176,7 @@ msgstr "डीएनएसएसईसि सक्षम करें" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "सर्वर" @@ -1477,7 +1530,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "डिफ़ॉल्ट वेब एप्लिकेशन चूनिये जो परोसा जाता पढ़ेगा जब किसी को आपका {box_name} वेब में " "दौरा करता है. जब किसी आैर डोमेन नाम पर जाता है तो एक टिपिकल उपयोग मामला है आपके " @@ -2129,7 +2182,7 @@ msgid "Invalid domain name" msgstr "अमान्य डोमेन नाम" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "युसरनाम" @@ -2450,8 +2503,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "स्थिति" @@ -2521,9 +2574,13 @@ msgstr "" "हैं।" #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube ऐप उपयोगकर्ताओं को ईमेल तक " "पहुँचने के लिए वेब इंटरफ़ेस प्रदान करता है।" @@ -3479,8 +3536,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 #, fuzzy msgid "About" @@ -4077,7 +4134,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "जावास्क्रिप्ट लाइसेंस जानकारी" @@ -5294,9 +5351,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "संपादन" @@ -5807,6 +5864,7 @@ msgstr "कनेक्शन हटाएँ" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "कनेक्शन" @@ -6018,6 +6076,7 @@ msgid "Edit Connection" msgstr "कनेक्शन संपादित करें" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -6210,8 +6269,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6664,6 +6723,37 @@ msgid "Password update failed. Please choose a stronger password." msgstr "" "डेटा एंक्रिप्ट करने के लिए पासवर्ड उपयोग किया गया . सर्वर पासवर्ड से मेल खाना चाहिए." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application enabled" +msgid "Application" +msgstr "एप्लीकेशन सक्षम किया गया है" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -7022,8 +7112,8 @@ msgstr "" msgid "Shutdown" msgstr "शट डाउन" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "रीस्टार्ट" @@ -7832,12 +7922,14 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 #, fuzzy #| msgid "yes" msgid "Yes" msgstr "हाँ" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 #, fuzzy #| msgid "None" msgid "No" @@ -8154,8 +8246,9 @@ msgstr "" #| "same partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "स्नैपशॉट्स सिर्फ btrfs फाइल सिस्टम और रूट पार्टीशन पर काम करते हैं. स्नैपशॉट बैकअप के लिए " "प्रतिस्थापन नहीं है क्योंकि वे उसी पार्टीशन पर संग्रहित होते हैं. " @@ -8506,28 +8599,6 @@ msgstr "" msgid "Fingerprint" msgstr "SSH फिंगरप्रिंट" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "एकल साइन-ऑन" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "लॉगिन" - -#: plinth/modules/sso/views.py:86 -#, fuzzy -#| msgid "Password changed successfully." -msgid "Logged out successfully." -msgstr "पासवर्ड सफलतापूर्वक बदल गया." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9421,13 +9492,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "ऑटोमेटिक अपग्रेडस सक्षम किया गया" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9683,35 +9747,39 @@ msgstr "" msgid "Users and Groups" msgstr "यूसरस और समूह" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "सब सर्विसस और सिस्टम सेटिंग्स तक पहुंच" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "एलडीएपी प्रविष्टि चेक करें \"{search_item}\"" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "यूसरनाम लिया है या आरक्षित है." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 #, fuzzy #| msgid "" #| "Select which services should be available to the new user. The user will " @@ -9731,51 +9799,51 @@ msgstr "" "

एडमिन ग्रुप के यूसरस सब सर्विसस पर लॉग इन कर सकेगें. SSH के माध्यम से भी " "सिस्टम पर लॉग इन कर सकते है अाैर उनको प्रशासनिक विशेषाधिकार (sudo) है." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 #, fuzzy #| msgid "Invalid server name" msgid "Enter a valid username." msgstr "सर्वर नाम अमान्य है" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 #, fuzzy #| msgid "Administrator Password" msgid "Authorization Password" msgstr "व्यवस्थापक पासवर्ड" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 #, fuzzy #| msgid "Show password" msgid "Invalid password." msgstr "शो पासवर्ड" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, fuzzy, python-brace-format #| msgid "Creating LDAP user failed." msgid "Creating LDAP user failed: {error}" msgstr "एलडीएपी यूसर बनाना विफल रहा. {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "{group} समूह में नया यूसर जोड़ने में विफल. {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9785,56 +9853,56 @@ msgstr "" "बिना सिस्टम में प्रवेश करने की अनुमति देगा. आप एकाधिक कीज़ दर्ज कर सकते हैं, हर लाइन रक " "एक. खाली लाइनस या # से प्रारंभ होने वाले लाइनस अनदेखा कर दिया जाएगा." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete User" msgid "Delete user" msgstr "यूसर हटाइये" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 #, fuzzy #| msgid "Failed to add user to group." msgid "Failed to delete user." msgstr "समूह से यूसर को जोड़ने में विफल." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "एलडीएपी यूसर का नाम बदलना विफल रहा." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "समूह से यूसर को हटाने में विफल." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "समूह से यूसर को जोड़ने में विफल." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "एसएसएच कीज़ सेट करने में असमर्थ." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 #, fuzzy #| msgid "Failed to add user to group." msgid "Failed to change user status." msgstr "समूह से यूसर को जोड़ने में विफल." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "एलडीएपी यूसर का पासवर्ड बदलना विफल रहा." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "व्यवस्थापक समूह में नया यूसर जोड़ने में विफल. {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "युसर अकाउंट बनाया, अब आप लॉगड इन हैं" @@ -9850,6 +9918,10 @@ msgstr "स्नैपशॉटस प्रबंधित करें" msgid "App permissions" msgstr "अनुमतियाँ" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9863,7 +9935,7 @@ msgstr "पासवर्ड सहेजें" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "यूसर बनाये" @@ -9912,7 +9984,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "यूसरस" @@ -9921,6 +9993,10 @@ msgstr "यूसरस" msgid "Edit user %(username)s" msgstr "यूसर संपादित करें %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "लॉगिन" + #: plinth/modules/users/templates/users_update.html:17 #, fuzzy, python-format #| msgid "Edit user %(username)s" @@ -9963,31 +10039,37 @@ msgstr "यूसर हटाइये" msgid "Cancel" msgstr "कैंसिल" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +#, fuzzy +#| msgid "Password changed successfully." +msgid "Logged out successfully." +msgstr "पासवर्ड सफलतापूर्वक बदल गया." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "युसर %(username)s बनाया." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "युसर %(username)s अपडेट किया." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "यूसर संपादित करें" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "User %(username)s created." msgid "User %(username)s deleted." msgstr "युसर %(username)s बनाया." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "पासवर्ड बदलिये" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "पासवर्ड सफलतापूर्वक बदल गया." @@ -10016,38 +10098,49 @@ msgstr "" msgid "Invalid key." msgstr "अमान्य कईट नाम" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Invalid server name" +msgid "Enter a valid IPv4 address." +msgstr "सर्वर नाम अमान्य है" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 #, fuzzy #| msgid "Publish Key" msgid "Public Key" msgstr "चाबी प्रकाशित करें" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 #, fuzzy #| msgid "Published key to keyserver." msgid "Public key of the server" msgstr "चाबी किसर्वर पर प्रकाशित किया गया." -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10055,25 +10148,32 @@ msgstr "" "सर्वर ऑपरेटर द्वारा प्रदान की गई, वर्णों की एक लंबी स्ट्रिंग। उदाहरण: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ।" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 #, fuzzy msgid "Client IP address provided by server" msgstr "IP ऐड्रेस की सूची, रिक्त स्थानो से अलग" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "सर्वर ऑपरेटर द्वारा प्रदान की गई, वर्णों की एक लंबी स्ट्रिंग। उदाहरण: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ।" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "इस मशीन की निजी कुंजी" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10085,11 +10185,11 @@ msgstr "" "ऑपरेटर इसे प्रदान करने पर जोर देते हैं। उदाहरण: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ।" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "गुप्त कुंजी" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10099,11 +10199,11 @@ msgstr "" "गुप्त कुंजी। केवल तभी भरें जब प्रदान की गई हो। उदाहरण: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=।" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "सभी आउटगोइंग ट्रैफ़िक भेजने के लिए इस कनेक्शन का उपयोग करें" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -10119,82 +10219,115 @@ msgstr "आईआरसी क्लाइंट" msgid "As a Server" msgstr "चाट सर्वर" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Mount Point" +msgid "Endpoint(s)" +msgstr "माउन्ट प्वाइंट" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "%(box_name)s Setup" +msgid "%(box_name)s VPN IP for services" +msgstr "%(box_name)s सेटअप" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 #, fuzzy #| msgid "Create Connection" msgid "Last Connected Time" msgstr "कनेक्शन बनाएँ" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -#, fuzzy -#| msgid "No shares currently configured." -msgid "Not configured yet." -msgstr "वर्तमान में कोई शेयर कॉन्फ़िगर नहीं किया गया है." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 #, fuzzy #| msgid "Add new introducer" msgid "Add a new peer" msgstr "नया इंट्रोड्यूसर जोड़ें" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "पासवर्ड सफलतापूर्वक बदल गया." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 #, fuzzy #| msgid "Chat Client" msgid "As a Client" msgstr "चैट क्लाइंट" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 #, fuzzy #| msgid "Add new introducer" msgid "Add a new server" msgstr "नया इंट्रोड्यूसर जोड़ें" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" msgid "Add Connection to Server" msgstr "कनेक्शन जोड़ें" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 #, fuzzy #| msgid "IRC Client" msgid "Add Client" @@ -10253,18 +10386,22 @@ msgstr "सर्वर डोमेन" msgid "Server public key:" msgstr "सर्वर पोर्ट नंबर" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -10290,88 +10427,102 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 #, fuzzy #| msgid "Add new introducer" msgid "Added new client." msgstr "नया इंट्रोड्यूसर जोड़ें" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 #, fuzzy #| msgid "A share with this name already exists." msgid "Client with public key already exists" msgstr "इस नाम का एक शयर पहले से मौजूद है." -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 #, fuzzy #| msgid "Email Client" msgid "Allowed Client" msgstr "ईमेल क्लाइंट" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 #, fuzzy #| msgid "Update setup" msgid "Updated client." msgstr "सेटअप अपडेट" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 #, fuzzy #| msgid "Email Client" msgid "Modify Client" msgstr "ईमेल क्लाइंट" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 #, fuzzy #| msgid "Delete All" msgid "Delete Allowed Client" msgstr "सब को हटाएँ" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 #, fuzzy #| msgid "Archive deleted." msgid "Client deleted." msgstr "पुरालेख हटा गया है." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 #, fuzzy #| msgid "Added custom service" msgid "Added new server." msgstr "जोड़ा गया कस्टम सर्विस" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 #, fuzzy #| msgid "Connection Type" msgid "Connection to Server" msgstr "कनेक्शन टाइप" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 #, fuzzy #| msgid "Update setup" msgid "Updated server." msgstr "सेटअप अपडेट" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 #, fuzzy #| msgid "Edit Connection" msgid "Modify Connection to Server" msgstr "कनेक्शन संपादित करें" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "कनेक्शन हटाएँ" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "Share deleted." msgid "Server deleted." msgstr "शेयर हटाया गया." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "पासवर्ड सफलतापूर्वक बदल गया." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10536,6 +10687,22 @@ msgstr "कॉंफ़िगरेशन फ़ाइल: {file}" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 #, fuzzy #| msgid "Install Apps" @@ -10737,35 +10904,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " होम" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " ऐप्स" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " सिस्टम" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "पासवर्ड बदलें" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "शट डाउन" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "लॉग आउट" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "भाषा चुनें" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "लॉग इन" @@ -10861,11 +11028,15 @@ msgid "" "%(interface_list)s" msgstr "अभी यह नेटवर्क इंटरफ़ेसस आंतरिक के रूप में कॉंफ़िगर किया गया है:%(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "सूचनाएं" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -11046,15 +11217,28 @@ msgstr "यहाँ" msgid "Setting unchanged" msgstr "सेटिंग स्थिर है" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "{app_id} को अनइंस्टॉल करने से पहले" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "गुजराती" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "SSH सर्वर का पासवर्डै।
SSH कुंजी-आधारित प्रमाणीकरण अभी तक संभव नहीं है।" + +#~ msgid "Single Sign On" +#~ msgstr "एकल साइन-ऑन" + +#, fuzzy +#~| msgid "No shares currently configured." +#~ msgid "Not configured yet." +#~ msgstr "वर्तमान में कोई शेयर कॉन्फ़िगर नहीं किया गया है." + #~ msgid "Minetest" #~ msgstr "मैइनटेस्ट" @@ -12198,9 +12382,6 @@ msgstr "गुजराती" #~ msgid "Settings unchanged" #~ msgstr "सेटिंगस अपरिवर्तित" -#~ msgid "Application enabled" -#~ msgstr "एप्लीकेशन सक्षम किया गया है" - #~ msgid "Application disabled" #~ msgstr "एप्लीकेशन अक्षम किया गया है" diff --git a/plinth/locale/hu/LC_MESSAGES/django.po b/plinth/locale/hu/LC_MESSAGES/django.po index 3d1726d54..c5e3efe42 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-06-04 15:01+0000\n" "Last-Translator: András Szűcs " "\n" @@ -111,15 +111,15 @@ msgstr "A webes felület megjelenítéséhez használt nyelv" msgid "Use the language preference set in the browser" msgstr "A böngésző nyelvének használata" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Kezdőlap" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Alkalmazások" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "Rendszer" @@ -142,37 +142,41 @@ msgstr "Biztonság" msgid "Administration" msgstr "Adminisztráció" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "" "A rendszer esetleg nagy terhelés alatt áll. Kérjük, próbálja meg újra később." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "Az oldal nem található: {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "Hiba történt a művelet végrehajtásában." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "Hiba történt az oldal betöltése során." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Apache HTTP szerver" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Webszerver" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} webes felület (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -221,16 +225,16 @@ msgstr "helyi" msgid "mDNS" msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "Lehetővé teszi a biztonsági mentés létrehozását és kezelését." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Biztonsági mentések" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -238,19 +242,19 @@ msgstr "" "Automatikus biztonsági mentések ütemezésének engedélyezése. Ha lehet, " "használj egy titkosított távoli helyet, vagy egy extra külső lemezt." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "Ütemezett biztonsági mentés engedélyezése" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "Ugrás ide: {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -260,7 +264,7 @@ msgstr "" "mentésre tett próbálkozás nem sikerült. A legutóbbi hibaüzenet: " "{error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Hiba történt a biztonsági mentés közben" @@ -413,7 +417,9 @@ msgid "Passphrase" msgstr "Jelszó" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Jelszó (csak akkor szükséges ha titkosítást is használsz)." #: plinth/modules/backups/forms.py:190 @@ -453,28 +459,57 @@ msgstr "" "eleresi/ut/az/adattarhoz/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Hitelesítési mód" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "A távoli szerverrel végzett hitelesítés sikertelen." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "hitelesítést igényel" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Jelszavas hitelesítés letiltása" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH-szerver jelszava" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Jelszó az SSH-szerverhez.
SSH-kulcs alapú azonosítás még nem lehetséges." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Jelszavas hitelesítés letiltása" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Jelszavas hitelesítés letiltása" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "A távoli biztonsági mentési tároló már létezik." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Válaszd ki az ellenőrzött SSH nyilvános kulcsot" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Visszaállítás" @@ -560,17 +595,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "A meglévő tároló nem titkosított." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} Tárhely" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Új biztonsági mentés létrehozása" @@ -606,7 +641,23 @@ msgstr "Távoli biztonsági mentési hely hozzáadása" msgid "Existing Backups" msgstr "Meglévő biztonsági mentések" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -631,7 +682,7 @@ msgstr "Meglévő biztonsági mentések" msgid "Caution:" msgstr "Vigyázat:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -643,7 +694,7 @@ msgstr "" "%(box_name)s eszközön szükséged van az SSH hitelesítő adatokra és - ha " "kiválasztottad - a titkosítási jelszóra." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Hely létrehozása" @@ -788,111 +839,113 @@ msgstr "" msgid "Verify Host" msgstr "Állomás ellenőrzése" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "SSH-állomás nyilvános kulcsa nem ellenőrizhető le." + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "A távoli szerverrel végzett hitelesítés sikertelen." + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "Hiba lépett fel a szerverhez kapcsolódás során: {}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "A biztonsági mentések készítésének ütemezése frissítve." -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 msgid "Schedule Backups" msgstr "Biztonsági mentések ütemezése" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "Archívum létrehozva." -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "Archívum törlése" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "Archívum törölve." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "Biztonsági mentések feltöltése és visszaállítása" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 #, fuzzy #| msgid "Logged out successfully." msgid "Upload successful." msgstr "Sikeres kijelentkezés." -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "Nem található biztonsági mentési fájl." -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "Visszaállítás a feltöltött fájlból" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "Visszaállított fájlok a biztonsági mentésből." -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "Nincs további lemez amit a tárolóhoz lehetne adni." -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "Biztonsági mentési tároló létrehozása" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 #, fuzzy #| msgid "Added new remote SSH repository." msgid "Added new repository." msgstr "Új távoli SSH tároló hozzáadva." -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "Távoli biztonsági mentési tároló létrehozása" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "Új távoli SSH tároló hozzáadva." -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "SSH-állomáskulcs ellenőrzése" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "Az SSH-állomás már ellenőrzött." -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "SSH-állomás leellenőrizve." -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "SSH-állomás nyilvános kulcsa nem ellenőrizhető le." - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "A távoli szerverrel végzett hitelesítés sikertelen." - -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" -msgstr "Hiba lépett fel a szerverhez kapcsolódás során: {}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Tároló eltávolítva." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Tároló eltávolítása" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Tároló eltávolítva. A biztonsági mentések nem lettek törölve." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Lecsatolás sikertelen!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Felcsatolás sikertelen" @@ -976,7 +1029,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Engedélyek" @@ -1065,8 +1118,8 @@ msgstr "Listáz" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Törlés" @@ -1146,6 +1199,7 @@ msgstr "DNSSEC engedélyezése" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Szerver" @@ -1466,13 +1520,20 @@ msgid "Webserver Home Page" msgstr "Webszerver kezdőoldala" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Válaszd ki azt az oldalt, amit kezdőoldalként láthatnak majd azok, akik az " "internetről meglátogatják a {box_name} eszközöd. Tipikus eset az, amikor egy " @@ -2126,7 +2187,7 @@ msgid "Invalid domain name" msgstr "Érvénytelen domainnév" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Felhasználónév" @@ -2444,8 +2505,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Állapot" @@ -2519,9 +2580,13 @@ msgstr "" "automatikusan létrejönnek az alkalmazás telepítése során." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube alkalmazás webes felületet " "biztosít a felhasználók számára e-mail eléréséhez." @@ -3446,8 +3511,8 @@ msgstr "Visszajelzés küldése" msgid "Contribute" msgstr "Hozzájárulás" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Névjegy" @@ -4087,7 +4152,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "JavaScript licencinformáció" @@ -5364,9 +5429,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Szerkesztés" @@ -5953,6 +6018,7 @@ msgstr "Kapcsolat törlése" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Kapcsolat" @@ -6167,6 +6233,7 @@ msgid "Edit Connection" msgstr "Kapcsolat szerkesztése" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 #, fuzzy #| msgid "error" @@ -6379,11 +6446,17 @@ msgstr "" "hogy a %(box_name)s biztosítani tudja a szolgáltatásokat." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Ha nem rendelkezel a router felett, akkor ne konfiguráld . A korlátozás " "leküzdésére szolgáló lehetőségek megtekintéséhez válaszd \"Az " @@ -6813,6 +6886,40 @@ msgstr "Csoport megosztás" msgid "Password update failed. Please choose a stronger password." msgstr "A jlszó frisítése nem sikerült. Kérlek válassz egy erősebb jelszót" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application enabled" +msgid "Application" +msgstr "Alkalmazás engedélyezve" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Engedélyezett SSH-kulcsok" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Engedélyezett SSH-kulcsok" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -7168,8 +7275,8 @@ msgstr "" msgid "Shutdown" msgstr "Leállítás" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Újraindítás" @@ -7992,10 +8099,12 @@ msgid "N/A" msgstr "N/A" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Igen" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Nem" @@ -8302,10 +8411,17 @@ msgstr "" "szerint." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "A Pillanatképek funkció jelenleg csak btrfs fájlrendszeren működik, és annak " "is csak a root partícióján. A Pillanatképek nem helyettesítik a %(username)s" @@ -10028,7 +10125,7 @@ msgstr "Jelszó mentése" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Felhasználó létrehozása" @@ -10085,7 +10182,7 @@ msgid "Skip this step" msgstr "Lépés kihagyása" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Felhasználók" @@ -10094,6 +10191,10 @@ msgstr "Felhasználók" msgid "Edit user %(username)s" msgstr "%(username)s felhasználó szerkesztése" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Bejelentkezés" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -10135,31 +10236,35 @@ msgstr "Fájlok törlése" msgid "Cancel" msgstr "Mégse" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Sikeres kijelentkezés." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "%(username)s nevű felhasználó létrehozva." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "%(username)s nevű felhasználó frissítve." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Felhasználó szerkesztése" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "User %(username)s created." msgid "User %(username)s deleted." msgstr "%(username)s nevű felhasználó létrehozva." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Jelszómódosítás" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "A jelszó módosítása sikeres." @@ -10192,14 +10297,25 @@ msgstr "" msgid "Invalid key." msgstr "Érvénytelen kulcs." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Adj meg egy érvényes felhasználónevet." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Nyilvános kulcs" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10207,22 +10323,22 @@ msgstr "" "A partner nyilvános kulcsa. Például: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "A szerver végpontja" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" "Domainnév és port \"ip:port\" formában. Például: demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "A szerver nyilvános kulcsa" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10230,25 +10346,32 @@ msgstr "" "A szerver üzemeltetője által megadott hosszú karakterlánc. Például: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "A szerver által megadott kliens IP-cím" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "A gépnek a VPN-en a végponthoz való csatlakozást követően kijelölt IP-cím. " "Ezt az értéket általában a szerver üzemeltetője adja meg. Például: " "192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "A gép privát kulcsa" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10260,11 +10383,11 @@ msgstr "" "módszer. Egyes szerverüzemeltetők azonban ragaszkodnak ennek megadásához. " "Például: MConEJFIg6+DFHgg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Előre megosztott kulcs" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10274,11 +10397,11 @@ msgstr "" "további biztonsági szintet biztosít. Csak akkor töltsd ki, ha rendelkezésre " "áll. Például: MConEJFIg6+DFHgg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Használja ezt a kapcsolatot az összes kimenő forgalom küldésére" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Jellemzően olyan VPN-szolgáltatásnál van bejelölve, amelyen keresztül az " @@ -10294,70 +10417,108 @@ msgstr "IRC-kliens" msgid "As a Server" msgstr "Szerverként" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Public key for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "A %(box_name)s nyilvános kulcsa:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Végpont" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "A %(box_name)s portokhoz" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "A szerverhez csatlakozásra jogosult partnerek:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "Engedélyezett IP-címek" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Utolsó csatlakozási idő" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Ehhez a %(box_name)shoz még nincs partner konfigurálva." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "A %(box_name)s nyilvános kulcsa:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Még nincs konfigurálva." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Új társ hozzáadása" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Engedélyezett kliens hozzáadása" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "A jelszó módosítása sikeres." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Ügyfélként" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Szerverek, amelyekhez a %(box_name)s csatlakozni fog:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Végpont" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "A távoli szerverekhez még nincsenek konfigurálva kapcsolatok." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Új szerver hozzáadása" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Kapcsolat hozzáadása a szerverhez" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +#, fuzzy +#| msgid "IP address to use for client:" +msgid "IP address that will be assigned to this client" +msgstr "A kliens által használt IP-cím:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Kliens hozzáadása" @@ -10408,18 +10569,22 @@ msgstr "Szerver végpontok:" msgid "Server public key:" msgstr "Szerver nyilvános kulcsa:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Továbbított adatok:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Beérkezett adatok:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Legutóbbi kézfogás:" @@ -10446,62 +10611,76 @@ msgstr "A gép nyilvános kulcsa:" msgid "IP address of this machine:" msgstr "A gép IP-címe:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Új kliens hozzáadva." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Ezzel a nyilvános kulccsal már létezik kliens" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Engedélyezett kliens" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Kliens frissítve." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Ügyfél módosítása" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Engedélyezett kliensek törlése" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Ügyfél törölve." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Az ügyfél nem található" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Új szerver hozzáadva." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Kapcsolat a szerverhez" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Szerver frissítve." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Szerverrel létesített kapcsolat módosítása" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Szerverrel létesített kapcsolat törlése" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Szerver törölve." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "A jelszó módosítása sikeres." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10699,6 +10878,24 @@ msgstr "konfigurációs fájl: {file}" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "cím lekérdezése" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 #, fuzzy #| msgid "Install Apps" @@ -10904,35 +11101,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Kezdőlap" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Alkalmazások" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Rendszer" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Jelszómódosítás" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Leállítás" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Kijelentkezés" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Válassz nyelvet" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Bejelentkezés" @@ -11034,11 +11231,15 @@ msgstr "" "Jelenleg a következő hálózati interfészek vannak belsőként konfigurálva: " "%(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Figyelmen kívül hagyás" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Értesítések" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -11216,15 +11417,32 @@ msgstr "" msgid "Setting unchanged" msgstr "A beállítás változatlan" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gudzsaráti" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Jelszó az SSH-szerverhez.
SSH-kulcs alapú azonosítás még nem " +#~ "lehetséges." + +#~ msgid "Single Sign On" +#~ msgstr "Egyszeri bejelentkezés" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "A %(box_name)s nyilvános kulcsa:" + +#~ msgid "Not configured yet." +#~ msgstr "Még nincs konfigurálva." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12622,9 +12840,6 @@ msgstr "Gudzsaráti" #~ msgid "Settings unchanged" #~ msgstr "A beállítások nem változtak" -#~ msgid "Application enabled" -#~ msgstr "Alkalmazás engedélyezve" - #~ msgid "Application disabled" #~ msgstr "Alkalmazás letiltva" diff --git a/plinth/locale/id/LC_MESSAGES/django.po b/plinth/locale/id/LC_MESSAGES/django.po index f232e776d..e8902543a 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Indonesian " #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Authentication Mode" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Otentikasi ke server jarak jauh gagal." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "butuh autentikasi" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Password-based Authentication" +msgstr "Gunakan autentikasi dasar HTTP" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH Server Kata Sandi" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Kata sandi server SSH.
Otentikasi berbasis kunci SSH belum mungkin." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Required for password-based authentication." +msgstr "Gunakan autentikasi dasar HTTP" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Gunakan autentikasi dasar HTTP" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Repositori cadangan jarak jauh sudah ada." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Pilih kunci publik SSH Terverifikasi" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Mengembalikan" @@ -555,17 +590,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Repositori yang ada tidak dienkripsi." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} Penyimpanan" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Buat cadangan baru" @@ -601,7 +636,23 @@ msgstr "Tambahkan lokasi cadangan jarak jauh" msgid "Existing Backups" msgstr "Cadangan yang ada" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -626,7 +677,7 @@ msgstr "Cadangan yang ada" msgid "Caution:" msgstr "Peringatan:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, fuzzy, python-format #| msgid "" #| "The credentials for this repository are stored on your %(box_name)s.
Roundcube app
provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3403,8 +3464,8 @@ msgstr "Berikan umpan balik" msgid "Contribute" msgstr "Kontribusi" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Tentang" @@ -4029,7 +4090,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Informasi Lisensi JavaScript" @@ -5202,9 +5263,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Sunting" @@ -5692,6 +5753,7 @@ msgstr "Hapus koneksi" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Koneksi" @@ -5897,6 +5959,7 @@ msgid "Edit Connection" msgstr "Sunting Koneksi" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 #, fuzzy #| msgid "error" @@ -6081,8 +6144,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6468,6 +6531,37 @@ msgstr "" "Kata sandi yang digunakan untuk mengenkripsi data. Harus mencocokkan kata " "sandi server." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Aplikasi" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6766,8 +6860,8 @@ msgstr "" msgid "Shutdown" msgstr "Matikan" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Mulai ulang" @@ -7465,10 +7559,12 @@ msgid "N/A" msgstr "Tidak Ada" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Ya" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Tidak" @@ -7746,8 +7842,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -8088,26 +8185,6 @@ msgstr "Algoritma" msgid "Fingerprint" msgstr "Sidik Jari" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Masuk" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8917,13 +8994,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Pembaruan distribusi dinonaktifkan" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9166,35 +9236,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9203,102 +9277,102 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "Masukkan sebuah nama pengguna yang valid." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 #, fuzzy #| msgid "Administrator Account" msgid "Authorization Password" msgstr "Akun Administrator" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "Kata sandi tidak valid." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "Gagal membuat pengguna LDAP. {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "Gagal menambahkan pengguna baru ke kelompok {group}: {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete %(username)s" msgid "Delete user" msgstr "Pangkar %(username)s" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 #, fuzzy #| msgid "Failed to add new user to admin group." msgid "Failed to delete user." msgstr "Gagal menambahkan pengguna baru ke kelompok admin." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 #, fuzzy #| msgid "Failed to add new user to admin group." msgid "Failed to change user status." msgstr "Gagal menambahkan pengguna baru ke kelompok admin." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "Gagal menambahkan pengguna baru ke kelompok admin. {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -9314,6 +9388,10 @@ msgstr "Kelola Snapshot" msgid "App permissions" msgstr "Izin" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9327,7 +9405,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -9371,7 +9449,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -9380,6 +9458,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Masuk" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9419,31 +9501,35 @@ msgstr "Hapus file" msgid "Cancel" msgstr "Batal" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "User {user} deleted." msgid "User %(username)s deleted." msgstr "Insan {user} dipangkar." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -9470,57 +9556,70 @@ msgstr "" msgid "Invalid key." msgstr "Kunci tidak valid." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Masukkan sebuah nama pengguna yang valid." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 #, fuzzy #| msgid "Publish Key" msgid "Public Key" msgstr "Publikasikan Kunci" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Kunci publlik server" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9528,22 +9627,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9559,72 +9658,105 @@ msgstr "Klien IRC" msgid "As a Server" msgstr "Server Web" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Mount Point" +msgid "Endpoint(s)" +msgstr "Mount Point" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Ke %(box_name)s Port" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" msgid "Add Connection to Server" msgstr "Tambah Koneksi" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -9677,18 +9809,22 @@ msgstr "Endpoints server:" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9712,70 +9848,82 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Klien yang diperbarui." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 #, fuzzy #| msgid "Delete" msgid "Delete Allowed Client" msgstr "Hapus" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Klien dihapus." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Klien tidak ditemukan" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Menambahkan server baru." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Koneksi ke Server" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Server yang diperbarui." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 #, fuzzy #| msgid "Edit Connection" msgid "Modify Connection to Server" msgstr "Sunting Koneksi" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "Hapus Koneksi" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "{name} deleted." msgid "Server deleted." msgstr "{name} dihapus." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9937,6 +10085,24 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "meminta alamat" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 #, fuzzy #| msgid "Install Apps" @@ -10133,35 +10299,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Beranda" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplikasi" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " sistem" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Ganti kata sandi" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Matikan" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Keluar" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Pilih bahasa" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Masuk" @@ -10258,11 +10424,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Notifikasi" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -10429,15 +10599,21 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Bahasa Gujarat" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Kata sandi server SSH.
Otentikasi berbasis kunci SSH belum mungkin." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -11364,9 +11540,6 @@ msgstr "Bahasa Gujarat" #~ " (repro)" #~ msgstr "Server SIP (repro)" -#~ msgid "Applications" -#~ msgstr "Aplikasi" - #~ msgid "Go to Apps" #~ msgstr "Pergi ke Pengaturan Aplikasi" diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po index 63fc9dc60..046263680 100644 --- a/plinth/locale/it/LC_MESSAGES/django.po +++ b/plinth/locale/it/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2026-01-16 21:32+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-02-06 23:01+0000\n" "Last-Translator: Pierfrancesco Passerini \n" "Language-Team: Italian \n" @@ -17,7 +17,7 @@ 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 5.15.2\n" +"X-Generator: Weblate 5.16-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -76,7 +76,7 @@ msgstr "(Nessun)" #: plinth/forms.py:68 msgid "Select a domain name to be used with this application" -msgstr "Selezione un nome di dominio da usare con questa applicazione" +msgstr "Seleziona un nome di dominio da usare con quest'applicazione" #: plinth/forms.py:81 plinth/modules/coturn/forms.py:31 #: plinth/modules/mumble/forms.py:21 @@ -89,7 +89,7 @@ msgid "" "Select a domain to use TLS with. If the list is empty, please configure at " "least one domain with certificates." msgstr "" -"Selezionare un dominio con cui usare TLS. Se l'elenco è vuoto, configura " +"Seleziona un dominio per utilizzare TLS. Se l'elenco è vuoto, configura " "almeno un dominio con i certificati." #: plinth/forms.py:93 @@ -104,15 +104,15 @@ msgstr "Lingua da usare in questa interfaccia" msgid "Use the language preference set in the browser" msgstr "Usa la lingua impostata nel browser" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Home" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "App" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "Sistema" @@ -135,36 +135,40 @@ msgstr "Sicurezza" msgid "Administration" msgstr "Amministrazione" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "Il sistema potrebbe essere sovraccarico. Riprova più tardi." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "Pagina non trovata: {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "Errore durante l'esecuzione dell'operazione." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "Errore durante il caricamento della pagina." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Server Apache HTTP" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Web Server" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Interfaccia Web (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -212,16 +216,16 @@ msgstr "Locale" msgid "mDNS" msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "Backups consente di creare e gestire archivi di backup." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Backup" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -229,19 +233,19 @@ msgstr "" "Attiva i backup programmati per proteggere i dati. Prediligi una " "destinazione remota crittografata o un disco esterno aggiuntivo." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" -msgstr "Abilita una schedulazione del Backup" +msgstr "Abilita una pianificazione del backup" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "Vai a {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -250,7 +254,7 @@ msgstr "" "Un backup programmato è fallito. Gli ultimi {error_count} tentativi di " "backup non hanno avuto successo. L'ultimo errore è stato: {error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Errore durante il backup" @@ -280,9 +284,9 @@ msgid "" "This many latest backups are kept and the rest are removed. A value of \"0\" " "disables backups of this type. Triggered at specified hour every day." msgstr "" -"Questi ultimi backup saranno conservati e gli altri rimossi. Un valore di " -"\"0\" disabilita il backup di questo tipo. Avviato all'ora specificata di " -"ogni giorno." +"Questi ultimi backup saranno conservati e gli altri rimossi. Il valore \"0\" " +"disabilita il backup di questo tipo. Avviato all'ora specificata di ogni " +"giorno." #: plinth/modules/backups/forms.py:65 msgid "Number of weekly backups to keep" @@ -293,9 +297,9 @@ msgid "" "This many latest backups are kept and the rest are removed. A value of \"0\" " "disables backups of this type. Triggered at specified hour every Sunday." msgstr "" -"Questi ultimi backup saranno conservati e gli altri rimossi. Un valore di " -"\"0\" disabilita il backup di questo tipo. Avviato all'ora specificata di " -"ogni domenica." +"Questi ultimi backup saranno conservati e gli altri rimossi. Il valore \"0\" " +"disabilita il backup di questo tipo. Avviato all'ora specificata di ogni " +"domenica." #: plinth/modules/backups/forms.py:72 msgid "Number of monthly backups to keep" @@ -307,9 +311,9 @@ msgid "" "disables backups of this type. Triggered at specified hour first day of " "every month." msgstr "" -"Questi ultimi backup saranno conservati e gli altri rimossi. Un valore di " -"\"0\" disabilita il backup di questo tipo. Avviato all'ora specificata del " -"primo giorno di ogni mese." +"Questi ultimi backup saranno conservati e gli altri rimossi. Il valore \"0\" " +"disabilita il backup di questo tipo. Avviato all'ora specificata del primo " +"giorno di ogni mese." #: plinth/modules/backups/forms.py:79 msgid "Hour of the day to trigger backup operation" @@ -402,7 +406,9 @@ msgid "Passphrase" msgstr "Passphrase" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Passphrase; Necessaria solo quando si utilizza la crittografia." #: plinth/modules/backups/forms.py:190 @@ -442,29 +448,57 @@ msgstr "" "repo/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Modalità Autenticazione" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Autenticazione al server remoto fallita." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "richiede autenticazione" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Disabilita l'autenticazione con password" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Password server SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"La password del server SSH.
L'autenticazione basata su chiave SSH non è " -"ancora implementata." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Disabilita l'autenticazione con password" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Disabilita l'autenticazione con password" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Il repository di backup remoto esiste già." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Selezionare la chiave pubblica SSH verificata" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Ripristino" @@ -544,17 +578,17 @@ msgstr "Il sistema di backup è impegnato in un'altra operazione." msgid "Not enough space left on the disk or remote location." msgstr "Spazio insufficiente sul disco o nella posizione remota." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Il repository esistente non è criptato." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Archiviazione di {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Creare un nuovo backup" @@ -590,7 +624,23 @@ msgstr "Aggiungi la destinazione di backup remota" msgid "Existing Backups" msgstr "Backup esistenti" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -615,18 +665,19 @@ msgstr "Backup esistenti" msgid "Caution:" msgstr "Attenzione:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" "To restore a backup on a new %(box_name)s you need the SSH credentials and, " "if chosen, the encryption passphrase." msgstr "" -"Le credenziali di questo repository sono memorizzate sul vostro %(box_name)" -"s.
Per ripristinare un backup su un nuovo %(box_name)s sono necessarie " -"le credenziali SSH e, se utilizzata, la passphrase di crittografia." +"Le credenziali di questo repository sono memorizzate sul vostro " +"%(box_name)s.
Per ripristinare un backup su un nuovo %(box_name)s sono " +"necessarie le credenziali SSH e, se utilizzata, la passphrase di " +"crittografia." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Crea la destinazione" @@ -757,107 +808,109 @@ msgstr "" msgid "Verify Host" msgstr "Verificare l'host" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Pianificazione del backup aggiornata." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Pianificazione dei backup" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Archivio creato." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Elimina archivio" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Archivio eliminato." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Caricare e ripristinare un backup" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Caricamento riuscito." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "Nessun file di backup trovato." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Ripristina dal file caricato" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "File ripristinati da backup." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "Non sono disponibili ulteriori dischi per aggiungere un repository." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Creare un repository di backup" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "Aggiunto nuovo repository." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Creare un repository di backup remoto" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Aggiunto nuovo repository SSH remoto." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "Verifica la chiave SSH dell'host" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "SSH dell'host già verificata." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "Host SSH verificato." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "Non è stato possibile verificare la chiave pubblica SSH dell'host." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "Autenticazione al server remoto fallita." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Errore di connessione al server: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Pianificazione del backup aggiornata." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Pianificazione dei backup" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Archivio creato." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Elimina archivio" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Archivio eliminato." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Caricare e ripristinare un backup" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Caricamento riuscito." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "Nessun file di backup trovato." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Ripristina dal file caricato" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "File ripristinati da backup." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "Non sono disponibili ulteriori dischi per aggiungere un repository." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Creare un repository di backup" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Aggiunto nuovo repository." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Creare un repository di backup remoto" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Aggiunto nuovo repository SSH remoto." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "Verifica la chiave SSH dell'host" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "SSH dell'host già verificata." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "Host SSH verificato." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Deposito rimosso." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Rimuovere il repository" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Deposito rimosso. I backup non sono stati cancellati." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Smontaggio fallito!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Montaggio fallito" @@ -940,7 +993,7 @@ msgstr "Permessi per utenti anonimi, che non hanno fornito una password." #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Permessi" @@ -1026,8 +1079,8 @@ msgstr "Visualizza" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Cancella" @@ -1105,6 +1158,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Server" @@ -1410,13 +1464,20 @@ msgid "Webserver Home Page" msgstr "Pagina iniziale del server web" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Scegliere la pagina predefinita che deve essere servita quando qualcuno " "visita il tuo {box_name} sul web. Un tipico caso d'uso è quello di impostare " @@ -1551,7 +1612,7 @@ msgid "" "Network time server is a program that maintains the system time in " "synchronization with servers on the Internet." msgstr "" -"Network time server è un programma che mantiene l'ora del sistema in " +"Network time server è un programma che mantiene l'ora del sistema " "sincronizzata con un server NTP in Internet." #: plinth/modules/datetime/__init__.py:68 @@ -1747,7 +1808,8 @@ msgstr "Abilita riparazione automatica" #: plinth/modules/diagnostics/forms.py:16 msgid "If issues are found, try to repair them automatically." -msgstr "Se vengono rilevati dei problemi, provare a risolverli automaticamente." +msgstr "" +"Se vengono rilevati dei problemi, provare a risolverli automaticamente." #: plinth/modules/diagnostics/manifest.py:10 msgid "Detect problems" @@ -2019,7 +2081,7 @@ msgid "Invalid domain name" msgstr "Nome dominio non valido" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Nome utente" @@ -2163,9 +2225,10 @@ msgid "" "any user with a {box_name} login." msgstr "" "Per comunicare, puoi usare un qualsiasi client web o un " -"client XMPP . Una volta abilitato, ejabberd è accessibile da qualsiasi " -"utente con un login {box_name}." +"a> o un client XMPP . Una volta abilitato, ejabberd è " +"accessibile da qualsiasi utente con un login " +"{box_name}." #: plinth/modules/ejabberd/__init__.py:40 #, python-brace-format @@ -2307,8 +2370,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Stato" @@ -2372,9 +2435,13 @@ msgstr "" "creati automaticamente e puntano al primo utente amministratore." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube app fornisce " "un'interfaccia web per l'accesso degli utenti all'email." @@ -2989,8 +3056,8 @@ msgstr "Aggiorna adesso" msgid "" "Review privacy options." msgstr "" -"Verifica le opzioni sulla " -"privacy." +"Verifica le opzioni sulla privacy." #: plinth/modules/first_boot/templates/firstboot_complete.html:49 #, python-format @@ -2998,9 +3065,9 @@ msgid "" "Review and setup network " "connections. Change the default Wi-Fi password, if applicable." msgstr "" -"Verifica e configura le " -"connessioni di rete. Se è possibile, modifica la password Wi-Fi " -"predefinita." +"Verifica e configura le connessioni di rete. Se è possibile, modifica la " +"password Wi-Fi predefinita." #: plinth/modules/first_boot/templates/firstboot_complete.html:60 #, python-format @@ -3015,8 +3082,8 @@ msgid "" "Configure and schedule remote backups." msgstr "" -"Configura e pianifica un " -"backup remoto." +"Configura e pianifica un backup remoto." #: plinth/modules/first_boot/templates/firstboot_complete.html:81 #, python-format @@ -3294,8 +3361,8 @@ msgstr "Invia feedback" msgid "Contribute" msgstr "Collabora" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Informazioni" @@ -3561,8 +3628,8 @@ msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" -"il %" -"(box_name)s progetto wiki contiene ulteriori informazioni." +"il " +"%(box_name)s progetto wiki contiene ulteriori informazioni." #: plinth/modules/help/templates/help_index.html:32 #, python-format @@ -3623,8 +3690,8 @@ msgid "" "Or send an email to our mailing list." msgstr "" -"Potete anche chattare con noi sui canali IRC e Matrix (bridged):
  • " -"#freedombox su irc.oftc.net
  • #freedombox:matrix.org
" +"Potete anche chattare con noi sui canali IRC e Matrix (bridged):
    " +"
  • #freedombox su irc.oftc.net
  • #freedombox:matrix.org
" "Oppure inviare una email alla nostra mailing list." @@ -3747,9 +3814,9 @@ msgid "" "href=\"%(dynamic_dns_url)s\">Dynamic DNS app for configuring subdomains." msgstr "" "Per Home Assistant è possibile configurare un sottodominio dedicato, come " -"homeassistant.esempio.miodominio. Vedere le app " -"Nomi e DNS dinamico per la " -"configurazione dei sottodomini." +"homeassistant.esempio.miodominio. Vedere le app Nomi e DNS " +"dinamico per la configurazione dei sottodomini." #: plinth/modules/homeassistant/templates/homeassistant.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:18 @@ -3952,7 +4019,7 @@ msgstr "Conferenza Web" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Informazioni sulla licenza JavaScript" @@ -4603,7 +4670,8 @@ msgstr "Password aggiornata" #: plinth/modules/mediawiki/views.py:48 msgid "Password update failed. Please choose a stronger password" -msgstr "Aggiornamento della password fallito. Scegli una password più complessa" +msgstr "" +"Aggiornamento della password fallito. Scegli una password più complessa" #: plinth/modules/mediawiki/views.py:57 msgid "Public registrations enabled" @@ -5176,9 +5244,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Modifica" @@ -5348,8 +5416,8 @@ msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" -"Valore opzionale. Le lasciato vuoto, sarà usato un valore predefinito basato " -"sull'indirizzo IP." +"Valore opzionale. Se lasciato vuoto, verrà utilizzata una netmask basata " +"sull'indirizzo." #: plinth/modules/networks/forms.py:113 plinth/modules/networks/forms.py:152 #: plinth/modules/networks/templates/connection_show.html:197 @@ -5499,9 +5567,9 @@ msgid "" "Optional value. Wireless channel in the selected frequency band to restrict " "to. Blank or 0 value means automatic selection." msgstr "" -"Valore opzionale. Canale Wireless da restringere nella frequenza di banda " -"selezionata. Il valore 0, o l'assenza di valore, significa che sarà " -"impostata la selezione automatica." +"Valore opzionale. Canale Wireless da utilizzare nella frequenza di banda " +"selezionata. Il valore 0, o l'assenza di valore, imposterà la selezione " +"automatica." #: plinth/modules/networks/forms.py:329 msgid "BSSID" @@ -5514,8 +5582,8 @@ msgid "" "one provided. Example: 00:11:22:aa:bb:cc." msgstr "" "Valore opzionale. Identifivativo univoco per l'access point. Durante la " -"connessione ad un access point, connettersi solo se il BSSID dell'access " -"point combacia con quello fornito. Per esempio: 00:11:22:aa:bb:cc." +"connessione verificare che il BSSID dell'access point combaci con quello " +"fornito. Per esempio: 00:11:22:aa:bb:cc." #: plinth/modules/networks/forms.py:336 msgid "Authentication Mode" @@ -5754,6 +5822,7 @@ msgstr "Cancella connessione" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Connessione" @@ -5966,6 +6035,7 @@ msgid "Edit Connection" msgstr "Modifica Concessione" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Errore:" @@ -6133,8 +6203,8 @@ msgid "" "Your Internet connection is directly attached to your %(box_name)s and there " "are no other devices on the network." msgstr "" -"La propria connessione internet è collegata direttamente al proprio %" -"(box_name)s e non ci sono altri dispositivi sulla rete." +"La propria connessione internet è collegata direttamente al proprio " +"%(box_name)s e non ci sono altri dispositivi sulla rete." #: plinth/modules/networks/templates/networks_configuration.html:24 msgid "" @@ -6172,11 +6242,17 @@ msgstr "" "permettendogli di fornire i servizi." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Se non hai il controllo del tuo router, scegli di non configurarlo. Per " "visualizzare le opzioni capaci di superare questa limitazione, seleziona " @@ -6586,6 +6662,40 @@ msgstr "" "Aggiornamento della password non riuscito. Scegliere una password più " "complessa." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application enabled" +msgid "Application" +msgstr "Applicazione abilitata" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Chiavi SSH autorizzate" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Chiavi SSH autorizzate" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6743,7 +6853,7 @@ msgstr "Porta server" #: plinth/modules/pagekite/forms.py:36 msgid "Port of your pagekite server (default: 80)" -msgstr "Porta del tuo server pagekite (predefinita: 80)" +msgstr "Porta del server pagekite (predefinita: 80)" #: plinth/modules/pagekite/forms.py:38 msgid "Kite name" @@ -6858,7 +6968,7 @@ msgstr "Server Web (HTTPS)" #: plinth/modules/pagekite/utils.py:61 #, python-brace-format msgid "Site will be available at https://{0}" -msgstr "Il sito sarà disponibile a https://{0}" +msgstr "Il sito sarà disponibile su https://{0}" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" @@ -6915,8 +7025,8 @@ msgstr "Riavvia" msgid "Shutdown" msgstr "Spegni" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Riavvio" @@ -7288,8 +7398,8 @@ msgstr "" "Google e il server sarà imaps://imap.gmail.com. Da notare che " "sarà anche necessario abilitare \"app meno sicure\" nelle impostazioni del " "tuo account Google (https://www.google.com/settings/security/lesssecureapps)" -"." +"lesssecureapps\">https://www.google.com/settings/security/lesssecureapps)." #: plinth/modules/roundcube/forms.py:16 msgid "Use only the local mail server" @@ -7675,8 +7785,8 @@ msgid "" msgstr "" "La seguente tabella elenca il numero attuale di vulnerabilità di sicurezza " "per ogni app installata. Maggiori informazioni sulle vulnerabilità sono " -"disponibili su " -"Debian Security Bug Tracker." +"disponibili su Debian Security Bug Tracker." #: plinth/modules/security/templates/security_report.html:28 msgid "" @@ -7719,10 +7829,12 @@ msgid "N/A" msgstr "N/A" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Si" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "No" @@ -8009,14 +8121,22 @@ msgstr "" "indicate." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Le istantanee, attualmente, funzionano solo sui filesystem btrfs e solo " -"sulla partizione root. Non sostituiscono i " -"backup poiché possono essere salvate solo sulla stessa partizione. " +"sulla partizione root. Non sostituiscono i backup poiché possono essere salvate solo sulla stessa " +"partizione. " #: plinth/modules/snapshot/__init__.py:50 msgid "Storage Snapshots" @@ -8362,26 +8482,6 @@ msgstr "Algoritmo" msgid "Fingerprint" msgstr "Impronta digitale" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Single Sign On" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "Inserisci le lettere nell'immagine per accedere alla pagina di login" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "Procedi al login" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Login" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "Disconnesso correttamente." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8627,8 +8727,8 @@ msgid "" "%(expandable_root_size)s of additional free space will be available in your " "root partition." msgstr "" -"Esegui un backup dei tuoi dati prima di procedere. Dopo questa operazione, %" -"(expandable_root_size)s di spazio libero aggiuntivo sarà disponibile nella " +"Esegui un backup dei tuoi dati prima di procedere. Dopo questa operazione, " +"%(expandable_root_size)s di spazio libero aggiuntivo sarà disponibile nella " "partizione root." #: plinth/modules/storage/views.py:67 @@ -8781,8 +8881,8 @@ msgstr "" "Tor è un sistema di comunicazione anonimo. Per ulteriori dettagli visita il " "sito web Tor Project. Per la " "massima protezione durante la navigazione web, Tor Project raccomanda di " -"usare " -"Tor Browser." +"usare Tor Browser." #: plinth/modules/tor/__init__.py:40 msgid "" @@ -8864,9 +8964,9 @@ msgid "" "\">https://bridges.torproject.org/ and copy/paste the bridge information " "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -"Puoi trovare alcuni bridge su " -"https://bridges.torproject.org/ e copiarli/incollarli qui. I protocolli " -"supportati sono: nessuno, obfs3, obfs4 e scamblesuit." +"Puoi trovare alcuni bridge su https://bridges.torproject.org/ e copiarli/incollarli qui. I " +"protocolli supportati sono: nessuno, obfs3, obfs4 e scamblesuit." #: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" @@ -8997,7 +9097,9 @@ msgstr "" #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." -msgstr "Transmission è un client BitTorrent che può essere gestito da Web UI." +msgstr "" +"Transmission è un client BitTorrent che può essere gestito da interfaccia " +"web." #: plinth/modules/transmission/__init__.py:26 msgid "" @@ -9268,8 +9370,8 @@ msgid "" "changes and transitions during the distribution upgrade." msgstr "" "L'aggiornamento della distribuzione inizierà a breve. Esegui un backup delle " -"applicazioni e dei dati prima di allora. Consulta la pagina del manuale per conoscere le modifiche ed i " +"applicazioni e dei dati prima di allora. Consulta la pagina del manuale per conoscere le modifiche ed i " "cambiamenti previsti durante l'aggiornamento." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:31 @@ -9288,13 +9390,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Vai all'aggiornamento della distribuzione" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "Ignora" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9408,8 +9503,9 @@ msgid "" "automatically in %(period)s. You may choose to update manually now, if you " "wish." msgstr "" -"È disponibile una nuova distribuzione stable. L'aggiornamento di %(box_name)" -"s averrà automaticamente entro %(period)s. Se vuoi, puoi eseguirlo ora." +"È disponibile una nuova distribuzione stable. L'aggiornamento di " +"%(box_name)s averrà automaticamente entro %(period)s. Se vuoi, puoi " +"eseguirlo ora." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:136 #, python-format @@ -9568,37 +9664,41 @@ msgstr "" msgid "Users and Groups" msgstr "Utenti e gruppi" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Accesso a tutti i servizi e alle impostazioni di sistema" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Verifica voce LDAP \"{search_item}\"" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Verifica configurazione nslcd \"{key} {value}\"" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Verifica configurazione nsswitch \"{database}\"" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "Inserisci le lettere nell'immagine per accedere alla pagina di login" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "Nome utente in uso o riservato." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" "Facoltativo. Utilizzato per inviare email per ripristinare la password e " "notifiche importanti." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9612,22 +9712,22 @@ msgstr "" "potranno accedere a tutti i servizi. Potranno anche effettuare login al " "sistema tramite SSH e avranno privilegi amministrativi (sudo)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "Inserisci un nome utente valido." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "Obbligatorio. Massimo 150 caratteri. Solo lettere , cifre ed i simboli @/./-/" "_" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "Password di autorizzazione" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." @@ -9635,25 +9735,25 @@ msgstr "" "Digitare la password dell'utente \"{user}\" per autorizzare le modifiche " "all'account." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "Password non valida." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "Creazione utente LDAP non riuscita: {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "Fallito l'inserimento di un nuovo utente nel gruppo {group}: {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "Chiavi SSH autorizzate" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9663,11 +9763,11 @@ msgstr "" "sistema in modo sicuro senza password. Puoi inserire più chiavi, una per " "riga. Le righe vuote e quelle che iniziano con # verranno ignorate." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "Cancella l'utente" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -9675,40 +9775,40 @@ msgstr "" "Eliminare l'account utente eliminerà anche tutti i suoi file. Per evitare la " "cancellazione dei file, puoi impostare l'account utente come inattivo." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "Cancellazione dell'utente fallita." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "Modifica del nome utente LDAP non riuscita." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Rimozione dell'utente dal gruppo non riuscita." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Aggiunta dell'utente al gruppo non riuscita." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "Impossibile impostare le chiavi SSH." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "Impossibile modificare lo stato dell'utente." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "Modifica della password utente LDAP non riuscita." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "Aggiunta del nuovo utente al gruppo admin fallita: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Account utente creato, ora sei connesso" @@ -9720,6 +9820,10 @@ msgstr "Gestione utenti" msgid "App permissions" msgstr "Permessi app" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "Procedi al login" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9733,7 +9837,7 @@ msgstr "Salva password" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Crea utente" @@ -9783,7 +9887,7 @@ msgid "Skip this step" msgstr "Salta questo passaggio" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Utenti" @@ -9792,6 +9896,10 @@ msgstr "Utenti" msgid "Edit user %(username)s" msgstr "Modifica l'utente %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Login" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9832,30 +9940,34 @@ msgstr "Cancellare utente e file" msgid "Cancel" msgstr "Cancella" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Disconnesso correttamente." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Utente %(username)s creato." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Utente %(username)s aggiornato." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Modifica utente" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "Utente %(username)s cancellato." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Cambia password" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "La password è stata aggiornata." @@ -9888,14 +10000,25 @@ msgstr "" msgid "Invalid key." msgstr "Chiave non valida." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Inserisci un nome utente valido." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Chiave pubblico" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9903,11 +10026,11 @@ msgstr "" "Chiave pubblica del nodo. Esempio: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Endpoint del server" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -9915,11 +10038,11 @@ msgstr "" "Nome di dominio e porta nel formato \"ip:porta\". Esempio: " "demo.wireguard.com:12912" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Chiave pubblica del server" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9927,25 +10050,32 @@ msgstr "" "Fornito dal gestore del server, una lunga sequenza di caratteri. Esempio: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Indirizzo IP client fornito dal server" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "Indirizzo IP assegnato a questa macchina sulla VPN dopo la connessione " "all'endpoint. Questo valore è generalmente fornito dal gestore del server. " "Esempio: 192.168.0.10" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Chiave privata di questa macchina" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9957,11 +10087,11 @@ msgstr "" "metodo consigliato. Tuttavia, alcuni gestori del server insistono per " "fornirla. Esempio: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Chiave condivisa" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -9971,11 +10101,11 @@ msgstr "" "ulteriore livello di sicurezza. Inserirla solo se vien fornita. Esempio: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Usa questa connessione per veicolare tutto il traffico in uscita" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Solitamente selezionato per un servizio VPN attraverso cui viene inviato " @@ -9989,70 +10119,106 @@ msgstr "Client VPN" msgid "As a Server" msgstr "Come server" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Endpoints for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Punti di accesso per %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Endpoint" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Alla porta %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Nodi autorizzati a connettersi a questo server:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "IP autorizzati" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Data dell'ultima connessione" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Non ci sono nodi autorizzati a connettersi a %(box_name)s." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Chiave pubblica di %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Non ancora configurato." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Aggiungi un nuovo nodo" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Aggiungi client autorizzato" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "WireGuard server started successfully." +msgid "WireGuard server not started yet." +msgstr "Il server WireGuard è stato correttamente avviato." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "Avvia WireGuard server" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Come Client" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Server a cui %(box_name)s si connetterà:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Endpoint" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Non sono configurate connessioni a server remoti." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Aggiungi un nuovo server" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Aggiungi Connessione a Server" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "Indirizzo IP che sarà assegnato al client" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Aggiungere Client" @@ -10103,18 +10269,22 @@ msgstr "Endpoint del server:" msgid "Server public key:" msgstr "Chiave pubblica del server:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Dati trasmessi:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Dati ricevuti:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Ultimo handshake:" @@ -10141,62 +10311,74 @@ msgstr "Chiave pubblica di questa macchina:" msgid "IP address of this machine:" msgstr "Indirizzo IP di questa macchina:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Client aggiunto." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Il cliente con chiave pubblica esiste già" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Client autorizzato" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Client aggiornato." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Modifica client" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Elimina client autorizzato" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Client cancellato." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Cliente non trovato" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Aggiunto nuovo server." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Connessione al server" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Aggiornato server." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Modifica Concessione a server" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Cancella Connessione a server" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Server cancellato." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "Il server WireGuard è stato correttamente avviato." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "Avvio del server WireGuard non riuscito: {}" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10360,14 +10542,15 @@ msgstr "Finito: {name}" #: plinth/package.py:219 #, python-brace-format msgid "Package {package_expression} is not available for install" -msgstr "Il pacchetto {package_expression} non è disponibile per l'installazione" +msgstr "" +"Il pacchetto {package_expression} non è disponibile per l'installazione" #: plinth/package.py:239 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -"Il pacchetto {package_name} è all'ultima versione disponibile (" -"{latest_version})" +"Il pacchetto {package_name} è all'ultima versione disponibile " +"({latest_version})" #: plinth/package.py:456 msgid "installing" @@ -10390,6 +10573,24 @@ msgstr "file di configurazione: {file}" msgid "Timeout waiting for package manager" msgstr "Timeout in attesa del gestore di pacchetti" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "acquisizione indirizzo in corso" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Installazione app" @@ -10557,35 +10758,35 @@ msgstr "" "proprietà dei dati. Software libero che semplifica l'installazione e la " "gestione di applicazioni server." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Home" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " App" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistema" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Cambia password" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Spegni" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Esci" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Seleziona la lingua" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Accedi" @@ -10681,14 +10882,18 @@ msgid "" "Currently the following network interfaces are configured as internal: " "%(interface_list)s" msgstr "" -"Attualmente le seguenti interfacce di rete sono configurate come interne: %" -"(interface_list)s" +"Attualmente le seguenti interfacce di rete sono configurate come interne: " +"%(interface_list)s" + +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Ignora" #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Notificazioni" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "%(time_since)s fa" @@ -10851,15 +11056,32 @@ msgstr "Qui" msgid "Setting unchanged" msgstr "Impostazioni invariate" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "Prima della disinstallazione di {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "La password del server SSH.
L'autenticazione basata su chiave SSH non " +#~ "è ancora implementata." + +#~ msgid "Single Sign On" +#~ msgstr "Single Sign On" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Chiave pubblica di %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Non ancora configurato." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -11791,9 +12013,6 @@ msgstr "Gujarati" #~ msgid "Enable OpenVPN server" #~ msgstr "Abilita server OpenVPN" -#~ msgid "Application enabled" -#~ msgstr "Applicazione abilitata" - #~ msgid "Application disabled" #~ msgstr "Applicazione disabilitata" diff --git a/plinth/locale/ja/LC_MESSAGES/django.po b/plinth/locale/ja/LC_MESSAGES/django.po index 220b4b290..6d473119d 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-10-24 16:02+0000\n" "Last-Translator: Jun Nogata \n" "Language-Team: Japanese SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "リストア" @@ -508,17 +530,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "新規バックアップを作成" @@ -554,7 +576,23 @@ msgstr "リモートのバックアップ保存場所を追加" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -579,7 +617,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -587,7 +625,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -703,107 +741,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -873,7 +911,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "パーミッション" @@ -958,8 +996,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1029,6 +1067,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1309,7 +1348,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1852,7 +1891,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2120,8 +2159,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2167,8 +2206,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -2999,8 +3038,8 @@ msgstr "フィードバックを送る" msgid "Contribute" msgstr "協力する" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "詳細" @@ -3544,7 +3583,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4579,9 +4618,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5053,6 +5092,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5256,6 +5296,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5438,8 +5479,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5811,6 +5852,35 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +msgid "Application" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6099,8 +6169,8 @@ msgstr "再起動" msgid "Shutdown" msgstr "シャットダウン" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "再起動" @@ -6757,10 +6827,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7010,8 +7082,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7324,26 +7397,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8109,13 +8162,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8338,35 +8384,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8375,94 +8425,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8474,6 +8524,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8487,7 +8541,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "ユーザーを作成" @@ -8529,7 +8583,7 @@ msgid "Skip this step" msgstr "この手順をスキップ" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "ユーザー" @@ -8538,6 +8592,10 @@ msgstr "ユーザー" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8574,30 +8632,34 @@ msgstr "" msgid "Cancel" msgstr "キャンセル" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "ユーザーを編集" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "パスワードを変更" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8624,55 +8686,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8680,22 +8753,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8707,70 +8780,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8819,18 +8922,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8854,62 +8961,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9066,6 +9185,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9216,35 +9351,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " ホーム" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " アプリ" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " システム" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "パスワードを変更" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "シャットダウン" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "ログアウト" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9337,11 +9472,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9489,12 +9628,12 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/kn/LC_MESSAGES/django.po b/plinth/locale/kn/LC_MESSAGES/django.po index 5cf506c78..5b957cad5 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2020-07-16 16:41+0000\n" "Last-Translator: Yogesh \n" "Language-Team: Kannada SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -507,17 +529,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -553,7 +575,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -578,7 +616,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -586,7 +624,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -702,107 +740,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -872,7 +910,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -957,8 +995,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1028,6 +1066,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1308,7 +1347,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1849,7 +1888,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2117,8 +2156,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2164,8 +2203,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -2996,8 +3035,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "ಬಗ್ಗೆ" @@ -3539,7 +3578,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4574,9 +4613,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5048,6 +5087,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5251,6 +5291,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5433,8 +5474,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5806,6 +5847,35 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +msgid "Application" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6094,8 +6164,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6754,10 +6824,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7007,8 +7079,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7321,26 +7394,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8106,13 +8159,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8335,35 +8381,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8372,94 +8422,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8471,6 +8521,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8484,7 +8538,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8526,7 +8580,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8535,6 +8589,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8571,30 +8629,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8621,55 +8683,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8677,22 +8750,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8704,70 +8777,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8816,18 +8919,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8851,62 +8958,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9063,6 +9182,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9213,35 +9348,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9334,11 +9469,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9486,11 +9625,11 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/lt/LC_MESSAGES/django.po b/plinth/locale/lt/LC_MESSAGES/django.po index 2582217c8..70ade3d27 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Lithuanian SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -511,17 +533,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -557,7 +579,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -582,7 +620,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -590,7 +628,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -706,107 +744,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -876,7 +914,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -961,8 +999,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1032,6 +1070,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1312,7 +1351,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1855,7 +1894,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2123,8 +2162,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2170,8 +2209,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3008,8 +3047,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Apie" @@ -3551,7 +3590,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4594,9 +4633,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5068,6 +5107,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5271,6 +5311,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5453,8 +5494,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5826,6 +5867,35 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +msgid "Application" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6114,8 +6184,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6774,10 +6844,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7027,8 +7099,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7343,26 +7416,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8130,13 +8183,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8359,35 +8405,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8396,94 +8446,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8495,6 +8545,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8508,7 +8562,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8550,7 +8604,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8559,6 +8613,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8595,30 +8653,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8645,55 +8707,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8701,22 +8774,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8728,70 +8801,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8840,18 +8943,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8875,62 +8982,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9087,6 +9206,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9237,35 +9372,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9358,11 +9493,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9510,12 +9649,12 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/lv/LC_MESSAGES/django.po b/plinth/locale/lv/LC_MESSAGES/django.po index 7163a9bed..e21e5ca48 100644 --- a/plinth/locale/lv/LC_MESSAGES/django.po +++ b/plinth/locale/lv/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Latvian SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -510,17 +532,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -556,7 +578,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -581,7 +619,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -589,7 +627,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -705,107 +743,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -875,7 +913,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -960,8 +998,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1031,6 +1069,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1311,7 +1350,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1854,7 +1893,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2122,8 +2161,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2169,8 +2208,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3007,8 +3046,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "" @@ -3550,7 +3589,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4593,9 +4632,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5067,6 +5106,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5270,6 +5310,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5452,8 +5493,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5825,6 +5866,35 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +msgid "Application" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6113,8 +6183,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6773,10 +6843,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7026,8 +7098,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7342,26 +7415,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8129,13 +8182,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8358,35 +8404,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8395,94 +8445,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8494,6 +8544,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8507,7 +8561,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8549,7 +8603,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8558,6 +8612,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8594,30 +8652,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8644,55 +8706,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8700,22 +8773,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8727,70 +8800,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8839,18 +8942,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8874,62 +8981,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9086,6 +9205,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9236,35 +9371,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9357,11 +9492,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9509,12 +9648,12 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/nb/LC_MESSAGES/django.po b/plinth/locale/nb/LC_MESSAGES/django.po index cf2d486dd..178c6f2f3 100644 --- a/plinth/locale/nb/LC_MESSAGES/django.po +++ b/plinth/locale/nb/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2024-10-27 23:30+0000\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Norwegian Bokmål " #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Autentiseringsmodus" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Identitetsbekreftelse til fjerntjener mislyktes." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Key-based Authentication" +msgstr "Bruk HTTP-basisgodkjenning" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Password-based Authentication" +msgstr "Bruk HTTP-basisgodkjenning" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH-tjenermaskinpassord" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Passord til SSH-tjeneren.
Nøkkelbasert SSH-autentisering er foreløbig " -"ikke mulig." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Required for password-based authentication." +msgstr "Bruk HTTP-basisgodkjenning" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Bruk HTTP-basisgodkjenning" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Kodelager annensteds hen for sikkerhetskopi finnes allerede." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Velg bekreftet offentlig SSH-nøkkel" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Gjenopprett" @@ -562,17 +596,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Eksisterende pakkebrønn er ikke kryptert." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} lager" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Lag ny sikkerhetskopi" @@ -608,7 +642,23 @@ msgstr "Legg til kodelager annensteds fra for sikkerhetskopi" msgid "Existing Backups" msgstr "Eksisterende sikkerhetskopier" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -633,7 +683,7 @@ msgstr "Eksisterende sikkerhetskopier" msgid "Caution:" msgstr "Vær forsiktig:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -644,7 +694,7 @@ msgstr "" "For å tilbakeføre en sikkerhetskopi på en ny %(box_name)s så trenger du SSH-" "innloggingsinformasjon samt, hvis satt, krypteringspassfrasen." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Opprett plassering" @@ -789,111 +839,113 @@ msgstr "" msgid "Verify Host" msgstr "Bekreft vert" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "Offentlig nøkkel tilhørende SSH-vert kunne ikke bekreftes." + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "Identitetsbekreftelse til fjerntjener mislyktes." + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "Klarte ikke å koble til tjener: {}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "Sikkerhetskopieringstidsplan oppdatert." -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 msgid "Schedule Backups" msgstr "Tidsplan for sikkerhetskopiering" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "Arkiv opprettet." -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "Slett arkiv" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "Arkiv slettet." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "Last opp og tilbakefør en sikkerhetskopi" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 #, fuzzy #| msgid "Password changed successfully." msgid "Upload successful." msgstr "Vellykket passordbytte." -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "Fant ingen sikkerhetskopifiler." -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "Gjenopprett fra opplastet fil" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "Gjenopprettede filer fra sikkerhetskopi." -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "Ingen ytterligere disker tilgjengelig for opprettelse av kodelager." -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "Opprett kodelager for sikkerhetskopier" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 #, fuzzy #| msgid "Added new remote SSH repository." msgid "Added new repository." msgstr "La til nytt SSH-kodelager annensteds fra." -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "Opprett kodelager annensteds hen for sikkerhetskopi" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "La til nytt SSH-kodelager annensteds fra." -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "Bekreft SSH-vertsnøkkel" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "SSH-vert allerede bekreftet." -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "SSH-vert bekreftet." -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "Offentlig nøkkel tilhørende SSH-vert kunne ikke bekreftes." - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "Identitetsbekreftelse til fjerntjener mislyktes." - -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" -msgstr "Klarte ikke å koble til tjener: {}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Kodelager fjernet." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Fjern kodelager" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Kodelager fjernet. Sikkerhetskopier ble ikke slettet." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Klarte ikke å avmontere!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Montering feilet" @@ -975,7 +1027,7 @@ msgstr "Tilganger for anonyme brukere, som ikke har angitt et passord." #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Tilganger" @@ -1065,8 +1117,8 @@ msgstr "List opp" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Slett" @@ -1146,6 +1198,7 @@ msgstr "Aktiver DNSSEC" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Tjener" @@ -1460,13 +1513,20 @@ msgid "Webserver Home Page" msgstr "Web-tjener-forside" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Velg forvalgt side som presenteres når noen besøker din {box_name} på " "nettet. Et typisk bruksområde er å velge bloggen eller wiki-en din som " @@ -2122,7 +2182,7 @@ msgid "Invalid domain name" msgstr "Ugyldig domenenavn" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Brukernavn" @@ -2442,8 +2502,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Status" @@ -2510,8 +2570,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3451,8 +3511,8 @@ msgstr "Send inn tilbakemeldinger" msgid "Contribute" msgstr "Bidra" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Om" @@ -4080,7 +4140,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "JavaScript lisensinformasjon" @@ -5353,9 +5413,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Rediger" @@ -5885,6 +5945,7 @@ msgstr "Slett tilkobling" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Tilkobling" @@ -6097,6 +6158,7 @@ msgid "Edit Connection" msgstr "Endre oppkobling" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 #, fuzzy #| msgid "error" @@ -6300,8 +6362,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Hvis du ikke har kontroll over ruteren din, velg å ikke sette den opp. For å " "se valg for å overkomme denne begrensningen, vel «ingen offentlig adresse»-" @@ -6753,6 +6815,40 @@ msgstr "Legg til deling" msgid "Password update failed. Please choose a stronger password." msgstr "Passordoppdatering feilet. Vennligst bruk ett sterkere passord" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Anvendelser" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Autoriserte SSH-nøkler" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Autoriserte SSH-nøkler" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -7117,8 +7213,8 @@ msgstr "" msgid "Shutdown" msgstr "Slå av" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Omstart" @@ -7927,10 +8023,12 @@ msgid "N/A" msgstr "I/t" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Ja" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Nei" @@ -8230,10 +8328,17 @@ msgstr "" "henhold til innstillingene nedenfor." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Avbildninger fungerer for tiden kun på Btrfs-systemer, og bare på rot-" "partisjoner. Avbildninger er ikke en erstatning for %(username)s" @@ -9939,7 +10023,7 @@ msgstr "Lagre passord" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Opprett bruker" @@ -9984,7 +10068,7 @@ msgid "Skip this step" msgstr "Hopp over dette steget" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Brukere" @@ -9993,6 +10077,10 @@ msgstr "Brukere" msgid "Edit user %(username)s" msgstr "Endre bruker %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Login" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -10034,31 +10122,37 @@ msgstr "Slett filer" msgid "Cancel" msgstr "Kanseller" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +#, fuzzy +#| msgid "Password changed successfully." +msgid "Logged out successfully." +msgstr "Vellykket passordbytte." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Bruker %(username)s opprettet." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Oppdaterte bruker %(username)s." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Rediger bruker" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "User %(username)s created." msgid "User %(username)s deleted." msgstr "Bruker %(username)s opprettet." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Endre passord" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Vellykket passordbytte." @@ -10087,14 +10181,25 @@ msgstr "" msgid "Invalid key." msgstr "Ugyldig nøkkel." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Skriv et gyldig brukernavn." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Offentlig nøkkel" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10102,11 +10207,11 @@ msgstr "" "Offentlig nøkkel tilhørende likemann. Eksempelvis: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Sluttpunkt for tjeneren" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -10114,36 +10219,43 @@ msgstr "" "Domenenavn og port i formspråket \"ip:port\". Eksempelvis: " "demo.wireguard.com:12912." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Tjenerens offentlige nøkkel" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 #, fuzzy #| msgid "A list of IP addresses, separated by space" msgid "Client IP address provided by server" msgstr "En liste med IP-adresser, oppdelt med mellomrom" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "IP-adresse tildelt denne maskinen på VPN etter tilkobling til endepunktet. " "Denne verdien brukes vanligvis av tjeneroperatøren. Eksempel: 192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Privatnøkkel tilhørende denne maskinen" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 #, fuzzy msgid "" "Optional. New public/private keys are generated if left blank. Public key " @@ -10156,11 +10268,11 @@ msgstr "" "men noen tjeneroperatører insisterer på å angi dette. Eksempel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Forhåndsdelt nøkkel" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10170,11 +10282,11 @@ msgstr "" "sikkerhetslag: Fyll inn kun hvis oppgitt. Eksempel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Bruk denne tilkoblingen for å sende all utgående trafikk" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 #, fuzzy #| msgid "" #| "Typically checked for a VPN service though which all traffic is sent." @@ -10193,80 +10305,116 @@ msgstr "IRC-klient" msgid "As a Server" msgstr "Nettprat-tjener" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Public key for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Offentlig nøkkel for denne %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Sluttpunkt" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Til portene for %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Likemenn får koble seg til denne tjeneren:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "Tillatte IP-er" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 #, fuzzy #| msgid "Create Connection" msgid "Last Connected Time" msgstr "Lage forbindelse" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Ingen likemenn er oppsett for tilkobling til denne %(box_name)s enda." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Offentlig nøkkel for denne %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -#, fuzzy -#| msgid "No shares currently configured." -msgid "Not configured yet." -msgstr "Ingen delte områder er satt opp foreløpig." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 #, fuzzy #| msgid "Add new introducer" msgid "Add a new peer" msgstr "Legg til en ny introduserer" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Legg til tillatt klient" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Vellykket passordbytte." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 #, fuzzy #| msgid "Chat Client" msgid "As a Client" msgstr "Nettpratklient" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Tjenere %(box_name)s kobler seg til:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Sluttpunkt" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 #, fuzzy #| msgid "Authentication to remote server failed." msgid "No connections to remote servers are configured yet." msgstr "Identitetsbekreftelse til fjerntjener mislyktes." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Legg til ny tjener" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Legg til tilkobling til tjener" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +#, fuzzy +#| msgid "IP address to use for client:" +msgid "IP address that will be assigned to this client" +msgstr "IP-adresse å bruke for klienten:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Legg til klient" @@ -10321,18 +10469,22 @@ msgstr "Tjenerendepunkt:" msgid "Server public key:" msgstr "Offentlig tjener-nøkkel:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Data sendt:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Data mottatt:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Siste håndtrykk:" @@ -10359,72 +10511,86 @@ msgstr "Offentlig nøkkel tilhørende denne maskinen:" msgid "IP address of this machine:" msgstr "IP-adresse tilhørende denne maskinen:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Legg til ny klient." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Klient med offentlig nøkkel finnes allerede" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 #, fuzzy #| msgid "Email Client" msgid "Allowed Client" msgstr "E-postklient" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Klient oppdatert." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 #, fuzzy #| msgid "Email Client" msgid "Modify Client" msgstr "E-postklient" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 #, fuzzy #| msgid "Delete All" msgid "Delete Allowed Client" msgstr "Slett alle" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Klient slettet." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Finner ikke klient" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Lagt tit ny tjener." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 #, fuzzy #| msgid "Connection Type" msgid "Connection to Server" msgstr "Oppkoblingstype" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Tjener oppdatert." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Endre oppkobling til tjener" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "Slett tilkobling" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Tjener slettet." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Vellykket passordbytte." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10595,6 +10761,22 @@ msgstr "oppsettsfil: {file}" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 #, fuzzy #| msgid "Install Apps" @@ -10797,35 +10979,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Hjem" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Programmer" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " System" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Endre passord" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Slå av" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Logg ut" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Velg språk" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Logg inn" @@ -10925,11 +11107,15 @@ msgid "" msgstr "" "Følgende nettverksgrensesnitt er nå satt opp som interne: %(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Forkast" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Merknader" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -11104,15 +11290,34 @@ msgstr "" msgid "Setting unchanged" msgstr "Oppsett uendret" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "før avinstallering av {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Passord til SSH-tjeneren.
Nøkkelbasert SSH-autentisering er foreløbig " +#~ "ikke mulig." + +#~ msgid "Single Sign On" +#~ msgstr "Engangspålogging" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Offentlig nøkkel for denne %(box_name)s:" + +#, fuzzy +#~| msgid "No shares currently configured." +#~ msgid "Not configured yet." +#~ msgstr "Ingen delte områder er satt opp foreløpig." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -13265,9 +13470,6 @@ msgstr "Gujarati" #~ "SIP-tjener\n" #~ "(repro)" -#~ msgid "Applications" -#~ msgstr "Anvendelser" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/nl/LC_MESSAGES/django.po b/plinth/locale/nl/LC_MESSAGES/django.po index c35ee5391..f7be46719 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-09-17 09:01+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Dutch " #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Authentificatiemodus" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Authenticatie naar externe server is mislukt." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "heeft verificatie nodig" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Wachtwoord authenticatie uitschakelen" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH-server wachtwoord" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Wachtwoord van de SSH Server.
SSH-sleutel-gebaseerde authenticatie is " -"nog niet mogelijk." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Wachtwoord authenticatie uitschakelen" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Wachtwoord authenticatie uitschakelen" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Externe backup repository bestaat al." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Selecteer geverifieerde SSH openbare sleutel" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Herstellen" @@ -547,17 +581,17 @@ msgstr "Back-up systeem is bezig met een andere operatie." msgid "Not enough space left on the disk or remote location." msgstr "Niet genoeg ruimte vrij op de schijf of op afstand." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Bestaande repository is niet versleuteld." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} opslag" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Maak een nieuwe back-up" @@ -593,7 +627,23 @@ msgstr "Locatie voor externe back-ups toevoegen" msgid "Existing Backups" msgstr "Bestaande back-ups" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -618,7 +668,7 @@ msgstr "Bestaande back-ups" msgid "Caution:" msgstr "Let op:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -629,7 +679,7 @@ msgstr "" "Om een backup terug te zetten op een nieuwe %(box_name)s zijn de SSH " "logingegevens nodig en, als daarvoor gekozen is, de encryptie-wachtzin." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Locatie maken" @@ -764,108 +814,110 @@ msgstr "" msgid "Verify Host" msgstr "Host verifiëren" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "De openbare sleutel van de SSH-host kan niet worden geverifieerd." + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "Authenticatie naar externe server is mislukt." + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "Fout bij het tot stand brengen van een verbinding met de server: {}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "Back-upschema bijgewerkt." -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 msgid "Schedule Backups" msgstr "Back-ups plannen" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "Archief aangemaakt." -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "Archief verwijderen" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "Archief verwijderd." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "Een back-up uploaden en herstellen" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 msgid "Upload successful." msgstr "Upload succesvol." -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "Er is geen back-upbestand gevonden." -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "Herstellen vanuit geüpload bestand" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "Herstelde bestanden van de back-up." -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "" "Er zijn geen extra schijven beschikbaar om een opslagplaats toe te voegen." -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "Maak een back-up repository" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 msgid "Added new repository." msgstr "Nieuwe repository toegevoegd." -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "Maak een back-up repository" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "Nieuwe externe SSH-repository toegevoegd." -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "SSH-hostkey verifiëren" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "SSH-host is al geverifieerd." -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "SSH-host geverifieerd." -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "De openbare sleutel van de SSH-host kan niet worden geverifieerd." - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "Authenticatie naar externe server is mislukt." - -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" -msgstr "Fout bij het tot stand brengen van een verbinding met de server: {}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Repository verwijderd." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Verwijder Repository" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Repository verwijderd. Back-ups zijn niet verwijderd." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Ontkoppelen is mislukt!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Aankoppelen is mislukt" @@ -949,7 +1001,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Toegangsrechten" @@ -1036,8 +1088,8 @@ msgstr "Overzicht" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Verwijder" @@ -1114,6 +1166,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Server" @@ -1416,13 +1469,20 @@ msgid "Webserver Home Page" msgstr "Startpagina van de webserver" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Kies de standaardpagina die moet worden weergegeven wanneer iemand de " "{box_name} op internet bezoekt. Vaak wordt het blog of wiki ingesteld als de " @@ -2029,7 +2089,7 @@ msgid "Invalid domain name" msgstr "Foutieve domeinnaam" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Gebruikersnaam" @@ -2321,8 +2381,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Status" @@ -2384,9 +2444,13 @@ msgstr "" "automatisch aangemaakt en wijzen naar de eerste admin gebruiker." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "
Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube app biedt gebruikers een " "webinterface om toegang te krijgen tot e-mail." @@ -3286,8 +3350,8 @@ msgstr "Feedback indienen" msgid "Contribute" msgstr "Bijdragen" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Over ons" @@ -3920,7 +3984,7 @@ msgstr "Web Conferentie" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "JavaScript licentie-informatie" @@ -5128,9 +5192,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Wijzig" @@ -5699,6 +5763,7 @@ msgstr "Verwijder verbinding" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Verbinding" @@ -5911,6 +5976,7 @@ msgid "Edit Connection" msgstr "Wijzig verbinding" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Foutmelding:" @@ -6118,11 +6184,17 @@ msgstr "" "services levert." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Als je geen controle hebt over de router, kies er dan voor om deze niet te " "configureren. Om opties te zien om deze beperking te omzeilen, kies de optie " @@ -6519,6 +6591,40 @@ msgstr "Samenwerkingsprogramma" msgid "Password update failed. Please choose a stronger password." msgstr "Wachtwoordupdate mislukt. Kies een sterker wachtwoord." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Programma's" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Geautoriseerde SSH-sleutels" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Geautoriseerde SSH-sleutels" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6853,8 +6959,8 @@ msgstr "Herstart" msgid "Shutdown" msgstr "Uitschakelen" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Herstarten" @@ -7649,10 +7755,12 @@ msgid "N/A" msgstr "N.v.t." #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Ja" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Nee" @@ -7934,10 +8042,17 @@ msgstr "" "opgeschoond volgens de onderstaande instellingen." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Snapshots werken momenteel alleen op btrfs bestandssystemen, en enkel op de " "root-partitie. Snapshots zijn geen vervanging van %(username)s" @@ -9600,7 +9696,7 @@ msgstr "Wachtwoord Opslaan" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Nieuwe gebruiker registreren" @@ -9651,7 +9747,7 @@ msgid "Skip this step" msgstr "Deze stap overslaan" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Gebruikers" @@ -9660,6 +9756,10 @@ msgstr "Gebruikers" msgid "Edit user %(username)s" msgstr "Gebruiker %(username)s wijzigen" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Aanmelding" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9698,30 +9798,34 @@ msgstr "Gebruikers en bestanden verwijderen" msgid "Cancel" msgstr "Annuleer" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Succesvol uitgelogd." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Gebruiker %(username)s aangemaakt." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Gebruiker %(username)s bijgewerkt." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Gebruiker wijzigen" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "Gebruiker %(username)s verwijderd." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Wijzig wachtwoord" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Wachtwoord succesvol gewijzigd." @@ -9754,14 +9858,25 @@ msgstr "" msgid "Invalid key." msgstr "Ongeldige sleutel." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Voer een geldige gebruikersnaam in." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Openbare Sleutel" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9769,11 +9884,11 @@ msgstr "" "Openbare sleutel van de peer. Voorbeeld: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Eindpunt van de server" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -9781,11 +9896,11 @@ msgstr "" "Domeinnaam en poort in de vorm \"ip:poort\". Voorbeeld: " "demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Openbare sleutel van de server" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9793,25 +9908,32 @@ msgstr "" "Een lange reeks tekens, door de servicebeheerder bepaald. Voorbeeld: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Client IP-adres, aangeboden door de server" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "Het aan deze machine toegewezen IP-adres op de VPN na verbinding met het " "eindpunt. Deze waarde wordt meestal verstrekt door de serveroperator. " "Bijvoorbeeld: 192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Privésleutel van deze machine" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9824,11 +9946,11 @@ msgstr "" "echter op om dit zelf te verstrekken. Bijvoorbeeld: MConEJFIg6 + " "DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs =." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Vooraf gedeelde sleutel" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -9838,11 +9960,11 @@ msgstr "" "om een extra beveiligingslaag toe te voegen. Alleen invullen indien " "aanwezig. Voorbeeld: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Deze verbinding gebruiken voor al het uitgaande verkeer" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Meestal ingeschakeld op een VPN-service waardoor al het verkeer wordt " @@ -9856,72 +9978,112 @@ msgstr "VPN cliënt" msgid "As a Server" msgstr "Als server" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Public key for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Openbare sleutel voor deze %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Eindpunt" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Naar %(box_name)s poorten" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Peers die verbinding mogen maken met deze server:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "Toegestane IP adressen" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Tijdstip vorige verbinding" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" "Er zijn nog geen peers ingesteld om verbinding te maken met deze " "%(box_name)s." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Openbare sleutel voor deze %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Nog niet geconfigureerd." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Nieuwe partner toevoegen" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Geef toestemming voor client" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Wachtwoord succesvol gewijzigd." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +#, fuzzy +#| msgid "Standard Services" +msgid "Start WireGuard Server" +msgstr "Standaard Diensten" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Als Cliënt" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Servers waar %(box_name)s verbinding mee zal maken:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Eindpunt" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Er zijn nog geen verbindingen met externe servers ingesteld." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Nieuwe server toevoegen" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Verbinding toevoegen aan server" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +#, fuzzy +#| msgid "IP address to use for client:" +msgid "IP address that will be assigned to this client" +msgstr "IP-adres dat moet worden gebruikt voor client:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Cliënt toevoegen" @@ -9972,18 +10134,22 @@ msgstr "Server eindpunten:" msgid "Server public key:" msgstr "Openbare sleutel van de server:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Verzonden gegevens:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Ontvangen gegevens:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Laatste handshake:" @@ -10010,62 +10176,76 @@ msgstr "Openbare sleutel van deze machine:" msgid "IP address of this machine:" msgstr "IP-adres van deze machine:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Nieuwe client toegevoegd." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Er bestaat al een client met deze openbare sleutel" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Geauthoriseerde Cliënt" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Client geaktualiseerd." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Cliënt aanpassen" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Verwijder geauthoriseerde client" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Client verwijderd." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Client niet gevonden" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Nieuwe server toegevoegd." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Verbinding met server" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Server geaktualiseerd." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Wijzig verbinding met server" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Verwijder verbinding met server" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Server verwijderd." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Wachtwoord succesvol gewijzigd." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10258,6 +10438,24 @@ msgstr "configuratiebestand: {file}" msgid "Timeout waiting for package manager" msgstr "Time-out wachtend op pakketbeheerder" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "adres wordt aangevraagd" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Toepassing installeren" @@ -10438,35 +10636,35 @@ msgstr "" "gegevenseigendom. Het is gratis software waarmee u eenvoudig server-apps " "kunt installeren en beheren." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Startpagina" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Toepassingen" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Systeem" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Wijzig wachtwoord" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Uitschakelen" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Afmelden" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Selecteer taal" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Aanmelden" @@ -10565,11 +10763,15 @@ msgstr "" "Momenteel zijn de volgende netwerkinterfaces geconfigureerd als intern: " "%(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Negeren" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Notificaties" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "%(time_since)s geleden" @@ -10737,15 +10939,32 @@ msgstr "Hier" msgid "Setting unchanged" msgstr "Instelling onveranderd" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "voor het verwijderen van {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Wachtwoord van de SSH Server.
SSH-sleutel-gebaseerde authenticatie " +#~ "is nog niet mogelijk." + +#~ msgid "Single Sign On" +#~ msgstr "Eenmalige aanmelding" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Openbare sleutel voor deze %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Nog niet geconfigureerd." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12352,9 +12571,6 @@ msgstr "Gujarati" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "Er zijn geen aangepaste diensten ingeschakeld" -#~ msgid "Standard Services" -#~ msgstr "Standaard Diensten" - #, fuzzy #~| msgid "" #~| "When enabled, Syncthing's web interface will be available from
\n" "Language-Team: Polish " #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "The following disks are in use:" +msgid "SSH Authentication Type" +msgstr "Używane są następujące dyski:" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Nie powiodła się autoryzacja na zdalnym serwerze." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Key-based Authentication" +msgstr "Użyj podstawowej autentyfikacji HTTP" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Password-based Authentication" +msgstr "Użyj podstawowej autentyfikacji HTTP" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Hasło do serwera SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Hasło do serwera SSH.
Autoryzacja z użyciem klucza SSH nie jest jeszcze " -"możliwa." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Required for password-based authentication." +msgstr "Użyj podstawowej autentyfikacji HTTP" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Użyj podstawowej autentyfikacji HTTP" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Zdalne repozytorium już istnieje." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Wybierz zweryfikowany klucz publiczny SSH" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Odtwórz" @@ -543,17 +577,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Istniejące repozytorium nie jest zaszyfrowane." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Dysk na {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Utwórz nową kopię zapasową" @@ -589,7 +623,23 @@ msgstr "Dodaj zdalną lokalizację kopii zapasowej" msgid "Existing Backups" msgstr "Istniejące kopie zapasowe" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -614,7 +664,7 @@ msgstr "Istniejące kopie zapasowe" msgid "Caution:" msgstr "Uwaga:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, fuzzy, python-format #| msgid "" #| "The credentials for this repository are stored on your %(box_name)s.
Odtworzenie kopii zapasowej na nowym %(box_name)s wymaga danych logowania " "ssh i hasła szyfrowania, jeśli wybrano szyfrowanie." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Utwórz lokalizację" @@ -777,115 +827,117 @@ msgstr "" msgid "Verify Host" msgstr "Zweryfikuj hosta" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "Nie można zweryfikować klucza publicznego hosta SSH." + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "Nie powiodła się autoryzacja na zdalnym serwerze." + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "Błąd podczas ustanawiania połączenia z serwerem: {error}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "" -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 #, fuzzy #| msgid "Create Backup" msgid "Schedule Backups" msgstr "Utwórz kopię zapasową" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "Archiwum zostało utworzone." -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "Usuń archiwum" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "Archiwum zostało usunięte." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "Prześlij i odtwórz kopię zapasową" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 #, fuzzy #| msgid "Partition expanded successfully." msgid "Upload successful." msgstr "Partycja rozszerzona." -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "Brak kopii zapasowych." -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "Odtwórz z przesłanego pliku" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "Odtworzono dane z kopii zapasowej." -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "Nie ma dysków, na których można dodać repozytorium." -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "Utwórz repozytorium kopii zapasowych" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 #, fuzzy #| msgid "Added new remote SSH repository." msgid "Added new repository." msgstr "Dodano nowe zdalne repozytorium SSH." -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "Utwórz zdalne repozytorium kopii zapasowych" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "Dodano nowe zdalne repozytorium SSH." -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "Zweryfikuj klucz hosta SSH" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "Host SSH został już zweryfikowany." -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "Zweryfikowano hosta SSH." -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "Nie można zweryfikować klucza publicznego hosta SSH." - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "Nie powiodła się autoryzacja na zdalnym serwerze." - -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" -msgstr "Błąd podczas ustanawiania połączenia z serwerem: {error}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Usunięto repozytorium." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Usuń repozytorium" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" "Usunięto repozytorium. Umieszczone w nim kopie bezpieczeństwa nie zostały " "usunięte." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Nie udało się odmontować!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Montowanie nie udało się" @@ -966,7 +1018,7 @@ msgstr "Dostęp dla użytkowników anonimowych, którzy nie podali hasła." #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Prawa dostępu" @@ -1055,8 +1107,8 @@ msgstr "Spis plików" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Usuń" @@ -1136,6 +1188,7 @@ msgstr "Włącz DNSSEC" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 #, fuzzy #| msgid "Chat Server" msgid "Server" @@ -1458,13 +1511,20 @@ msgid "Webserver Home Page" msgstr "Strona startowa serwera Web" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Wybierz domyślną stronę, która wyświetli się, gdy ktoś odwiedzi twój " "{box_name} w sieci. Zwykle ustawia się do wyświetlenia pod nazwą domeny " @@ -2105,7 +2165,7 @@ msgid "Invalid domain name" msgstr "Niewłaściwa nazwa domeny" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Nazwa użytkownika" @@ -2422,8 +2482,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Stan" @@ -2485,8 +2545,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"
Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3422,8 +3482,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "O FreedomBox" @@ -3990,7 +4050,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Informacje o licencji JavaScript" @@ -5145,9 +5205,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5639,6 +5699,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5844,6 +5905,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 #, fuzzy #| msgid "error" @@ -6030,8 +6092,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6431,6 +6493,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Aplikacje" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6727,8 +6820,8 @@ msgstr "" msgid "Shutdown" msgstr "Wyłącz" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Uruchom ponownie" @@ -7433,10 +7526,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Tak" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Nie" @@ -7702,8 +7797,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -8050,28 +8146,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -#, fuzzy -#| msgid "Partition expanded successfully." -msgid "Logged out successfully." -msgstr "Partycja rozszerzona." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8893,13 +8967,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Rejestracja użytkowników wyłączona" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9141,35 +9208,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9178,106 +9249,106 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 #, fuzzy #| msgid "Invalid server name" msgid "Enter a valid username." msgstr "Niewłaściwa nazwa użytkownika" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 #, fuzzy #| msgid "Administrator Account" msgid "Authorization Password" msgstr "Konto Administratora" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 #, fuzzy #| msgid "Show password" msgid "Invalid password." msgstr "Pokaż hasło" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "Tworzenie użytkownika LDAP nie udało się: {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "Nieudane dodanie użytkownika do {group} grupy:{error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete" msgid "Delete user" msgstr "Usuń" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 #, fuzzy #| msgid "Failed to add new user to admin group." msgid "Failed to delete user." msgstr "Nieudane dodawanie użytkownika do grupy admin." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 #, fuzzy #| msgid "Failed to add new user to admin group." msgid "Failed to change user status." msgstr "Nieudane dodawanie użytkownika do grupy admin." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "Nieudane dodawanie użytkownika do grupy admin: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Utworzono konto użytkownika, możesz się teraz zalogować" @@ -9293,6 +9364,10 @@ msgstr "Usuń %(name)s" msgid "App permissions" msgstr "Prawa dostępu" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9306,7 +9381,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -9353,7 +9428,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -9362,6 +9437,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9401,31 +9480,37 @@ msgstr "Usuń pliki" msgid "Cancel" msgstr "Anuluj" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +#, fuzzy +#| msgid "Partition expanded successfully." +msgid "Logged out successfully." +msgstr "Partycja rozszerzona." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "{name} deleted." msgid "User %(username)s deleted." msgstr "Usunięto {name}." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -9454,57 +9539,70 @@ msgstr "" msgid "Invalid key." msgstr "Niewłaściwa nazwa hosta" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Invalid server name" +msgid "Enter a valid IPv4 address." +msgstr "Niewłaściwa nazwa użytkownika" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 #, fuzzy #| msgid "A list of IP addresses, separated by space" msgid "Client IP address provided by server" msgstr "Lista adresów IP rozdzielonych spacją" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9512,22 +9610,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9543,76 +9641,111 @@ msgstr "Klient czatu" msgid "As a Server" msgstr "Serwer czatu" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Mount Point" +msgid "Endpoint(s)" +msgstr "Punkt montowania" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "%(box_name)s Setup" +msgid "%(box_name)s VPN IP for services" +msgstr "Konfiguracja %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Partition expanded successfully." +msgid "WireGuard server not started yet." +msgstr "Partycja rozszerzona." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 #, fuzzy #| msgid "Chat Client" msgid "As a Client" msgstr "Klient czatu" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 #, fuzzy #| msgid "Authentication to remote server failed." msgid "No connections to remote servers are configured yet." msgstr "Nie powiodła się autoryzacja na zdalnym serwerze." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Connection refused" msgid "Add Connection to Server" msgstr "Odmowa dostępu" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 #, fuzzy #| msgid "Chat Client" msgid "Add Client" @@ -9671,18 +9804,22 @@ msgstr "Punkty końcowe serwera:" msgid "Server public key:" msgstr "Klucz publiczny serwera:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9706,88 +9843,102 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 #, fuzzy #| msgid "Remote backup repository already exists." msgid "Client with public key already exists" msgstr "Zdalne repozytorium już istnieje." -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 #, fuzzy #| msgid "Dynamic DNS Client" msgid "Allowed Client" msgstr "Klient Dynamic DNS" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 #, fuzzy #| msgid "Update setup" msgid "Updated client." msgstr "Aktualizuj ustawienia" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 #, fuzzy #| msgid "Dynamic DNS Client" msgid "Modify Client" msgstr "Klient Dynamic DNS" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 #, fuzzy #| msgid "Delete" msgid "Delete Allowed Client" msgstr "Usuń" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 #, fuzzy #| msgid "Archive deleted." msgid "Client deleted." msgstr "Archiwum zostało usunięte." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 #, fuzzy #| msgid "Repository not found" msgid "Client not found" msgstr "Nie odnaleziono repozytorium" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 #, fuzzy #| msgid "Added new remote SSH repository." msgid "Added new server." msgstr "Dodano nowe zdalne repozytorium SSH." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 #, fuzzy #| msgid "Connection refused" msgid "Connection to Server" msgstr "Odmowa dostępu" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 #, fuzzy #| msgid "Update setup" msgid "Updated server." msgstr "Aktualizuj ustawienia" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 #, fuzzy #| msgid "Error establishing connection to server: {}" msgid "Modify Connection to Server" msgstr "Błąd podczas ustanawiania połączenia z serwerem: {error}" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Direct connection to the Internet." msgid "Delete Connection to Server" msgstr "Bezpośrednie połłączenie z internetem." -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "Archive deleted." msgid "Server deleted." msgstr "Archiwum zostało usunięte." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Partition expanded successfully." +msgid "WireGuard server started successfully." +msgstr "Partycja rozszerzona." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9947,6 +10098,22 @@ msgstr "plik konfiguracyjny: {file}" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 #, fuzzy #| msgid "Install Apps" @@ -10147,37 +10314,37 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Dom" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplikacje" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Zmień hasło" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Wyłącz" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Wyloguj się" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "Język" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Zaloguj się" @@ -10279,13 +10446,17 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 #, fuzzy #| msgid "No certificate" msgid "Notifications" msgstr "Brak certyfikatu" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -10448,15 +10619,22 @@ msgstr "" msgid "Setting unchanged" msgstr "Ustawienie bez zmian" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Hasło do serwera SSH.
Autoryzacja z użyciem klucza SSH nie jest " +#~ "jeszcze możliwa." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -11386,9 +11564,6 @@ msgstr "Gujarati" #~ msgid "Select the domain name" #~ msgstr "Określ nazwę domeny" -#~ msgid "Applications" -#~ msgstr "Aplikacje" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/pt/LC_MESSAGES/django.po b/plinth/locale/pt/LC_MESSAGES/django.po index 5699792c9..639908b26 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-04-09 22:41+0000\n" "Last-Translator: tuliogit \n" "Language-Team: Portuguese " #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Modo de autenticação" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Falha na autenticação no servidor remoto." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "precisa de autenticação" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Desativar autenticação de senha" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Palavra-passe do servidor SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Palavra-passe do Servidor SSH.
A autenticação baseada em chave SSH ainda " -"não é possível." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Desativar autenticação de senha" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Desativar autenticação de senha" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "O repositório remoto de cópias de segurança já existe." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Seleccione a chave pública de SSH verificada" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Restaurar" @@ -553,17 +587,17 @@ msgstr "O sistema de backup está ocupado com outra operação." msgid "Not enough space left on the disk or remote location." msgstr "Não há espaço suficiente no disco ou no local remoto." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Repositório existente não está encriptado." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} armazenamento" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Criar nova cópia de segurança" @@ -599,7 +633,23 @@ msgstr "Adicionar localização remota de cópias de segurança" msgid "Existing Backups" msgstr "Cópias de segurança existentes" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -624,7 +674,7 @@ msgstr "Cópias de segurança existentes" msgid "Caution:" msgstr "Cuidado:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -635,7 +685,7 @@ msgstr "" "
Para restaurar uma cópia de segurança num novo %(box_name)s precisa das " "credenciais de SSH e, se escolhida, a frase-chave de encriptação." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Criar Localização" @@ -781,107 +831,109 @@ msgstr "" msgid "Verify Host" msgstr "Verificar Hospedeiro" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Agendamento de cópias de segurança atualizado." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Agendar backups" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Arquivo criado." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Eliminar Arquivo" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Arquivo eliminado." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Enviar e restaurar uma cópia de segurança" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Envio realizado com sucesso." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "Ficheiro de cópias de segurança não encontrado." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Restaurar de um ficheiro enviado" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "Ficheiros da cópia de segurança restaurados." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "Nenhum disco adicional disponível para adicionar um repositório." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Criar repositório de cópias de segurança" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "Adicionado novo repositório." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Criar repositório remoto de cópias de segurança" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Adicionar novo repositório de SSH remoto." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "Verificar chave de anfitrião SSH" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "Anfitrião SSH já verificado." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "Anfitrião SSH verificado." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "A chave pública do anfitrião SSH não pôde ser verificada." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "Falha na autenticação no servidor remoto." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Erro a estabelecer ligação ao servidor: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Agendamento de cópias de segurança atualizado." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Agendar backups" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Arquivo criado." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Eliminar Arquivo" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Arquivo eliminado." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Enviar e restaurar uma cópia de segurança" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Envio realizado com sucesso." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "Ficheiro de cópias de segurança não encontrado." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Restaurar de um ficheiro enviado" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "Ficheiros da cópia de segurança restaurados." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "Nenhum disco adicional disponível para adicionar um repositório." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Criar repositório de cópias de segurança" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Adicionado novo repositório." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Criar repositório remoto de cópias de segurança" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Adicionar novo repositório de SSH remoto." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "Verificar chave de anfitrião SSH" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "Anfitrião SSH já verificado." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "Anfitrião SSH verificado." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Repositório removido." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Remover Repositório" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Repositório removido. As cópias de segurança não foram eliminadas." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Remoção falhou!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Criação falhou" @@ -964,7 +1016,7 @@ msgstr "Permissões para usuários anônimos que não forneceram uma senha." #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Permissões" @@ -1050,8 +1102,8 @@ msgstr "Lista" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Eliminar" @@ -1129,6 +1181,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Servidor" @@ -1432,13 +1485,20 @@ msgid "Webserver Home Page" msgstr "Página Inicial do Servidor da Web" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Escolha a página padrão que deve ser exibida quando alguém visita seu " "{box_name} na web. Um caso de uso típico é definir seu blog ou wiki como a " @@ -2059,7 +2119,7 @@ msgid "Invalid domain name" msgstr "Nome de domínio inválido" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Nome de utilizador" @@ -2350,8 +2410,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Estado" @@ -2419,9 +2479,13 @@ msgstr "" "para o primeiro usuário administrador." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "<a href=\"/plinth/apps/roundcube/\">O aplicativo Roundcube</a> " "fornece interface web para usuários acessarem e-mails." @@ -3342,8 +3406,8 @@ msgstr "Enviar feedback" msgid "Contribute" msgstr "Contribuir" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Sobre" @@ -3984,7 +4048,7 @@ msgstr "Conferência web" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Informações sobre a licença JavaScript" @@ -5200,9 +5264,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Editar" @@ -5773,6 +5837,7 @@ msgstr "Eliminar ligação" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Ligação" @@ -5986,6 +6051,7 @@ msgid "Edit Connection" msgstr "Editar ligação" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Erro:" @@ -6192,11 +6258,17 @@ msgstr "" "forneça os serviços." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Se você não tiver controle sobre o seu roteador, opte por não configurá-lo. " "Para ver opções para superar essa limitação, escolha a opção \"Não tenho um " @@ -6603,6 +6675,40 @@ msgstr "Software de grupo" msgid "Password update failed. Please choose a stronger password." msgstr "Falha na atualização da senha. Escolha uma senha mais forte." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Aplicações" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Chaves SSH autorizadas" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Chaves SSH autorizadas" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6935,8 +7041,8 @@ msgstr "Reinício" msgid "Shutdown" msgstr "Desligar" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Reiniciar" @@ -7752,10 +7858,12 @@ msgid "N/A" msgstr "N / D" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Sim" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Não" @@ -8037,10 +8145,17 @@ msgstr "" "antigos serão limpos automaticamente de acordo com as configurações abaixo." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Atualmente, os snapshots funcionam apenas em sistemas de arquivos btrfs e " "apenas na partição raiz. Snapshots não substituem os backups <a href=\"/" @@ -8394,26 +8509,6 @@ msgstr "Algoritmo" msgid "Fingerprint" msgstr "Impressão digital" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Login único" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "Digite as letras na imagem para prosseguir para a página de login" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "Prosseguir para o login" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Iniciar sessão" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "Sessão terminada com sucesso." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9329,13 +9424,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Ir para Atualização de Distribuição" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "Liberar" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9612,37 +9700,41 @@ msgstr "" msgid "Users and Groups" msgstr "Usuários e Grupos" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Acesso a todos os serviços e configurações do sistema" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Verifique a entrada LDAP \"{search_item}\"" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Verifique a configuração do nslcd \"{key} {value}\"" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Verifique a configuração do nsswitch \"{database}\"" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "Digite as letras na imagem para prosseguir para a página de login" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "O nome de usuário foi escolhido ou está reservado." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" "Opcional. Usado para enviar e-mails para redefinir senhas e notificações " "importantes." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9656,47 +9748,47 @@ msgstr "" "efetuar login em todos os serviços. Eles também podem efetuar login no " "sistema via SSH e ter privilégios administrativos (sudo)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "Insira um nome de utilizador válido." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "Obrigatório. 150 caracteres ou menos. Somente letras, números e @/./-/_ do " "inglês." -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "Senha de autorização" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" "Digite a senha do usuário \"{user}\" para autorizar modificações na conta." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "Palavra-passe inválida." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "Falha na criação do usuário LDAP: {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "Falha ao adicionar novo usuário ao grupo {group} : {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "Chaves SSH autorizadas" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9707,11 +9799,11 @@ msgstr "" "uma em cada linha. Linhas em branco e linhas que começam com # serão " "ignoradas." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "Excluir usuário" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -9720,40 +9812,40 @@ msgstr "" "ele. A exclusão de arquivos pode ser evitada definindo a conta de usuário " "como inativa." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "Falha ao excluir usuário." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "Falha ao renomear usuário LDAP." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Falha ao remover usuário do grupo." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Falha ao adicionar usuário ao grupo." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "Não é possível definir chaves SSH." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "Falha ao alterar o status do usuário." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "Falha ao alterar a senha do usuário LDAP." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "Falha ao adicionar novo usuário ao grupo de administração: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Conta de utilizador criada, a sua sessão já foi iniciada" @@ -9765,6 +9857,10 @@ msgstr "Gerenciar contas" msgid "App permissions" msgstr "Permissões do aplicativo" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "Prosseguir para o login" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9778,7 +9874,7 @@ msgstr "Salvar senha" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Criar utilizador" @@ -9834,7 +9930,7 @@ msgid "Skip this step" msgstr "Pular esta etapa" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Usuários" @@ -9843,6 +9939,10 @@ msgstr "Usuários" msgid "Edit user %(username)s" msgstr "Editar utilizador %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Iniciar sessão" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9886,30 +9986,34 @@ msgstr "Excluir usuário e arquivos" msgid "Cancel" msgstr "Cancelar" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Sessão terminada com sucesso." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Usuário %(username)s criado." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Usuário %(username)s atualizado." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Editar usuário" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "Usuário %(username)s excluído." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Alterar a senha" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Senha alterada com sucesso." @@ -9941,25 +10045,36 @@ msgstr "" msgid "Invalid key." msgstr "Chave inválida." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Insira um nome de utilizador válido." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Chave pública" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" "Chave pública do par. Exemplo: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Ponto final do servidor" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -9967,11 +10082,11 @@ msgstr "" "Nome de domínio e porta no formato \"ip:porta\". Exemplo: " "demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Chave pública do servidor" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9979,25 +10094,32 @@ msgstr "" "Fornecido pelo operador do servidor, uma longa sequência de caracteres. " "Exemplo: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Endereço IP do cliente fornecido pelo servidor" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "Endereço IP atribuído a esta máquina na VPN após a conexão ao endpoint. Este " "valor geralmente é fornecido pelo operador do servidor. Exemplo: " "192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Chave privada desta máquina" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10009,11 +10131,11 @@ msgstr "" "recomendada. No entanto, alguns operadores de servidor insistem em fornecê-" "la. Exemplo: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Chave pré-compartilhada" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10023,11 +10145,11 @@ msgstr "" "adicionar uma camada adicional de segurança. Preencha somente se fornecida. " "Exemplo: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Use esta conexão para enviar todo o tráfego de saída" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Normalmente verificado para um serviço VPN através do qual todo o tráfego é " @@ -10041,70 +10163,108 @@ msgstr "Cliente VPN" msgid "As a Server" msgstr "Como um servidor" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Public key for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Chave pública para este %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Ponto final" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Para %(box_name)s Portas" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Pares autorizados a se conectar a este servidor:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "IPs permitidos" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Última hora conectada" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Nenhum peer configurado para se conectar a este %(box_name)s ainda." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Chave pública para este %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Ainda não configurado." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Adicionar um novo par" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Adicionar cliente permitido" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Senha alterada com sucesso." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Como cliente" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Servidores aos quais %(box_name)s se conectará:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Ponto final" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Nenhuma conexão com servidores remotos foi configurada ainda." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Adicionar um novo servidor" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Adicionar conexão ao servidor" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +#, fuzzy +#| msgid "IP address to use for client:" +msgid "IP address that will be assigned to this client" +msgstr "Endereço IP a ser usado pelo cliente:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Adicionar cliente" @@ -10155,18 +10315,22 @@ msgstr "Pontos finais do servidor:" msgid "Server public key:" msgstr "Chave pública do servidor:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Dados transmitidos:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Dados recebidos:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Último aperto de mão:" @@ -10193,62 +10357,76 @@ msgstr "Chave pública desta máquina:" msgid "IP address of this machine:" msgstr "Endereço IP desta máquina:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Adicionado novo cliente." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Cliente com chave pública já existe" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Cliente Permitido" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Cliente atualizado." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Modificar cliente" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Excluir cliente permitido" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Cliente excluído." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Cliente não encontrado" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Adicionado novo servidor." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Conexão com o servidor" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Servidor atualizado." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Modificar conexão com o servidor" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Excluir conexão com o servidor" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Servidor excluído." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Senha alterada com sucesso." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10442,6 +10620,24 @@ msgstr "ficheiro de configuração: {file}" msgid "Timeout waiting for package manager" msgstr "Tempo limite de espera para o gerenciador de pacotes" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "endereço de solicitação" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Instalando o aplicativo" @@ -10620,35 +10816,35 @@ msgstr "" "dados. É um software gratuito que permite instalar e gerenciar aplicativos " "de servidor com facilidade." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Início" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplicações" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistema" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Alterar palavra-passe" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Desligar" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Terminar sessão" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Selecionar idioma" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Iniciar sessão" @@ -10747,11 +10943,15 @@ msgstr "" "Atualmente, as seguintes interfaces de rede estão configuradas como " "internas: %(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Liberar" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Notificações" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -10919,15 +11119,32 @@ msgstr "Aqui" msgid "Setting unchanged" msgstr "Definição inalterada" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "antes da desinstalação do {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Palavra-passe do Servidor SSH.
A autenticação baseada em chave SSH " +#~ "ainda não é possível." + +#~ msgid "Single Sign On" +#~ msgstr "Login único" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Chave pública para este %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Ainda não configurado." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -11330,11 +11547,6 @@ msgstr "Gujarati" #~ msgid "Settings unchanged" #~ msgstr "Definição inalterada" -#, fuzzy -#~| msgid "Applications" -#~ msgid "Application enabled" -#~ msgstr "Aplicações" - #, fuzzy #~| msgid "Applications" #~ msgid "Application disabled" diff --git a/plinth/locale/ru/LC_MESSAGES/django.po b/plinth/locale/ru/LC_MESSAGES/django.po index b375d7ba1..4257becfd 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-12-19 20:00+0000\n" "Last-Translator: OwlGale \n" "Language-Team: Russian " #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Режим проверки подлинности" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Аутентификация на удалённый сервер не прошла." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "требуется аутентификация" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Отключить аутентификацию по паролю" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Пароль SSH-сервера" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Пароль для сервера SSH.
Аутентификация на основе SSH-ключа пока не " -"поддерживается." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Отключить аутентификацию по паролю" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Отключить аутентификацию по паролю" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Удалённое хранилище резервных копий уже существует." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Выберите проверенный открытый ключ SSH" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Восстановить" @@ -551,17 +585,17 @@ msgstr "Резервная система занята другой операц msgid "Not enough space left on the disk or remote location." msgstr "Не достаточно места на диске или удалённом хранилище." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Имеющийся репозиторий не зашифрован." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Сохранение данных {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Создать новую резервную копию" @@ -597,7 +631,23 @@ msgstr "Добавить удаленное хранилище резервны msgid "Existing Backups" msgstr "Существующие резервные копии" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -622,7 +672,7 @@ msgstr "Существующие резервные копии" msgid "Caution:" msgstr "Предупреждение:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -633,7 +683,7 @@ msgstr "" "Чтобы провести резервное сохранение на %(box_name)s, вы должны ввести данные " "для входа SSH и, если выбрано, парольную фразу шифрования." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Создание расположения" @@ -765,107 +815,109 @@ msgstr "" msgid "Verify Host" msgstr "Проверить хост" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Расписание резервного копирования обновлено." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Расписание резервного копирования" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Архив создан." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Удалить архив" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Архив удалён." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Загрузить и восстановить резервную копию" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Загрузка прошла успешно." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "Резервных копий не найдено." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Восстановить из загруженного файла" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "Восстановленные файлы из резервного копирования." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "Нет дополнительных дисков, чтобы добавить репозиторий." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Создать репозиторий резервных копий" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "Добавлен новый репозиторий." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Создать удаленный репозиторий резервного сохранения" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Добавлен новый удалённый SSH-репозиторий." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "Проверить ключ SSH хоста" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "SSH хост уже проверен." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "SSH хост проверен." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "Открытый ключ SSH хоста не может быть проверен." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "Аутентификация на удалённый сервер не прошла." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Ошибка при установке соединения с сервером: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Расписание резервного копирования обновлено." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Расписание резервного копирования" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Архив создан." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Удалить архив" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Архив удалён." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Загрузить и восстановить резервную копию" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Загрузка прошла успешно." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "Резервных копий не найдено." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Восстановить из загруженного файла" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "Восстановленные файлы из резервного копирования." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "Нет дополнительных дисков, чтобы добавить репозиторий." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Создать репозиторий резервных копий" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Добавлен новый репозиторий." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Создать удаленный репозиторий резервного сохранения" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Добавлен новый удалённый SSH-репозиторий." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "Проверить ключ SSH хоста" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "SSH хост уже проверен." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "SSH хост проверен." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Репозиторий удалён." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Удалить репозиторий" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Репозиторий удален. Бэкапы не удалялись." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Размонтирование не удалось!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Монтирование не удалась" @@ -947,7 +999,7 @@ msgstr "Разрешения для анонимных пользователе #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Разрешения" @@ -1035,8 +1087,8 @@ msgstr "Список" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Удалить" @@ -1112,6 +1164,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Сервер" @@ -1415,13 +1468,20 @@ msgid "Webserver Home Page" msgstr "Домашняя страница веб-сервера" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Выберите страницу по умолчанию, которая должна быть представлена, когда кто-" "то посещает ваш {box_name}. Типичный пример – это ваш блог или вики в " @@ -2029,7 +2089,7 @@ msgid "Invalid domain name" msgstr "Недопустимое имя домена" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Имя пользователя" @@ -2317,8 +2377,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Статус" @@ -2383,9 +2443,13 @@ msgstr "" "администратора, созданный первым." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Приложение Roundcube предоставляет " "пользователям веб-интерфейс для доступа к электронной почте." @@ -3305,8 +3369,8 @@ msgstr "Отправить отзыв" msgid "Contribute" msgstr "Помочь проекту" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "О проекте" @@ -3960,7 +4024,7 @@ msgstr "Веб-конференция" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Информация о лицензии JavaScript" @@ -5175,9 +5239,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Редактировать" @@ -5746,6 +5810,7 @@ msgstr "Удаление подключения" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Подключение" @@ -5956,6 +6021,7 @@ msgid "Edit Connection" msgstr "Редактирование подключения" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Ошибка:" @@ -6165,11 +6231,17 @@ msgstr "" "%(box_name)s предоставлял службы." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Если у вас нет контроля над маршрутизатором, выберите не настраивать его. " "Чтобы увидеть варианты преодоления этого ограничения, выберите опцию 'У меня " @@ -6576,6 +6648,40 @@ msgid "Password update failed. Please choose a stronger password." msgstr "" "Обновление пароля не удалось. Пожалуйста, выберите более надежный пароль." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Приложения" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Авторизованные SSH ключи" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Авторизованные SSH ключи" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6907,8 +7013,8 @@ msgstr "Перезагрузка" msgid "Shutdown" msgstr "Выключить" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Перезапустить" @@ -7711,10 +7817,12 @@ msgid "N/A" msgstr "Н/Д" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Да" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Нет" @@ -7996,10 +8104,17 @@ msgstr "" "удаляются в соответствии с установками ниже." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Снимки системы работают только на файловой системе btrfs и только на " "корневом разделе. Снимки — не замена бэкапам %(username)s" @@ -9727,7 +9823,7 @@ msgstr "Сохранить пароль" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Создать пользователя" @@ -9778,7 +9874,7 @@ msgid "Skip this step" msgstr "Пропустить этот шаг" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Пользователи" @@ -9787,6 +9883,10 @@ msgstr "Пользователи" msgid "Edit user %(username)s" msgstr "Редактирование пользователя %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Войти" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9798,8 +9898,8 @@ msgid "" "Use the change password form to " "change the password." msgstr "" -"Для смены пароля используйте форму " -"Изменить пароль." +"Для смены пароля используйте форму Изменить пароль." #: plinth/modules/users/templates/users_update.html:37 #: plinth/templates/language-selection.html:17 @@ -9828,30 +9928,34 @@ msgstr "Удаление пользователя и файлов" msgid "Cancel" msgstr "Отмена" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Выход выполнен успешно." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Пользователь %(username)s создан." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Пользователь %(username)s обновлен." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Редактирование пользователя" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "Пользователь %(username)s удален." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Изменить пароль" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Пароль успешно изменён." @@ -9884,36 +9988,47 @@ msgstr "" msgid "Invalid key." msgstr "Недействительный ключ." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Введите действительное имя пользователя." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Открытый ключ" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" "Открытый ключ пира. Пример: MConEJFIg6 + DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs =." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Конечная точка сервера" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" "Доменное имя и порт в виде \"ip:port\". Пример: demo.wireguard.com:12912." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Открытый ключ сервера" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9921,25 +10036,32 @@ msgstr "" "Предоставляется оператором сервера, длинная строка символов. Пример: " "MConEJFIg6 + DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs =." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "IP-адрес клиента, предоставленный сервером" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "IP-адрес, назначенный этому компьютеру в VPN после подключения к конечной " "точке. Это значение обычно предоставляется оператором сервера. Пример: " "192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Приватный ключ этой машины" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9951,11 +10073,11 @@ msgstr "" "рекомендуемый способ. Однако некоторые операторы серверов настаивают на " "этом. Пример: MConEJFIg6 + DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs =." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Общий ключ" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -9965,11 +10087,11 @@ msgstr "" "дополнительного уровня безопасности. Заполняйте, только если предоставлено. " "Пример: MConEJFIg6 + DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs =." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Используйте это соединение для отправки всего исходящего трафика" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Обычно проверяется на наличие службы VPN, через которую отправляется весь " @@ -9983,71 +10105,111 @@ msgstr "VPN клиент" msgid "As a Server" msgstr "Как сервер" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Public key for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Открытый ключ для этого %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Конечная точка" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "В %(box_name)s Порты" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Пиры, которым разрешено подключаться к этому серверу:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "Разрешенные IP-адреса" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Время последнего подключения" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" "Нет одноранговых узлов, настроенных для подключения к этому %(box_name)s." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Открытый ключ для этого %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Еще не настроен." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Добавление нового однорангового узла" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Добавить разрешенный клиент" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Пароль успешно изменён." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +#, fuzzy +#| msgid "Standard Services" +msgid "Start WireGuard Server" +msgstr "Стандартные службы" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Как клиент" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Серверы, к которым %(box_name)s будет подключаться:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Конечная точка" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Подключения к удаленным серверам пока не настроены." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Добавить новый сервер" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Добавить подключение к серверу" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +#, fuzzy +#| msgid "IP address to use for client:" +msgid "IP address that will be assigned to this client" +msgstr "IP-адрес для использования клиентом:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Добавить клиент" @@ -10098,18 +10260,22 @@ msgstr "Конечные точки сервера:" msgid "Server public key:" msgstr "Открытый ключ сервера:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Передаваемые данные:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Полученные данные:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Последнее рукопожатие:" @@ -10136,62 +10302,76 @@ msgstr "Открытый ключ этой машины:" msgid "IP address of this machine:" msgstr "IP-адрес этой машины:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Добавлен новый клиент." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Клиент с открытым ключом уже существует" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Разрешенный клиент" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Обновленный клиент." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Изменить клиент" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Удалить разрешенный клиент" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Клиент удалён." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Клиент не найден" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Добавлен новый сервер." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Подключение к серверу" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Обновленный сервер." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Изменить подключение к серверу" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Удалить соединение с сервером" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Сервер удален." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Пароль успешно изменён." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10385,6 +10565,24 @@ msgstr "Файл настроек: {file}" msgid "Timeout waiting for package manager" msgstr "Таймаут ожидания менеджера пакетов" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "запрашиваемый адрес" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Установка приложения" @@ -10554,35 +10752,35 @@ msgstr "" "обеспечение, позволяющее легко устанавливать серверные приложения и " "управлять ими." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Главная" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Приложения" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Система" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Изменить пароль" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Завершить работу" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Выход" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Выбрать язык" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Войти" @@ -10682,11 +10880,15 @@ msgstr "" "В настоящее время следующие сетевые интерфейсы сконфигурированы как " "внутренние: %(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Закрыть" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Уведомления" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "%(time_since)s назад" @@ -10848,15 +11050,32 @@ msgstr "Здесь" msgid "Setting unchanged" msgstr "Настройки без изменений" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "перед удалением {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Гуджарати" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Пароль для сервера SSH.
Аутентификация на основе SSH-ключа пока не " +#~ "поддерживается." + +#~ msgid "Single Sign On" +#~ msgstr "Единый вход" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Открытый ключ для этого %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Еще не настроен." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12448,9 +12667,6 @@ msgstr "Гуджарати" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "У вас нет включенных пользовательских служб" -#~ msgid "Standard Services" -#~ msgstr "Стандартные службы" - #, fuzzy #~| msgid "" #~| "When enabled, Syncthing's web interface will be available from \n" "Language-Team: Sinhala SSH key-based authentication is not yet " -"possible." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +msgid "Password-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:261 +msgid "SSH server password" +msgstr "" + +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "" @@ -507,17 +529,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "" @@ -553,7 +575,23 @@ msgstr "" msgid "Existing Backups" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -578,7 +616,7 @@ msgstr "" msgid "Caution:" msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -586,7 +624,7 @@ msgid "" "if chosen, the encryption passphrase." msgstr "" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "" @@ -702,107 +740,107 @@ msgstr "" msgid "Verify Host" msgstr "" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +msgid "Error establishing connection to server: {} {} {}" msgstr "" -#: plinth/modules/backups/views.py:476 -msgid "Repository removed." +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." msgstr "" #: plinth/modules/backups/views.py:490 +msgid "Repository removed." +msgstr "" + +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "" @@ -872,7 +910,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -957,8 +995,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1028,6 +1066,7 @@ msgstr "" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1308,7 +1347,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1849,7 +1888,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2117,8 +2156,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2164,8 +2203,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"
Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -2996,8 +3035,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "පිළිබඳව" @@ -3539,7 +3578,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4574,9 +4613,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5048,6 +5087,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5251,6 +5291,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5433,8 +5474,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5806,6 +5847,35 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +msgid "Application" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6094,8 +6164,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -6752,10 +6822,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7005,8 +7077,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7319,26 +7392,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8104,13 +8157,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8333,35 +8379,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8370,94 +8420,94 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8469,6 +8519,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8482,7 +8536,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8524,7 +8578,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8533,6 +8587,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8569,30 +8627,34 @@ msgstr "" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8619,55 +8681,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8675,22 +8748,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8702,70 +8775,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -8814,18 +8917,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -8849,62 +8956,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9061,6 +9180,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9211,35 +9346,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9332,11 +9467,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9484,11 +9623,11 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" diff --git a/plinth/locale/sl/LC_MESSAGES/django.po b/plinth/locale/sl/LC_MESSAGES/django.po index 2df31cfd7..a8866156e 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Slovenian " #: plinth/modules/backups/forms.py:255 +msgid "SSH Authentication Type" +msgstr "" + +#: plinth/modules/backups/forms.py:256 +msgid "Choose how to authenticate to the remote SSH server." +msgstr "" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Configuration updated" +msgid "Password-based Authentication" +msgstr "Konfiguracija je posodobljena" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Geslo strežnika SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" -"Geslo strežnika SSH.
Preverjanje pristnosti na osnovi ključev SSH še " -"ni omogočeno." #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 #, fuzzy #| msgid "Create remote backup repository" msgid "Remote backup repository already exists." msgstr "Ustvari oddaljeno skladišče za rezervne kopije" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Obnovitev" @@ -553,17 +577,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Shramba {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 #, fuzzy #| msgid "Create remote backup repository" msgid "Create a new backup" @@ -613,7 +637,23 @@ msgstr "Ustvari oddaljeno skladišče za rezervne kopije" msgid "Existing Backups" msgstr "Obstoječe rezervne kopije" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -638,7 +678,7 @@ msgstr "Obstoječe rezervne kopije" msgid "Caution:" msgstr "Pozor:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, fuzzy, python-format #| msgid "" #| "The credentials for this repository are stored on your %(box_name)s.
Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3252,8 +3293,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "" @@ -3798,7 +3839,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4889,9 +4930,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5375,6 +5416,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5578,6 +5620,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5762,8 +5805,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6151,6 +6194,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Encryption" +msgid "Application" +msgstr "Šifriranje" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6443,8 +6517,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -7128,10 +7202,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7385,8 +7461,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7711,26 +7788,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8526,13 +8583,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8761,35 +8811,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8798,100 +8852,100 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 #, fuzzy #| msgid "Invalid hostname" msgid "Enter a valid username." msgstr "Neveljavno ime gostitelja" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 #, fuzzy #| msgid "Invalid hostname" msgid "Invalid password." msgstr "Neveljavno ime gostitelja" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete Archive" msgid "Delete user" msgstr "Izbriši arhiv" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8905,6 +8959,10 @@ msgstr "Ustvari novo skladišče" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8918,7 +8976,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8960,7 +9018,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8969,6 +9027,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9007,31 +9069,35 @@ msgstr "Izbriši arhiv" msgid "Cancel" msgstr "Prekliči" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "Archive deleted." msgid "User %(username)s deleted." msgstr "Arhiv je izbrisan." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -9060,55 +9126,68 @@ msgstr "" msgid "Invalid key." msgstr "Neveljavno ime gostitelja" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Invalid hostname" +msgid "Enter a valid IPv4 address." +msgstr "Neveljavno ime gostitelja" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9116,22 +9195,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9145,72 +9224,102 @@ msgstr "" msgid "As a Server" msgstr "Strežnik z imenom domene" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Connection refused" msgid "Add Connection to Server" msgstr "Povezava je zavrnjena" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -9267,18 +9376,22 @@ msgstr "Skrbništvo strežnika" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9304,78 +9417,90 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 #, fuzzy #| msgid "Create remote backup repository" msgid "Client with public key already exists" msgstr "Ustvari oddaljeno skladišče za rezervne kopije" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 #, fuzzy #| msgid "Archive deleted." msgid "Client deleted." msgstr "Arhiv je izbrisan." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 #, fuzzy #| msgid "Repository not found" msgid "Client not found" msgstr "Ne najdem skladišča" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 #, fuzzy #| msgid "Added new repository." msgid "Added new server." msgstr "Dodano je novo skladišče." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 #, fuzzy #| msgid "Connection refused" msgid "Connection to Server" msgstr "Povezava je zavrnjena" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 #, fuzzy #| msgid "Error installing application: {error}" msgid "Modify Connection to Server" msgstr "Napaka ob nameščanju aplikacije: {error}" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Error installing application: {error}" msgid "Delete Connection to Server" msgstr "Napaka ob nameščanju aplikacije: {error}" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "Archive deleted." msgid "Server deleted." msgstr "Arhiv je izbrisan." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9533,6 +9658,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9699,35 +9840,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9820,11 +9961,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9979,15 +10124,22 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Geslo strežnika SSH.
Preverjanje pristnosti na osnovi ključev SSH " +#~ "še ni omogočeno." + #~ msgid "Minetest" #~ msgstr "Minetest" diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index c89ab2478..521330137 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2025-12-17 07:00+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-02-04 06:01+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" @@ -17,7 +17,7 @@ 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 5.15.1-dev\n" +"X-Generator: Weblate 5.16-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -104,15 +104,15 @@ msgstr "Gjuhë për t’u përdorur për të paraqitur këtë ndërfaqe web" msgid "Use the language preference set in the browser" msgstr "Përdor parapëlqim gjuhe të caktuar te shfletuesi" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Kreu" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Aplikacione" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "Sistem" @@ -135,37 +135,41 @@ msgstr "Siguri" msgid "Administration" msgstr "Administrim" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "" "Sistemi ka gjasa të jetë nën ngarkesë të madhe. Ju lutemi, riprovoni më vonë." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "S’u gjet faqe: {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "Gabim në ekzekutimin e veprimit." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "Gabim në ngarkimin e faqes." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Shërbyes HTTP Apache" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Shërbyes" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "Ndërfaqe Web e {box_name} (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -213,16 +217,16 @@ msgstr "Lokale" msgid "mDNS" msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "Kopjeruajtjet lejojnë krijim dhe administrim arkivash kopjeruajtjeje." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Kopjeruajtje" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -231,19 +235,19 @@ msgstr "" "Parapëlqeni një vendndodhje të largët kopjeruajtjesh të fshehtëzuara ose një " "disk ekstra bashkëngjitur." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "Aktivizoni një Plan Kopjeruajtjesh" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "Kalo te {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -252,7 +256,7 @@ msgstr "" "Dështoi një kopjeruajtje e planifikuar. {error_count} përpjekjet e mëparshme " "s’patën sukses. Gabimi i fundit qe: {error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Gabim Gjatë Kopjeruajtjes" @@ -406,7 +410,9 @@ msgid "Passphrase" msgstr "Frazëkalim" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Frazëkalim; I nevojshëm vetëm kur përdoret fshehtëzim." #: plinth/modules/backups/forms.py:190 @@ -446,29 +452,57 @@ msgstr "" "për/te/depoja/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Mënyrë Mirëfilltësimi" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Mirëfilltësimi te shërbyesi i largët dështoi." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "lyp mirëfilltësim" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Çaktivizo mirëfilltësim fjalëkalimi" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Fjalëkalim shërbyesi SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Fjalëkalim i Shërbyesit SSH.
Mirëfilltësimi SSH me bazë kyçe s’është ende " -"i mundur." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Çaktivizo mirëfilltësim fjalëkalimi" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Çaktivizo mirëfilltësim fjalëkalimi" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Depoja e largët e kopjeruajtjeve ekziston tashmë." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Përzgjidhni kyç SSH publik të verifikuar" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Riktheje" @@ -549,17 +583,17 @@ msgid "Not enough space left on the disk or remote location." msgstr "" "S’ka mbetur hapësirë e mjaftueshme te disku apo te vendndodhja e largët." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Depoja ekzistuese s’është e fshehtëzuar." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Depozitë {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Krijoni një kopjeruajtje të re" @@ -595,7 +629,23 @@ msgstr "Shtoni Vendndodhje të Largët Kopjeruajtjeje" msgid "Existing Backups" msgstr "Kopjeruajtje Ekzistuese" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -620,7 +670,7 @@ msgstr "Kopjeruajtje Ekzistuese" msgid "Caution:" msgstr "Kujdes:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -631,7 +681,7 @@ msgstr "" "rikthyer në punë kopjeruajtje te një %(box_name)s i ri ju duhen kredencialet " "SSH dhe, nëse qe zgjedhur, frazëkalimi për fshehtëzimin." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Krijoni Vendndodhje" @@ -763,107 +813,109 @@ msgstr "" msgid "Verify Host" msgstr "Verifikoni Strehë" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Orari i kopjeruajtjeve u përditësua." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Planifikoni Kopjeruajtje" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Arkivi u krijua." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Fshini Arkiv" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Arkivi u fshi." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Ngarkoni dhe riktheni një kopjeruajtje" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Ngarkim i suksesshëm." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "S’u gjet kartelë kopjeruajtje." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Riktheni prej kartele të ngarkuar" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "U rikthyen kartela prej kopjeruajtjeje." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "S’ka disqe shtesë ku të shtohet një depo." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Krijoni depo kopjeruajtesh" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "U shtua depo e re." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Krijoni depo të largët kopjeruajtjesh" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Shtoni depo SSH të re të largët." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "Verifikoni kyç strehe SSH" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "Strehë SSH e verifikuar tashmë." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "Streha SSH u verifikua." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "S’u verifikua dot kyç publik strehe SSH." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "Mirëfilltësimi te shërbyesi i largët dështoi." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Gabim gjatë vendosjes së lidhjes me shërbyesin: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Orari i kopjeruajtjeve u përditësua." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Planifikoni Kopjeruajtje" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Arkivi u krijua." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Fshini Arkiv" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Arkivi u fshi." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Ngarkoni dhe riktheni një kopjeruajtje" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Ngarkim i suksesshëm." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "S’u gjet kartelë kopjeruajtje." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Riktheni prej kartele të ngarkuar" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "U rikthyen kartela prej kopjeruajtjeje." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "S’ka disqe shtesë ku të shtohet një depo." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Krijoni depo kopjeruajtesh" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "U shtua depo e re." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Krijoni depo të largët kopjeruajtjesh" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Shtoni depo SSH të re të largët." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "Verifikoni kyç strehe SSH" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "Strehë SSH e verifikuar tashmë." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "Streha SSH u verifikua." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Depoja u hoq." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Hiqni Depo" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Depoja u hoq. Kopjeruajtjet s’u fshinë." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Çmontimi dështoi!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Montimi dështoi" @@ -945,7 +997,7 @@ msgstr "Leje për përdorues anonimë, të cilët s’kanë dhënë fjalëkalim. #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Leje" @@ -1031,8 +1083,8 @@ msgstr "Listë" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Fshije" @@ -1110,6 +1162,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Shërbyes" @@ -1415,13 +1468,20 @@ msgid "Webserver Home Page" msgstr "Faqe Hyrëse Shërbyesi" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Zgjidhni faqen parazgjedhje që duhet të shërbehet kur dikush viziton " "{box_name} tuaj në web. Një rast i rëndomtë do të ishte të vini blogun apo " @@ -2030,7 +2090,7 @@ msgid "Invalid domain name" msgstr "Emër i pavlefshëm përkatësie" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Emër përdoruesi" @@ -2323,8 +2383,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Gjendje" @@ -2390,9 +2450,13 @@ msgstr "" "përgjegjës." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Aplikacioni Roundcube furnizon " "ndërfaqe web për përdoruesit për të përdorur email-in." @@ -3310,8 +3374,8 @@ msgstr "Parashtroni Përshtypjet" msgid "Contribute" msgstr "Jepni Ndihmesë" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Mbi" @@ -3976,7 +4040,7 @@ msgstr "Konferencë Web" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Hollësi licence JavaScript" @@ -4670,8 +4734,8 @@ msgid "" "on the default port (30000). To connect to the server, a Luanti client is needed." msgstr "" -"Luanti, i njohur dikur si Minetest, është një bankëprovë blloqesh lojërash “" -"botë e pafundme” me shumë lojtarë. Ky modul i bën të mundur shërbyesit " +"Luanti, i njohur dikur si Minetest, është një bankëprovë blloqesh lojërash " +"“botë e pafundme” me shumë lojtarë. Ky modul i bën të mundur shërbyesit " "Luanti të xhirojë mbi këtë {box_name}, në portën parazgjedhje (30000). Që të " "lidheni me shërbyesin, lypset një klient Luanti." @@ -5199,9 +5263,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Përpunoni" @@ -5769,6 +5833,7 @@ msgstr "Fshije lidhjen" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Lidhje" @@ -5981,6 +6046,7 @@ msgid "Edit Connection" msgstr "Përpunoni Lidhje" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Gabim:" @@ -6189,11 +6255,17 @@ msgstr "" "që kështu %(box_name)s-i të japë shërbimet." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Nëse s’keni kontrollin e rrugëzuesit tuaj, zgjidhni të mos formësohet. Që të " "shihni mundësitë për kapërcimin e këtij kufizimi, zgjidhni mundësinë “S’kam " @@ -6601,6 +6673,40 @@ msgstr "" "Përditësimi i fjalëkalimit dështoi. Ju lutemi, zgjidhni një fjalëkalim më të " "fortë." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Action" +msgid "Application" +msgstr "Veprim" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Kyçe SSH të autorizuar" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Kyçe SSH të autorizuar" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6934,8 +7040,8 @@ msgstr "Rinisu" msgid "Shutdown" msgstr "Fike" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Rinise" @@ -7745,10 +7851,12 @@ msgid "N/A" msgstr "N/A" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Po" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Jo" @@ -8032,10 +8140,17 @@ msgstr "" "vjetra do të spastrohen automatikisht, në përputhje me rregullimet më poshtë." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Fotografimet aktualisht funksionojnë vetëm në sisteme btrfs kartelash dhe " "vetëm në pjesë rrënjë. Fotografimet s’janë zëvendësim për %(username)s" @@ -9766,7 +9862,7 @@ msgstr "Ruaje Fjalëkalimin" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Krijoni Përdorues" @@ -9818,7 +9914,7 @@ msgid "Skip this step" msgstr "Anashkalojeni këtë hap" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Përdorues" @@ -9827,6 +9923,10 @@ msgstr "Përdorues" msgid "Edit user %(username)s" msgstr "Përpunoni përdoruesin %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Hyrje" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9869,30 +9969,34 @@ msgstr "Fshini përdorues dhe kartela" msgid "Cancel" msgstr "Anuloje" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "U dol me sukses." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Përdoruesi %(username)s u krijua." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Përdoruesi %(username)s u përditësua." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Përpunoni Përdorues" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "Përdoruesi %(username)s u fshi." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Ndryshoni Fjalëkalimin" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Fjalëkalimi u ndryshua me sukses." @@ -9926,14 +10030,25 @@ msgstr "" msgid "Invalid key." msgstr "Kyç i pavlefshëm." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Jepni një emër përdoruesi të vlefshëm." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Kyç Publik" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9941,11 +10056,11 @@ msgstr "" "Kyç publik i ortakut. Shembull: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Pikëmbarim i shërbyesit" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -9953,11 +10068,11 @@ msgstr "" "Emër përkatësie dhe portë, në trajtën “ip:portë”. Shembull: " "demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Kyç publik i shërbyesit" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9965,24 +10080,31 @@ msgstr "" "Dhënë nga operatori i shërbyesit, një listë e gjatë shenjash. Shembull: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Adresë IP klienti e furnizuar nga shërbyesi\\" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "Adresë IP caktuar kësaj makine te VPN-ja, pas lidhjes me pikëmbarimin. Kjo " "vlerë zakonisht jepet nga operatori i shërbyesit. Shembull: 192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Kyç privat i kësaj makine" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9994,11 +10116,11 @@ msgstr "" "Megjithatë, disa operatorë shërbyesish këmbëngulin në dhënien e tij. " "Shembull: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Kyç i përbashkët" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10008,11 +10130,11 @@ msgstr "" "një shtresë shtesë sigurie. Plotësojeni vetëm nëse është dhënë. Shembull: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Përdoreni këtë lidhje për të dërguar krejt trafikun që del" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Zakonisht e zgjedhur për një shërbim VPN përmes të cilit dërgohet krejt " @@ -10026,70 +10148,106 @@ msgstr "Klient VPN" msgid "As a Server" msgstr "Si Shërbyes" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Endpoints for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Pikëmbarime për këtë %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Pikëmbarim" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Te Porta të %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Ortakë të lejuar për t’u lidhur me këtë shërbyes:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "IP të Lejuara" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Kohë e Lidhjes së Fundit" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Ende s’ka ortakë të formësuar për t’u lidhur te ky %(box_name)s." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Kyç publik për këtë %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Ende e paformësuar." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Shtoni ortak të ri" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Shtoni Klient të Lejuar" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "WireGuard server started successfully." +msgid "WireGuard server not started yet." +msgstr "Shërbyesi WireGuard u nis me sukses." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "Nis Shërbyes WireGuard" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Si Klient" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Shërbyes me të cilët do të lidhet %(box_name)s:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Pikëmbarim" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "S’janë formësuar ende lidhje te shërbyes të largët." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Shtoni një shërbyes të ri" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Shtoni Lidhje me Shërbyesin" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "Adresë IP që do t’i jepet këtij klienti:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Shtoni Klient" @@ -10140,18 +10298,22 @@ msgstr "Pikëmbarime shërbyesi:" msgid "Server public key:" msgstr "Kyç publik shërbyesi:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Të dhëna të transmetuara:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "U morën të dhëna:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Duarshtrëngimi i fundit:" @@ -10178,62 +10340,74 @@ msgstr "Kyç publik i kësaj makine:" msgid "IP address of this machine:" msgstr "Adresë IP e kësaj makine:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "U shtua klient i ri." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Ka tashmë klient me kyç publik" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Klient i Lejuar" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Klienti u përditësua." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Ndryshoni Klientin" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Fshi Klientin e Lejuar" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Klienti u fshi." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "S’u gjet klient" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "U shtua shërbyes i ri." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Lidhje me Shërbyesin" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Shërbyesi u përditësua." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Ndryshoni Lidhjen me Shërbyesin" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Fshije Lidhjen me Shërbyesin" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Shërbyesi u fshi." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "Shërbyesi WireGuard u nis me sukses." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "S’u arrit të niset shërbyes WireGuard: {}" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10427,6 +10601,24 @@ msgstr "kartelë formësimi: {file}" msgid "Timeout waiting for package manager" msgstr "Mbaroi koha teksa pritej për përgjegjës paketash" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "po kërkohet adresë" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Po instalohet aplikacioni" @@ -10595,35 +10787,35 @@ msgstr "" "pronësi të dhënash. Është software i lirë, që ju lejon të instaloni dhe " "administroni kollaj aplikacione shërbyesi." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Kreu" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplikacione" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistem" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Ndryshoni fjalëkalimin" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Fike" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Dil" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Përzgjidhni gjuhën" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Hyni" @@ -10722,11 +10914,15 @@ msgstr "" "Aktualisht janë të formësuara për rrjete të brendshëm ndërfaqet vijuese të " "rrjetit: %(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Hidhe tej" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Njoftime" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "%(time_since)s më parë" @@ -10888,15 +11084,32 @@ msgstr "Këtu" msgid "Setting unchanged" msgstr "Rregullim i pandryshuar" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "para çinstalimit të {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujaratase" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Fjalëkalim i Shërbyesit SSH.
Mirëfilltësimi SSH me bazë kyçe s’është " +#~ "ende i mundur." + +#~ msgid "Single Sign On" +#~ msgstr "Hyrje Njëshe" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Kyç publik për këtë %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Ende e paformësuar." + #~ msgid "Minetest" #~ msgstr "Minetest" diff --git a/plinth/locale/sr/LC_MESSAGES/django.po b/plinth/locale/sr/LC_MESSAGES/django.po index 184fb22e6..7027eb10b 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Serbian " #: plinth/modules/backups/forms.py:255 +msgid "SSH Authentication Type" +msgstr "" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Remote server autentifikacija je neuspešna." + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Configuration updated" +msgid "Password-based Authentication" +msgstr "Konfiguracija sačuvana" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH serverska lozinka" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" -"SSH serverska lozinka.
Autentifikacija sa SSH ključem još uvek nije " -"moguća." #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Remote rezervni repozitorijum već postoji." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Izaberi provereni SSH javni ključ" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Vrati" @@ -543,17 +569,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Postojeći repozitorijum nije enkriptovan." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} skladište" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Kreiraj novu rezervnu kopiju" @@ -589,7 +615,23 @@ msgstr "Dodaj remote rezervnu lokaciju" msgid "Existing Backups" msgstr "Postojeće rezervne kopije" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -614,7 +656,7 @@ msgstr "Postojeće rezervne kopije" msgid "Caution:" msgstr "Oprez:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, fuzzy, python-format #| msgid "" #| "The credentials for this repository are stored on your %(box_name)s.
Da vratite sačuvanu kopiju " "na %(box_name)s potreban je SSH i, ako je potrebno, lozinka za enkripciju." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Kreirajte lokaciju" @@ -771,113 +813,115 @@ msgstr "" msgid "Verify Host" msgstr "Potvrdi host mašinu" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "SSH host public key nije verifikovan." + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "Remote server autentifikacija je neuspešna." + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "Greška prilikom uspostavljanja veze sa serverom: {}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "" -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 #, fuzzy #| msgid "Create Backup" msgid "Schedule Backups" msgstr "Kreiraj rezervnu kopiju" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "Arhiva kreirana." -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "Izbriši arhivu" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "Arhiva izbrisana." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "Otpremi ili vrati rezervnu arhivsku kopiju" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 #, fuzzy #| msgid "Upload file" msgid "Upload successful." msgstr "Otpremi fajl" -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "Nije pronađena rezervna datoteka." -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "Povrati podatke iz otpremljenog fajla" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "Restorovane datoteke." -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "Nema dodatnih hard diskova , da dodate repozitorijum." -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "Kreirajte rezervni repozitorij" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 #, fuzzy #| msgid "Added new remote SSH repository." msgid "Added new repository." msgstr "Novi remote SSH repozitorij dodat." -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "Kreirajte remote rezervni repozitorij" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "Novi remote SSH repozitorij dodat." -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "Verifikujte SSH hostkey" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "SSH je već verifikovan." -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "SSH host je verifikovan." -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "SSH host public key nije verifikovan." - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "Remote server autentifikacija je neuspešna." - -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" -msgstr "Greška prilikom uspostavljanja veze sa serverom: {}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Repozitorij obrisan." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Obriši repozitorij" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Repzitorij obrisan. Rezervne kopije nisu izbrisane." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Neuspešno unmountovanje!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Mountovanje neuspešno" @@ -951,7 +995,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "" @@ -1042,8 +1086,8 @@ msgstr "" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "" @@ -1123,6 +1167,7 @@ msgstr "Aktiviraj DNSSEC" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1423,7 +1468,7 @@ msgid "" "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" #: plinth/modules/config/forms.py:48 @@ -1970,7 +2015,7 @@ msgid "Invalid domain name" msgstr "" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "" @@ -2261,8 +2306,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "" @@ -2308,8 +2353,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"
Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3162,8 +3207,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "" @@ -3711,7 +3756,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4790,9 +4835,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5276,6 +5321,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5479,6 +5525,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "" @@ -5661,8 +5708,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6048,6 +6095,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application installed." +msgid "Application" +msgstr "Aplikacija instalirana." + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6338,8 +6416,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -7017,10 +7095,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7274,8 +7354,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7598,26 +7679,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8401,13 +8462,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8634,35 +8688,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8671,96 +8729,96 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete Archive" msgid "Delete user" msgstr "Izbriši arhivu" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8772,6 +8830,10 @@ msgstr "" msgid "App permissions" msgstr "" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8785,7 +8847,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8827,7 +8889,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8836,6 +8898,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8874,30 +8940,34 @@ msgstr "Izbriši arhivu" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8924,55 +8994,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8980,22 +9061,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9007,70 +9088,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -9119,18 +9230,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9154,62 +9269,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9366,6 +9493,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9528,35 +9671,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9649,11 +9792,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9807,15 +9954,22 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "SSH serverska lozinka.
Autentifikacija sa SSH ključem još uvek " +#~ "nije moguća." + #~ msgid "Minetest" #~ msgstr "Minetest" diff --git a/plinth/locale/sv/LC_MESSAGES/django.po b/plinth/locale/sv/LC_MESSAGES/django.po index 5e042ab25..7cb53d981 100644 --- a/plinth/locale/sv/LC_MESSAGES/django.po +++ b/plinth/locale/sv/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2024-07-30 01:31+0000\n" -"Last-Translator: bittin1ddc447d824349b2 \n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-02-16 12:09+0000\n" +"Last-Translator: Daniel Wiik \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -17,7 +17,7 @@ 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 5.7-dev\n" +"X-Generator: Weblate 5.16-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -25,10 +25,9 @@ msgid "Static configuration {etc_path} is setup properly" msgstr "Statisk konfiguration {etc_path} är inställd korrekt" #: plinth/container.py:140 -#, fuzzy, python-brace-format -#| msgid "Service {service_name} is running" +#, python-brace-format msgid "Container {container_name} is running" -msgstr "Tjänsten {service_name} körs" +msgstr "Tjänsten {container_name} körs" #: plinth/context_processors.py:21 plinth/views.py:175 msgid "FreedomBox" @@ -72,10 +71,8 @@ msgid "Repository to backup to" msgstr "Repository att säkerhetskopiera till" #: plinth/forms.py:62 -#, fuzzy -#| msgid "None" msgid "(None)" -msgstr "Ingen" +msgstr "(Ingen)" #: plinth/forms.py:68 msgid "Select a domain name to be used with this application" @@ -107,15 +104,15 @@ msgstr "Språk att använda för att presentera detta webbgränssnitt" msgid "Use the language preference set in the browser" msgstr "Använd språkinställningen i webbläsaren" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Hem" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Appar" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "System" @@ -138,41 +135,40 @@ msgstr "Säkerhet" msgid "Administration" msgstr "Administrering" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "Systemet är möjligen under tung belastning. Försök igen senare." -#: plinth/middleware.py:147 -#, fuzzy, python-brace-format -#| msgid "Page not found - %(box_name)s" +#: plinth/middleware.py:157 +#, python-brace-format msgid "Page not found: {url}" -msgstr "Sidan hittades inte - %(box_name)s" +msgstr "Sidan hittades inte: {url}" -#: plinth/middleware.py:150 -#, fuzzy -#| msgid "Error running apt-get" +#: plinth/middleware.py:160 msgid "Error running operation." -msgstr "Fel vid körning av apt-get" +msgstr "Fel vid körning av åtgärden." -#: plinth/middleware.py:152 -#, fuzzy -#| msgid "Error running apt-get" +#: plinth/middleware.py:162 msgid "Error loading page." -msgstr "Fel vid körning av apt-get" +msgstr "Fel vid laddning av sida." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Apache HTTP-server" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Webbserver" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Webbgränssnitt (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -210,26 +206,26 @@ msgstr "Lokalt nätverksdomän" #: plinth/modules/avahi/manifest.py:14 msgid "Auto-discovery" -msgstr "" +msgstr "Autoupptäck" #: plinth/modules/avahi/manifest.py:14 plinth/modules/backups/manifest.py:17 msgid "Local" -msgstr "" +msgstr "Lokal" #: plinth/modules/avahi/manifest.py:14 msgid "mDNS" -msgstr "" +msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "Säkerhetskopior gör det möjligt att skapa och hantera säkerhetsarkiv." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Säkerhetskopiering" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -237,19 +233,19 @@ msgstr "" "Aktivera ett automatiskt reservschema för datasäkerhet. Föredra en krypterad " "plats för fjärrbackup eller en extra ansluten disk." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "Aktivera ett schema för säkerhetskopiering" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "Gå till {app_name}" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -258,7 +254,7 @@ msgstr "" "En schemalagd säkerhetskopiering misslyckades. Tidigare {error_count} försök " "för säkerhetskopiering lyckades inte. Det senaste felet är: {error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Fel under säkerhetskopiering" @@ -328,6 +324,8 @@ msgid "" "In 24 hour format. Services may become temporarily unavailable while running " "backup operation at this time of the day." msgstr "" +"24-timmars format. Tjänster kan bli tillfälligt otillgängliga när du kör " +"säkerhetskopiering vid denna tidpunkt på dagen." #: plinth/modules/backups/forms.py:85 plinth/modules/backups/forms.py:107 msgid "Included apps" @@ -373,6 +371,9 @@ msgid "" "file previously downloaded from the result of a successful backup on a " "{box_name}. It must have a .tar.gz extension." msgstr "" +"Välj backup-filen för att ladda upp från den lokala datorn. Detta måste vara " +"en fil som tidigare laddats ner från resultatet av en framgångsrik " +"säkerhetskopia på en {box_name}. Det måste ha en .tar.gz förlängning." #: plinth/modules/backups/forms.py:154 msgid "Repository path format incorrect." @@ -406,7 +407,9 @@ msgid "Passphrase" msgstr "Lösenfras" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Lösenfras Behövs bara när du använder kryptering." #: plinth/modules/backups/forms.py:190 @@ -446,56 +449,76 @@ msgstr "" "repo/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Autentiseringsläge" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Autentisering till remote servern misslyckades." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "behöver autentisering" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Inaktivera lösenordsautentisering" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH server lösenord" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Lösenord för SSH-servern.
SSH-nyckelbaserad autentisering är ännu inte " -"möjligt." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Inaktivera lösenordsautentisering" #: plinth/modules/backups/forms.py:275 -msgid "Remote backup repository already exists." -msgstr "Fjärrbackup respository finns redan." +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Inaktivera lösenordsautentisering" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:292 +msgid "Remote backup repository already exists." +msgstr "Fjärrarkivet för säkerhetskopior finns redan." + +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Välj verifierad Offentlig SSH-nyckel" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Återställa" #: plinth/modules/backups/manifest.py:15 -#, fuzzy -#| msgid "Encryption" msgid "Encrypted" -msgstr "Kryptering" +msgstr "Krypterad" #: plinth/modules/backups/manifest.py:16 -#, fuzzy -#| msgid "Schedule" msgid "Schedules" -msgstr "Schema" +msgstr "Scheman" #: plinth/modules/backups/manifest.py:18 -#, fuzzy -#| msgid "Remove" msgid "Remote" -msgstr "Ta bort" +msgstr "Fjärrarkiv" #: plinth/modules/backups/manifest.py:19 -#, fuzzy -#| msgid "App updated" msgid "App data" -msgstr "App uppdaterad" +msgstr "App data" #: plinth/modules/backups/manifest.py:20 #: plinth/modules/homeassistant/templates/homeassistant.html:11 @@ -508,7 +531,7 @@ msgstr "Konfiguration" #: plinth/modules/backups/manifest.py:21 msgid "Borg" -msgstr "" +msgstr "Borg" #: plinth/modules/backups/privileged.py:34 msgid "" @@ -539,34 +562,32 @@ msgid "Repository path is neither empty nor is an existing backups repository." msgstr "Respositorysökvägen är varken tom eller en befintlig säkerhetskopia." #: plinth/modules/backups/privileged.py:77 -#, fuzzy -#| msgid "A share with this name already exists." msgid "An archive with given name already exists in the repository." -msgstr "Det finns redan en share med det här namnet." +msgstr "Ett arkiv med givna namn finns redan i kodförrådet." #: plinth/modules/backups/privileged.py:84 msgid "Archive with given name was not found in the repository." -msgstr "" +msgstr "Arkiv med givna namn hittades inte i kodförrådet." #: plinth/modules/backups/privileged.py:90 msgid "Backup system is busy with another operation." -msgstr "" +msgstr "Backupsystemet är upptaget med en annan process." #: plinth/modules/backups/privileged.py:95 msgid "Not enough space left on the disk or remote location." -msgstr "" +msgstr "Inte tillräckligt med utrymme kvar på disken eller fjärrplatsen." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Befintlig respository är inte krypterad." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} lagring" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Skapa en ny säkerhetskopia" @@ -602,7 +623,23 @@ msgstr "Lägg till plats för fjärrsäkerhetskopiering" msgid "Existing Backups" msgstr "Befintliga säkerhetskopior" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -627,7 +664,7 @@ msgstr "Befintliga säkerhetskopior" msgid "Caution:" msgstr "Varning:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -639,7 +676,7 @@ msgstr "" "%(box_name)s du behöver SSH-autentiseringsuppgifter och, om det väljs, " "krypteringslösenfrasen." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Skapa plats" @@ -711,27 +748,15 @@ msgid "Restore data from" msgstr "Återställa data från" #: plinth/modules/backups/templates/backups_upload.html:17 -#, fuzzy, python-format -#| msgid "" -#| "\n" -#| " Upload a backup file downloaded from another %(box_name)s to " -#| "restore its\n" -#| " contents. You can choose the apps you wish to restore after " -#| "uploading a\n" -#| " backup file.\n" -#| " " +#, python-format msgid "" "Upload a backup file downloaded from another %(box_name)s to restore its " "contents. You can choose the apps you wish to restore after uploading a " "backup file." msgstr "" -"\n" -" Ladda upp en backup-fil som hämtats från en annan %(box_name)s för att " -"återställa\n" -" Innehållet. Du kan välja vilka appar du vill återställa efter att du " -"laddat upp en\n" -" backup-fil.\n" -" " +"Ladda upp en säkerhetskopia hämtad från en annan %(box_name)s för att " +"återställa dess innehåll. Du kan välja de appar du vill återställa efter att " +"du har laddat upp en säkerhetskopia." #: plinth/modules/backups/templates/backups_upload.html:31 #, python-format @@ -782,113 +807,111 @@ msgstr "" msgid "Verify Host" msgstr "Verifiera Host" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "SSH hosts offentliga nyckel kunde inte verifieras." + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "Autentisering till remote servern misslyckades." + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "Fel vid upprättande av anslutning till servern: {}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "Backup schema uppdaterat." -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 msgid "Schedule Backups" msgstr "Schemalägg säkerhetskopior" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "Arkiv skapat." -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "Ta bort Archiv" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "Archiv borttagen." -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "Ladda upp och återställ en säkerhetskopia" -#: plinth/modules/backups/views.py:216 -#, fuzzy -#| msgid "Logged out successfully." +#: plinth/modules/backups/views.py:230 msgid "Upload successful." -msgstr "Du har loggat ut framgångsrikt." +msgstr "Uppladdning genomförd." -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "Ingen backup-fil hittades." -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "Återställ från uppladdad fil" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "Återställda filer från säkerhetskopian." -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "" "Det finns inga ytterligare diskar tillgängliga för att lägga till ett " "repository." -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "Skapa backup repository" -#: plinth/modules/backups/views.py:350 -#, fuzzy -#| msgid "Added new remote SSH repository." -msgid "Added new repository." -msgstr "Lade till ett nytt remote SSH-repository." - #: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Lade till nytt kodförråd." + +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "Skapa remote backup repository" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "Lade till ett nytt remote SSH-repository." -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "Verifiera SSH hostkey" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "SSH host redan verifierat." -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "SSH host verifierade." -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "SSH hosts offentliga nyckel kunde inte verifieras." - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "Autentisering till remote servern misslyckades." - -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" -msgstr "Fel vid upprättande av anslutning till servern: {}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Repository raderad." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Radera Repository" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Repository tas bort.Säkerhetskopior raderades inte." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Avmontering misslyckas!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Avmontering misslyckades" @@ -971,7 +994,7 @@ msgstr "" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Behörigheter" @@ -997,14 +1020,12 @@ msgstr "" #: plinth/modules/samba/manifest.py:81 plinth/modules/sharing/manifest.py:19 #: plinth/modules/syncthing/manifest.py:58 #: plinth/modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "File & Snippet Sharing" msgid "File sharing" -msgstr "Fil & Snippet Sharing" +msgstr "Fildelning" #: plinth/modules/bepasty/manifest.py:23 msgid "Pastebin" -msgstr "" +msgstr "Pastebin" #: plinth/modules/bepasty/templates/bepasty.html:12 msgid "Manage Passwords" @@ -1062,8 +1083,8 @@ msgstr "Lista" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Ta bort" @@ -1134,20 +1155,19 @@ msgstr "" "förfrågningar kommer att vidarebefordras" #: plinth/modules/bind/manifest.py:16 -#, fuzzy -#| msgid "Enable DNSSEC" msgid "DNS" -msgstr "Aktivera DNSSEC" +msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Server" #: plinth/modules/bind/manifest.py:18 msgid "Resolver" -msgstr "" +msgstr "Resolver" #: plinth/modules/bind/templates/bind.html:11 msgid "Serving Domains" @@ -1256,19 +1276,15 @@ msgstr "Ett bibliotek med detta namn finns redan." #: plinth/modules/calibre/manifest.py:21 msgid "Ebook" -msgstr "" +msgstr "Ebok" #: plinth/modules/calibre/manifest.py:21 -#, fuzzy -#| msgid "E-book Library" msgid "Library" -msgstr "E-bok Bibliotek" +msgstr "Bibliotek" #: plinth/modules/calibre/manifest.py:21 -#, fuzzy -#| msgid "E-book Library" msgid "Ebook reader" -msgstr "E-bok Bibliotek" +msgstr "E-boksbibliotek" #: plinth/modules/calibre/templates/calibre-delete-library.html:11 #, python-format @@ -1376,16 +1392,12 @@ msgid "Cockpit" msgstr "Cockpit" #: plinth/modules/cockpit/manifest.py:23 -#, fuzzy -#| msgid "Administration" msgid "Advanced administration" -msgstr "Administrering" +msgstr "Avancerad administration" #: plinth/modules/cockpit/manifest.py:24 -#, fuzzy -#| msgid "Sharing" msgid "Web terminal" -msgstr "Sharing" +msgstr "Webbterminal" #: plinth/modules/cockpit/manifest.py:25 plinth/modules/storage/__init__.py:47 #: plinth/modules/storage/__init__.py:319 @@ -1395,8 +1407,6 @@ msgid "Storage" msgstr "Lagring" #: plinth/modules/cockpit/manifest.py:26 -#, fuzzy -#| msgid "Networks" msgid "Networking" msgstr "Nätverk" @@ -1407,7 +1417,7 @@ msgstr "Tjänster" #: plinth/modules/cockpit/manifest.py:28 plinth/templates/app-logs.html:9 msgid "Logs" -msgstr "" +msgstr "Loggar" #: plinth/modules/cockpit/manifest.py:29 #: plinth/modules/performance/__init__.py:16 @@ -1416,16 +1426,12 @@ msgid "Performance" msgstr "Prestanda" #: plinth/modules/config/__init__.py:20 -#, fuzzy -#| msgid "" -#| "Here you can set some general configuration options like hostname, domain " -#| "name, webserver home page etc." msgid "" "Here you can set some general configuration options like webserver home page " "etc." msgstr "" -"Här kan du ställa in några allmänna konfigurationsalternativ som värdnamn, " -"domännamn, webserver, hemsida etc." +"Här kan du ställa in några allmänna konfigurationsalternativ som webbserver, " +"hemsida med mera." #: plinth/modules/config/__init__.py:42 msgid "General Configuration" @@ -1456,13 +1462,20 @@ msgid "Webserver Home Page" msgstr "Webbserverens hemsida" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Välj standardsidan som måste visas när någon besöker ditt {box_name} på " "webben. Ett typiskt fall är att ställa in din blogg eller wiki som hemsida " @@ -1510,13 +1523,11 @@ msgstr "Hemsida" #: plinth/modules/config/manifest.py:8 msgid "Logging" -msgstr "" +msgstr "Loggning" #: plinth/modules/config/manifest.py:8 -#, fuzzy -#| msgid "Advanced" msgid "Advanced apps" -msgstr "Avancerat" +msgstr "Avancerade appar" #: plinth/modules/config/views.py:41 #, python-brace-format @@ -1573,15 +1584,15 @@ msgstr "Ogiltig lista för URI:er för STUN/TURN-servrar" #: plinth/modules/coturn/manifest.py:7 plinth/modules/janus/manifest.py:16 msgid "Video conference" -msgstr "" +msgstr "Videokonferens" #: plinth/modules/coturn/manifest.py:7 msgid "STUN" -msgstr "" +msgstr "STUN" #: plinth/modules/coturn/manifest.py:7 msgid "TURN" -msgstr "" +msgstr "TURN" #: plinth/modules/coturn/templates/coturn.html:15 msgid "Use the following URLs to configure your communication server:" @@ -1625,14 +1636,10 @@ msgid "-- no time zone set --" msgstr "-- ingen tidszon inställd --" #: plinth/modules/datetime/manifest.py:15 -#, fuzzy -#| msgid "Network Interface" msgid "Network time" -msgstr "Nätverksgränssnitt" +msgstr "Nätverkstid" #: plinth/modules/datetime/manifest.py:15 -#, fuzzy -#| msgid "Time Zone" msgid "Timezone" msgstr "Tidszon" @@ -1678,24 +1685,18 @@ msgstr "Bittorrent-klient skriven i Python / PyGTK" #: plinth/modules/deluge/manifest.py:21 #: plinth/modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "Deluge BitTorrent" msgid "BitTorrent" -msgstr "Deluge BitTorrent" +msgstr "BitTorrent" #: plinth/modules/deluge/manifest.py:21 plinth/modules/roundcube/manifest.py:23 #: plinth/modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "Launch web client" msgid "Web client" -msgstr "Starta webbklient" +msgstr "Webklient" #: plinth/modules/deluge/manifest.py:21 plinth/modules/syncthing/manifest.py:58 #: plinth/modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "I2P" msgid "P2P" -msgstr "I2P" +msgstr "P2P" #: plinth/modules/diagnostics/__init__.py:32 msgid "" @@ -1711,6 +1712,8 @@ msgid "" "This app also shows the logs for {box_name} " "services." msgstr "" +"Denna app visar också loggar för {box_name} " +"tjänster." #: plinth/modules/diagnostics/__init__.py:60 #: plinth/modules/diagnostics/__init__.py:255 @@ -1719,7 +1722,7 @@ msgstr "Diagnostik" #: plinth/modules/diagnostics/__init__.py:115 msgid "skipped" -msgstr "" +msgstr "Hoppat över" #: plinth/modules/diagnostics/__init__.py:116 msgid "passed" @@ -1806,7 +1809,7 @@ msgstr "Om problem upptäcks, försök att reparera dem automatiskt." #: plinth/modules/diagnostics/manifest.py:10 msgid "Detect problems" -msgstr "" +msgstr "Finn problem" #: plinth/modules/diagnostics/manifest.py:10 msgid "Repair" @@ -1814,7 +1817,7 @@ msgstr "Reparera" #: plinth/modules/diagnostics/manifest.py:10 msgid "Daily" -msgstr "" +msgstr "Daglig" #: plinth/modules/diagnostics/templates/diagnostics.html:11 msgid "Diagnostics Run" @@ -1865,33 +1868,31 @@ msgstr "Resultat" #: plinth/modules/diagnostics/templates/diagnostics_full.html:53 #, python-format msgid "%(number)s passed" -msgstr "" +msgstr "%(number)s passerade" #: plinth/modules/diagnostics/templates/diagnostics_full.html:57 #, python-format msgid "%(number)s failed" -msgstr "" +msgstr "%(number)s misslyckades" #: plinth/modules/diagnostics/templates/diagnostics_full.html:61 #, python-format msgid "%(number)s warnings" -msgstr "" +msgstr "%(number)s varningar" #: plinth/modules/diagnostics/templates/diagnostics_full.html:65 #, python-format msgid "%(number)s errors" -msgstr "" +msgstr "%(number)s fel" #: plinth/modules/diagnostics/templates/diagnostics_full.html:69 #, python-format msgid "%(number)s skipped" -msgstr "" +msgstr "%(number)s skippade" #: plinth/modules/diagnostics/templates/diagnostics_full.html:111 -#, fuzzy -#| msgid "deluge-web is running" msgid "Running..." -msgstr "Deluges webbgränssnitt är aktiverat" +msgstr "Kör..." #: plinth/modules/diagnostics/templates/diagnostics_results.html:11 msgid "Test" @@ -1940,13 +1941,6 @@ msgstr "" "Internet ber om ditt DNS-namn, kommer hen att få din aktuella IP som svar." #: plinth/modules/dynamicdns/__init__.py:41 -#, fuzzy -#| msgid "" -#| "If you are looking for a free dynamic DNS account, you may find a free " -#| "GnuDIP service at ddns.freedombox.org or you may find free update URL " -#| "based services at freedns.afraid.org." msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at ddns.freedombox.org eller så kan " -"du hitta gratis uppdaterings-URL-baserade tjänster på freedns.afraid.org." +"GnuDIP-tjänst på ddns.freedombox.org. Med denna tjänst får du också " +"obegränsade underdomäner (med wildcards-alternativ aktiverat i " +"kontoinställningar). För att använda en underdomän, lägg till den som en " +"statisk domän i appen Namn." #: plinth/modules/dynamicdns/__init__.py:47 -#, fuzzy -#| msgid "" -#| "If you are looking for a free dynamic DNS account, you may find a free " -#| "GnuDIP service at ddns.freedombox.org or you may find free update URL " -#| "based services at freedns.afraid.org." msgid "" "Alternatively, you may find a free update URL based service at freedns.afraid.org." msgstr "" -"Om du letar efter ett gratis dynamiskt DNS-konto kan du hitta en gratis " -"GnuDIP-tjänst på ddns.freedombox.org eller så kan " -"du hitta gratis uppdaterings-URL-baserade tjänster på freedns.afraid.org." +"Alternativt kan du hitta en gratis URL-baserad tjänst med gratis uppdatering " +"på freedns.afraid.org." #: plinth/modules/dynamicdns/__init__.py:50 msgid "" "This service uses an external service to lookup public IP address. This can " "be configured in the privacy app." msgstr "" +"Denna tjänst använder en extern tjänst för att söka offentlig IP-adress. " +"Detta kan konfigureras i sekretessappen." #: plinth/modules/dynamicdns/__init__.py:68 msgid "Dynamic DNS Client" msgstr "Klient för Dynamisk DNS" #: plinth/modules/dynamicdns/__init__.py:81 -#, fuzzy -#| msgid "Dynamic Domain Name" msgid "Dynamic Domain" -msgstr "Dynamiskt Domännamn" +msgstr "Dynamisk domän" #: plinth/modules/dynamicdns/forms.py:20 msgid "" @@ -2090,7 +2078,7 @@ msgid "Invalid domain name" msgstr "Ogiltigt domännamn" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Användarnamn" @@ -2107,10 +2095,8 @@ msgid "This field is required." msgstr "Detta fält krävs." #: plinth/modules/dynamicdns/forms.py:138 plinth/modules/names/forms.py:125 -#, fuzzy -#| msgid "Content package added." msgid "Domain already exists." -msgstr "Innehållspaket har lagts till." +msgstr "Domain finns redan." #: plinth/modules/dynamicdns/manifest.py:17 #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 @@ -2122,20 +2108,16 @@ msgstr "Domän" #: plinth/modules/dynamicdns/manifest.py:17 msgid "Free" -msgstr "" +msgstr "Gratis" #: plinth/modules/dynamicdns/manifest.py:17 -#, fuzzy -#| msgid "Server public key:" msgid "Needs public IP" -msgstr "Serverns offentliga nyckel:" +msgstr "Behöver offentlig IP" #: plinth/modules/dynamicdns/templates/dynamicdns-domain-delete.html:13 #: plinth/modules/names/templates/names-domain-delete.html:13 -#, fuzzy -#| msgid "Tor configuration is being updated" msgid "App configurations will be updated." -msgstr "Konfigurationen av Tor uppdateras" +msgstr "Appkonfigurationer kommer att uppdateras." #: plinth/modules/dynamicdns/templates/dynamicdns.html:10 #: plinth/modules/email/templates/email.html:20 @@ -2146,10 +2128,8 @@ msgstr "Domäner" #: plinth/modules/dynamicdns/templates/dynamicdns.html:14 #: plinth/modules/dynamicdns/templates/dynamicdns.html:16 -#, fuzzy -#| msgid "Add Domains" msgid "Add Domain" -msgstr "Lägg till domäner" +msgstr "Lägg till domän" #: plinth/modules/dynamicdns/templates/dynamicdns.html:26 msgid "Last update" @@ -2169,13 +2149,11 @@ msgstr "Åtgärder" #: plinth/modules/dynamicdns/templates/dynamicdns.html:72 #, python-format msgid "Edit domain %(domain)s" -msgstr "" +msgstr "Redigera domän %(domain)s" #: plinth/modules/dynamicdns/templates/dynamicdns.html:47 -#, fuzzy -#| msgid "Not set" msgid "Not yet" -msgstr "Inte inställt" +msgstr "Inte ännu" #: plinth/modules/dynamicdns/templates/dynamicdns.html:53 msgid "Success" @@ -2186,16 +2164,13 @@ msgid "Failed" msgstr "Misslyckades" #: plinth/modules/dynamicdns/templates/dynamicdns.html:79 -#, fuzzy, python-format -#| msgid "Delete connection %(name)s" +#, python-format msgid "Delete domain %(domain)s" -msgstr "Ta bort anslutning %(name)s" +msgstr "Radera domän %(domain)s" #: plinth/modules/dynamicdns/templates/dynamicdns.html:91 -#, fuzzy -#| msgid "Cannot test: No domains are configured." msgid "No domains configured." -msgstr "Kan inte testa: Inga domäner är konfigurerade." +msgstr "Inga domäner konfigurerade." #: plinth/modules/dynamicdns/views.py:26 plinth/modules/dynamicdns/views.py:28 msgid "Connection timed out" @@ -2214,27 +2189,21 @@ msgid "Already up-to-date" msgstr "Redan uppdaterad" #: plinth/modules/dynamicdns/views.py:70 -#, fuzzy -#| msgid "Dynamic Domain Name" msgid "Add Dynamic Domain" -msgstr "Dynamiskt Domännamn" +msgstr "Lägg till dynamisk domän" #: plinth/modules/dynamicdns/views.py:72 -#, fuzzy -#| msgid "Dynamic Domain Name" msgid "Edit Dynamic Domain" -msgstr "Dynamiskt Domännamn" +msgstr "Redigera dynamisk domän" #: plinth/modules/dynamicdns/views.py:138 plinth/modules/names/views.py:137 #, python-brace-format msgid "Delete Domain {domain}?" -msgstr "" +msgstr "Radera domän {domain}?" #: plinth/modules/dynamicdns/views.py:145 plinth/modules/names/views.py:143 -#, fuzzy -#| msgid "Client deleted." msgid "Domain deleted." -msgstr "Klienten har tagits bort." +msgstr "Domänen raderades." #: plinth/modules/ejabberd/__init__.py:29 msgid "" @@ -2370,27 +2339,23 @@ msgstr "Gajim" #: plinth/modules/ejabberd/manifest.py:124 #: plinth/modules/matrixsynapse/manifest.py:102 -#, fuzzy -#| msgid "Encryption" msgid "Encrypted messaging" -msgstr "Kryptering" +msgstr "Krypterade meddelanden" #: plinth/modules/ejabberd/manifest.py:125 #: plinth/modules/matrixsynapse/manifest.py:103 #: plinth/modules/mumble/manifest.py:67 msgid "Audio chat" -msgstr "" +msgstr "Ljudchatt" #: plinth/modules/ejabberd/manifest.py:126 #: plinth/modules/matrixsynapse/manifest.py:104 -#, fuzzy -#| msgid "Video Room" msgid "Video chat" -msgstr "Videorum" +msgstr "Videochatt" #: plinth/modules/ejabberd/manifest.py:127 plinth/modules/jsxc/manifest.py:16 msgid "XMPP" -msgstr "" +msgstr "XMPP" #: plinth/modules/ejabberd/templates/ejabberd.html:18 #: plinth/modules/firewall/manifest.py:10 @@ -2402,39 +2367,30 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Status" #: plinth/modules/ejabberd/templates/ejabberd.html:23 -#, fuzzy, python-format -#| msgid "" -#| "Your XMPP server domain is set to %(domainname)s. User IDs will " -#| "look like username@%(domainname)s. You can setup your domain on " -#| "the system Configure page." +#, python-format msgid "" "Your XMPP server domain is set to %(domain_name)s. User IDs will look " "like username@%(domain_name)s. You can setup your domain on the " "system Name Services page." msgstr "" -"Din XMPP-serverdomän är inställd på %(domainname)s. Användar-ID " -"kommer att se ut som användarnamn@%(domainname)s. Du kan ställa in " -"din domän på systemet Konfigurera sidan." +"Din XMPP-serverdomän är inställd på %(domain_name)s. Användar-ID " +"kommer att se ut som username@%(domain_name)s. Du kan ställa in din " +"domän på systemet Namntjänster sida." #: plinth/modules/ejabberd/templates/ejabberd.html:30 -#, fuzzy, python-format -#| msgid "" -#| "Your XMPP server domain is set to %(domainname)s. User IDs will " -#| "look like username@%(domainname)s. You can setup your domain on " -#| "the system Configure page." +#, python-format msgid "" "Your XMPP server domain is not set. You can setup your domain on the system " "Name Services page." msgstr "" -"Din XMPP-serverdomän är inställd på %(domainname)s. Användar-ID " -"kommer att se ut som användarnamn@%(domainname)s. Du kan ställa in " -"din domän på systemet Konfigurera sidan." +"Din XMPP-serverdomän är inte inställd. Du kan ställa in din domän på " +"systemet Namntjänster sida." #: plinth/modules/email/__init__.py:26 msgid "" @@ -2476,9 +2432,13 @@ msgstr "" "på den första administratörsanvändaren." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube app ger användarna " "webbgränssnitt för att komma åt e-post." @@ -2496,11 +2456,11 @@ msgstr "Postfix/Dovecot" #: plinth/modules/email/__init__.py:80 msgid "More emails" -msgstr "" +msgstr "Mer e-post" #: plinth/modules/email/__init__.py:80 msgid "Same mailbox" -msgstr "" +msgstr "Samma brevlåda" #: plinth/modules/email/__init__.py:82 msgid "My Email Aliases" @@ -2548,28 +2508,24 @@ msgid "Thunderbird" msgstr "Thunderbird" #: plinth/modules/email/manifest.py:37 -#, fuzzy -#| msgid "Thunderbird" msgid "Thunderbird Mobile" -msgstr "Thunderbird" +msgstr "Thunderbird för mobil" #: plinth/modules/email/manifest.py:52 msgid "FairEmail" msgstr "FairEmail" #: plinth/modules/email/manifest.py:82 -#, fuzzy -#| msgid "Email Server" msgid "Email server" msgstr "E-postserver" #: plinth/modules/email/manifest.py:82 msgid "IMAP" -msgstr "" +msgstr "IMAP" #: plinth/modules/email/manifest.py:82 msgid "Spam control" -msgstr "" +msgstr "Spamkontroll" #: plinth/modules/email/templates/email-aliases.html:13 #: plinth/modules/email/templates/email.html:15 @@ -2590,22 +2546,16 @@ msgid "Add" msgstr "Lägg till" #: plinth/modules/email/templates/email-dns.html:9 -#, fuzzy -#| msgid "DNS Records" msgid "DNS Records for domain:" -msgstr "DNS-poster" +msgstr "DNS-poster för domän:" #: plinth/modules/email/templates/email-dns.html:12 -#, fuzzy -#| msgid "" -#| "The following DNS records must be added manually on your primary domain " -#| "for the mail server to work properly." msgid "" "The following DNS records must be added manually on this domain for the mail " "server to work properly for this domain." msgstr "" -"Följande DNS-poster måste läggas till manuellt på din primära domän för att " -"e-postservern ska fungera korrekt." +"Följande DNS-poster måste läggas till manuellt på den här domänen för att e-" +"postservern ska fungera korrekt för den här domänen." #: plinth/modules/email/templates/email-dns.html:23 #: plinth/modules/email/templates/email-dns.html:77 @@ -2635,10 +2585,8 @@ msgid "Host/Target/Value" msgstr "Värd/Mål/Värde" #: plinth/modules/email/templates/email-dns.html:50 -#, fuzzy -#| msgid "Server hostname or IP address" msgid "Reverse DNS Records for IP Addresses" -msgstr "Serverns värdnamn eller IP-adress" +msgstr "Omvända DNS-poster för IP-adresser" #: plinth/modules/email/templates/email-dns.html:53 #, python-format @@ -2652,18 +2600,26 @@ msgid "" "part. Only one of your domains can have Revese DNS lookup configured unless " "you have multiple public IP addresses." msgstr "" +"Om din %(box_name)s körs på en molntjänstinfrastruktur, bör du konfigurera " +" Omvänd DNS " +"lookup. Detta är inte obligatoriskt, det förbättrar dock kraftigt e-" +"postleveranserna. Omvänd DNS är inte konfigurerad där din vanliga DNS är. Du " +"bör leta efter det i inställningarna för din VPS/ISP. Vissa leverantörer " +"förkonfigurerar IP-adressdelen för dig och du behöver bara ställa in " +"domändelen. Endast en av dina domäner kan ha omvänt DNS-uppslag konfigurerad " +"om du inte har flera offentliga IP-adresser." #: plinth/modules/email/templates/email-dns.html:66 msgid "" "An external service is used to lookup public IP address to show in the " "following section. This can be configured in the privacy app." msgstr "" +"En extern tjänst används för att söka offentlig IP-adress för att visa i " +"följande avsnitt. Detta kan konfigureras i sekretessappen." #: plinth/modules/email/templates/email-dns.html:76 -#, fuzzy -#| msgid "Hostname" msgid "Host" -msgstr "Värdnamn" +msgstr "Värd" #: plinth/modules/email/templates/email.html:10 msgid "Manage Spam" @@ -2674,11 +2630,13 @@ msgid "" "The following domains are configured. View details to see the list of DNS " "entries to be made for the domain." msgstr "" +"Följande domäner är konfigurerade. Visa detaljer för att se listan över DNS-" +"poster som ska göras för domänen." #: plinth/modules/email/templates/email.html:35 #, python-format msgid "View domain: %(domain)s" -msgstr "" +msgstr "Visa domän: %(domain)s" #: plinth/modules/featherwiki/__init__.py:25 #, python-brace-format @@ -2687,6 +2645,9 @@ msgid "" "a single HTML file on your {box_name}. You can use it as a personal wiki, as " "a web notebook, or for project documentation." msgstr "" +"Feather Wiki är ett verktyg för att skapa enkla fristående wikis, var och en " +"lagrad i en enda HTML-fil på din {box_name}. Du kan använda den som en " +"personlig wiki, som en webbanteckningsbok eller för projektdokumentation." #: plinth/modules/featherwiki/__init__.py:29 msgid "" @@ -2694,6 +2655,9 @@ msgid "" "wiki per topic. Customize each wiki to your liking with extensions and other " "customization options." msgstr "" +"Varje wiki är en liten fil. Skapa så många wikis som du vill, till exempel " +"en wiki per ämne. Anpassa varje wiki till din smak med tillägg och andra " +"anpassningsalternativ." #: plinth/modules/featherwiki/__init__.py:33 #, python-brace-format @@ -2701,6 +2665,8 @@ msgid "" "Feather Wiki is downloaded from {box_name} website and not from Debian. " "Wikis need to be upgraded to newer version manually." msgstr "" +"Feather Wiki laddas ner från {box_name} hemsida och inte från Debian. Wikis " +"måste uppgraderas till nyare version manuellt." #: plinth/modules/featherwiki/__init__.py:37 #: plinth/modules/tiddlywiki/__init__.py:41 @@ -2711,6 +2677,10 @@ msgid "" "{box_name} belonging to the wiki group. Simultaneous editing is not " "supported." msgstr "" +"Wikis är inte offentliga som standard, men de kan laddas ner för delning " +"eller publicering. De kan redigeras av varje " +"användare på {box_name} som tillhör wikigruppen. Samtidig redigering " +"stöds inte." #: plinth/modules/featherwiki/__init__.py:56 #: plinth/modules/ikiwiki/__init__.py:79 @@ -2720,44 +2690,44 @@ msgstr "Visa och redigera wiki-applikationer" #: plinth/modules/featherwiki/__init__.py:59 #: plinth/modules/featherwiki/manifest.py:9 -#, fuzzy -#| msgid "Create Wiki/Blog" msgid "Feather Wiki" -msgstr "Skapa wiki eller blogg" +msgstr "Feather Wiki" #: plinth/modules/featherwiki/forms.py:13 plinth/modules/tiddlywiki/forms.py:13 msgid "Wiki files cannot be named \"index.html\"." -msgstr "" +msgstr "Wikifiler kan inte namnges \"index.html\"." #: plinth/modules/featherwiki/forms.py:20 plinth/modules/tiddlywiki/forms.py:20 msgid "Name of the wiki file, with file extension \".html\"" -msgstr "" +msgstr "Namn på wikifilen, med filändelse \".html\"" #: plinth/modules/featherwiki/forms.py:22 plinth/modules/tiddlywiki/forms.py:22 msgid "" "Wiki title and description can be set from within the wiki. This file name " "is independent of the wiki title." msgstr "" +"Wikititel och beskrivning kan ställas in från wikin. Detta filnamn är " +"oberoende av wikititel." #: plinth/modules/featherwiki/forms.py:30 plinth/modules/tiddlywiki/forms.py:30 msgid "New name for the wiki file, with file extension \".html\"" -msgstr "" +msgstr "Nytt namn för wikifilen, med filtillägg \".html\"" #: plinth/modules/featherwiki/forms.py:32 plinth/modules/tiddlywiki/forms.py:32 msgid "Renaming the file has no effect on the title of the wiki." -msgstr "" +msgstr "Omdöpning av filen har ingen effekt på wikins titel." #: plinth/modules/featherwiki/forms.py:39 msgid "A Feather Wiki file with .html file extension" -msgstr "" +msgstr "En Feather Wikifil med .html-filändelse" #: plinth/modules/featherwiki/forms.py:43 msgid "Feather Wiki files must be in HTML format" -msgstr "" +msgstr "Feather Wiki filer måste vara i HTML format" #: plinth/modules/featherwiki/forms.py:46 msgid "Upload an existing Feather Wiki file from this computer." -msgstr "" +msgstr "Ladda upp en befintlig Feather Wikifil från den här datorn." #: plinth/modules/featherwiki/manifest.py:18 #: plinth/modules/help/templates/help_about.html:108 @@ -2771,37 +2741,31 @@ msgstr "Wiki" #: plinth/modules/infinoted/manifest.py:46 #: plinth/modules/tiddlywiki/manifest.py:20 msgid "Note taking" -msgstr "" +msgstr "Anteckningar" #: plinth/modules/featherwiki/manifest.py:18 #: plinth/modules/ikiwiki/manifest.py:15 #: plinth/modules/mediawiki/manifest.py:25 #: plinth/modules/tiddlywiki/manifest.py:21 #: plinth/modules/wordpress/manifest.py:26 -#, fuzzy -#| msgid "Website Security" msgid "Website" -msgstr "Säkerhet för webbsida" +msgstr "Webbsida" #: plinth/modules/featherwiki/manifest.py:18 #: plinth/modules/tiddlywiki/manifest.py:25 msgid "Quine" -msgstr "" +msgstr "Quine" #: plinth/modules/featherwiki/manifest.py:18 #: plinth/modules/nextcloud/manifest.py:56 #: plinth/modules/tiddlywiki/manifest.py:26 -#, fuzzy -#| msgid "Debian:" msgid "Non-Debian" -msgstr "Debian:" +msgstr "Icke-Debian" #: plinth/modules/featherwiki/templates/featherwiki_configure.html:12 #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:12 -#, fuzzy -#| msgid "Manage Libraries" msgid "Manage Wikis" -msgstr "Hantera bibliotek" +msgstr "Hantera wikis" #: plinth/modules/featherwiki/templates/featherwiki_configure.html:16 #: plinth/modules/featherwiki/templates/featherwiki_configure.html:18 @@ -2809,133 +2773,107 @@ msgstr "Hantera bibliotek" #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:16 #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:18 #: plinth/modules/tiddlywiki/views.py:47 -#, fuzzy -#| msgid "Create Wiki/Blog" msgid "Create Wiki" -msgstr "Skapa wiki eller blogg" +msgstr "Skapa wiki" #: plinth/modules/featherwiki/templates/featherwiki_configure.html:21 #: plinth/modules/featherwiki/templates/featherwiki_configure.html:23 #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:21 #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:23 -#, fuzzy -#| msgid "Upload File" msgid "Upload Wiki" -msgstr "Ladda upp fil" +msgstr "Ladda upp wiki" #: plinth/modules/featherwiki/templates/featherwiki_configure.html:30 #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:30 -#, fuzzy -#| msgid "No libraries available." msgid "No wikis available." -msgstr "Inga bibliotek tillgängliga." +msgstr "Inga wikis tillgängliga." #: plinth/modules/featherwiki/templates/featherwiki_configure.html:36 #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:36 -#, fuzzy, python-format -#| msgid "Go to site %(site)s" +#, python-format msgid "Go to wiki %(wiki)s" -msgstr "Gå till webbsidan %(site)s" +msgstr "Gå till wiki %(wiki)s" #: plinth/modules/featherwiki/templates/featherwiki_configure.html:43 #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:43 #, python-format msgid "Rename wiki %(wiki)s" -msgstr "" +msgstr "Döp om wiki %(wiki)s" #: plinth/modules/featherwiki/templates/featherwiki_configure.html:50 #: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:50 -#, fuzzy, python-format -#| msgid "Delete site %(site)s" +#, python-format msgid "Delete wiki %(wiki)s" -msgstr "Ta bort webbsida %(site)s" +msgstr "Ta bort wiki %(wiki)s" #: plinth/modules/featherwiki/templates/featherwiki_delete.html:12 #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:12 -#, fuzzy, python-format -#| msgid "Delete Wiki or Blog %(name)s" +#, python-format msgid "Delete wiki %(name)s" -msgstr "Ta bort Wiki eller Blogg %(name)s" +msgstr "Ta bort wiki %(name)s" #: plinth/modules/featherwiki/templates/featherwiki_delete.html:18 msgid "" "Hint: You can download a copy of this wiki from within " "Feather Wiki before deleting it." msgstr "" +"Tips: Du kan ladda ner en kopia av denna wiki inifrån " +"Feather Wiki innan du tar bort den." #: plinth/modules/featherwiki/templates/featherwiki_delete.html:25 #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:25 -#, fuzzy -#| msgid "Delete this archive permanently?" msgid "Delete this wiki file permanently?" -msgstr "Vill du ta bort arkivet permanent?" +msgstr "Ta bort denna wikifil permanent?" #: plinth/modules/featherwiki/templates/featherwiki_upload_file.html:20 #: plinth/modules/tiddlywiki/templates/tiddlywiki_upload_file.html:20 -#, fuzzy -#| msgid "Upload File" msgid "Upload" -msgstr "Ladda upp fil" +msgstr "Ladda upp" #: plinth/modules/featherwiki/views.py:20 plinth/modules/tiddlywiki/views.py:20 -#, fuzzy -#| msgid "A share with this name already exists." msgid "A wiki file with the given name already exists." -msgstr "Det finns redan en share med det här namnet." +msgstr "En wikifil med det angivna namnet finns redan." #: plinth/modules/featherwiki/views.py:54 plinth/modules/tiddlywiki/views.py:54 -#, fuzzy -#| msgid "Archive created." msgid "Wiki created." -msgstr "Arkiv skapat." +msgstr "Wiki skapad." #: plinth/modules/featherwiki/views.py:59 plinth/modules/tiddlywiki/views.py:59 -#, fuzzy -#| msgid "An error occurred while creating the library." msgid "An error occurred while creating the wiki." -msgstr "Ett fel uppstod när biblioteket skulle skapas." +msgstr "Ett fel inträffade när du skapade wiki." #: plinth/modules/featherwiki/views.py:76 plinth/modules/tiddlywiki/views.py:76 -#, fuzzy -#| msgid "MediaWiki" msgid "Rename Wiki" -msgstr "MediaWiki" +msgstr "Döp om wiki" #: plinth/modules/featherwiki/views.py:84 plinth/modules/tiddlywiki/views.py:84 msgid "Wiki renamed." -msgstr "" +msgstr "Wiki bytte namn." #: plinth/modules/featherwiki/views.py:89 plinth/modules/tiddlywiki/views.py:89 -#, fuzzy -#| msgid "An error occurred while creating the library." msgid "An error occurred while renaming the wiki." -msgstr "Ett fel uppstod när biblioteket skulle skapas." +msgstr "Ett fel inträffade vid namnbyte på wikin." #: plinth/modules/featherwiki/views.py:106 #: plinth/modules/tiddlywiki/views.py:106 -#, fuzzy -#| msgid "Upload File" msgid "Upload Wiki File" -msgstr "Ladda upp fil" +msgstr "Ladda upp wikifil" #: plinth/modules/featherwiki/views.py:115 #: plinth/modules/tiddlywiki/views.py:116 msgid "Wiki file added." -msgstr "" +msgstr "Wikifil tillagd." #: plinth/modules/featherwiki/views.py:119 #: plinth/modules/tiddlywiki/views.py:120 -#, fuzzy -#| msgid "Failed to add content package." msgid "Failed to add wiki file." -msgstr "Misslyckades med att lägga till innehållspaket." +msgstr "Misslyckades med att lägga till wikifil." #: plinth/modules/featherwiki/views.py:138 #: plinth/modules/tiddlywiki/views.py:139 -#, fuzzy, python-brace-format -#| msgid "Could not delete {name}: {error}" +#, python-brace-format msgid "Could not delete {name}" -msgstr "Kunde inte ta bort {name}: {error}" +msgstr "Kunde inte ta bort {name}" #: plinth/modules/firewall/__init__.py:25 #, python-brace-format @@ -2985,10 +2923,8 @@ msgid "Ports" msgstr "Portar" #: plinth/modules/firewall/manifest.py:10 -#, fuzzy -#| msgid "Blocked" msgid "Blocking" -msgstr "Blockerade" +msgstr "Blockering" #: plinth/modules/firewall/manifest.py:10 plinth/modules/networks/forms.py:319 #: plinth/modules/upgrades/manifest.py:10 @@ -3053,10 +2989,8 @@ msgstr "" "av appen Cockpit." #: plinth/modules/first_boot/__init__.py:61 -#, fuzzy -#| msgid "Setup Complete!" msgid "Setup complete! Next steps:" -msgstr "Installation klar!" +msgstr "Installation klar! Nästa steg:" #: plinth/modules/first_boot/__init__.py:63 #, python-brace-format @@ -3064,14 +2998,16 @@ msgid "" "Initial setup has been completed. Perform the next steps to make your " "{box_name} operational." msgstr "" +"Initial installation har slutförts. Utför nästa steg för att göra din " +"{box_name} operativ." #: plinth/modules/first_boot/__init__.py:66 msgid "Next steps" -msgstr "" +msgstr "Nästa steg" #: plinth/modules/first_boot/__init__.py:73 msgid "See next steps" -msgstr "" +msgstr "Se nästa steg" #: plinth/modules/first_boot/forms.py:14 #, python-brace-format @@ -3089,10 +3025,8 @@ msgid "Firstboot Wizard Secret" msgstr "Firstboot Wizard hemlighet" #: plinth/modules/first_boot/templates/firstboot_complete.html:14 -#, fuzzy -#| msgid "Setup Complete!" msgid "Setup Complete! Next Steps:" -msgstr "Installation klar!" +msgstr "Installation klar! Nästa steg:" #: plinth/modules/first_boot/templates/firstboot_complete.html:21 #, python-format @@ -3100,6 +3034,9 @@ msgid "" "Automatic software update " "runs daily by default. For the first time, manually run it now." msgstr "" +"Automatisk " +"mjukvaruuppdatering körs dagligen som standard. Är det första gången, så " +"kör den manuellt nu." #: plinth/modules/first_boot/templates/firstboot_complete.html:30 #: plinth/modules/upgrades/templates/upgrades_configure.html:119 @@ -3111,6 +3048,8 @@ msgstr "Uppdatera nu" msgid "" "Review privacy options." msgstr "" +"Granska sekretessalternativ." #: plinth/modules/first_boot/templates/firstboot_complete.html:49 #, python-format @@ -3118,12 +3057,15 @@ msgid "" "Review and setup network " "connections. Change the default Wi-Fi password, if applicable." msgstr "" +"Granska och konfigurera " +"nätverksanslutningar. Ändra standardlösenordet för WiFi om det behövs." #: plinth/modules/first_boot/templates/firstboot_complete.html:60 #, python-format msgid "" "Configure a domain name." msgstr "" +"Konfigurera ett domännamn." #: plinth/modules/first_boot/templates/firstboot_complete.html:70 #, python-format @@ -3131,6 +3073,8 @@ msgid "" "Configure and schedule remote backups." msgstr "" +"Konfigurera och schemalägg fjärrsäkerhetskopior." #: plinth/modules/first_boot/templates/firstboot_complete.html:81 #, python-format @@ -3138,6 +3082,8 @@ msgid "" "Put %(box_name)s to use by installing apps." msgstr "" +"Ställ in %(box_name)s att använda genom att installera appar." #: plinth/modules/first_boot/templates/firstboot_welcome.html:29 msgid "Start Setup" @@ -3239,18 +3185,16 @@ msgid "Git" msgstr "Git" #: plinth/modules/gitweb/manifest.py:39 -#, fuzzy -#| msgid "Simple Git Hosting" msgid "Git hosting" -msgstr "Enkelt Git hosting" +msgstr "Git hosting" #: plinth/modules/gitweb/manifest.py:39 msgid "Version control" -msgstr "" +msgstr "Versionskontroll" #: plinth/modules/gitweb/manifest.py:39 msgid "Developer tool" -msgstr "" +msgstr "Utvecklarverktyg" #: plinth/modules/gitweb/templates/gitweb_configure.html:13 msgid "Manage Repositories" @@ -3308,6 +3252,7 @@ msgstr "Redigera respository" msgid "" "GNOME is a desktop environment that focuses on simplicity and ease of use." msgstr "" +"GNOME är en skrivbordsmiljö som fokuserar på enkelhet och användarvänlighet." #: plinth/modules/gnome/__init__.py:21 #, python-brace-format @@ -3317,12 +3262,20 @@ msgid "" "suite, and other basic utilities are available. You may install further " "graphical applications using the software center provided within." msgstr "" +"Denna app förvandlar din {box_name} till en stationär dator om du fysiskt " +"ansluter en bildskärm, ett tangentbord och en mus till den. En webbläsare, " +"en kontorssvit och andra grundläggande verktyg finns tillgängliga. Du kan " +"installera ytterligare grafiska program med hjälp av mjukvarucentret som " +"tillhandahålls." #: plinth/modules/gnome/__init__.py:26 msgid "" "This app is not suitable for low-end hardware. It requires at least 4GiB of " "RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." msgstr "" +"Denna app är inte lämplig för lågpresterande hårdvara. Det kräver minst 4 GB " +"arbetsminne, 4 GB diskutrymme och ett grafikkort som har kapacitet för " +"grundläggande 3D-acceleration." #: plinth/modules/gnome/__init__.py:30 #, python-brace-format @@ -3331,40 +3284,37 @@ msgid "" "need to restart the machine for changes to take " "effect." msgstr "" +"När du har installerat, aktiverat, inaktiverat eller avinstallerat appen " +"måste du starta om maskinen för förändringar " +"ska träda i kraft." #: plinth/modules/gnome/__init__.py:48 -#, fuzzy -#| msgid "GNOME Files" msgid "GNOME" -msgstr "GNOME Filer" +msgstr "GNOME" #: plinth/modules/gnome/manifest.py:9 plinth/templates/clients.html:42 msgid "Desktop" msgstr "Skrivbord" #: plinth/modules/gnome/manifest.py:10 -#, fuzzy -#| msgid "Tor Browser" msgid "Browser" -msgstr "TOR Browser" +msgstr "Webbläsare" #: plinth/modules/gnome/manifest.py:11 msgid "Office suite" -msgstr "" +msgstr "Kontorspaket" #: plinth/modules/gnome/manifest.py:12 -#, fuzzy -#| msgid "Software Update" msgid "Software store" -msgstr "Mjukvaruuppdatering" +msgstr "Mjukvaruaffär" #: plinth/modules/gnome/manifest.py:13 msgid "GUI" -msgstr "" +msgstr "GUI" #: plinth/modules/gnome/manifest.py:14 msgid "Graphical apps" -msgstr "" +msgstr "Grafiska appar" #: plinth/modules/help/__init__.py:33 #: plinth/modules/help/templates/help_index.html:14 @@ -3401,18 +3351,16 @@ msgstr "Skicka feedback" msgid "Contribute" msgstr "Bidrar" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Om" #: plinth/modules/help/templates/help_about.html:25 #: plinth/templates/messages.html:23 -#, fuzzy -#| msgid "Success" msgid "Success:" -msgstr "Lyckades" +msgstr "Slutförd:" #: plinth/modules/help/templates/help_about.html:29 #: plinth/modules/upgrades/templates/upgrades_configure.html:31 @@ -3501,10 +3449,8 @@ msgstr "" "\"apt source paketnamn\" \" i en terminal (med Cockpit eller SSH)." #: plinth/modules/help/templates/help_about.html:97 -#, fuzzy -#| msgid "Learn more" msgid "Learn" -msgstr "Läs mer" +msgstr "Lär" #: plinth/modules/help/templates/help_about.html:116 #: plinth/templates/toolbar.html:19 @@ -3513,17 +3459,15 @@ msgstr "Donera" #: plinth/modules/help/templates/help_about.html:119 msgid "Join project" -msgstr "" +msgstr "Gå med projekt" #: plinth/modules/help/templates/help_about.html:123 msgid "Translate" -msgstr "" +msgstr "Översätt" #: plinth/modules/help/templates/help_about.html:129 -#, fuzzy -#| msgid "Get Support" msgid "Support" -msgstr "Få support" +msgstr "Support" #: plinth/modules/help/templates/help_about.html:133 msgid "Forum" @@ -3696,11 +3640,10 @@ msgid "" "webchat.oftc.net/?randomnick=1&channels=freedombox&prompt=1\"> #freedombox channel using the IRC web interface." msgstr "" -"Många utvecklare och användare av %(box_name)s finns också tillgängliga på " -"IRC-nätverket irc.oftc.net. Gå med, ställ frågor och be om hjälp i #freedombox kanal via " -"webbchatten." +"Många av %(box_name)s bidragsgivare och användare finns också på " +"irc.oftc.net IRC-nätverket. Gå med och begär hjälp på " +"#freedombox kanal med IRC-webbgränssnitt." #: plinth/modules/help/templates/help_manual.html:18 msgid "Download as PDF" @@ -3759,6 +3702,10 @@ msgid "" "alarms, presence sensors, door bells, thermostats, irrigation timers, energy " "monitors, etc." msgstr "" +"Home Assistant är ett hemautomationsnav med betoning på lokal kontroll och " +"integritet. Det integreras med tusentals enheter inklusive smarta lampor, " +"larm, närvarosensorer, dörrklockor, termostater, bevattningstimers, " +"energisövervakare med mera." #: plinth/modules/homeassistant/__init__.py:35 msgid "" @@ -3767,6 +3714,10 @@ msgid "" "requires additional hardware such as a ZigBee USB dongle. You need to re-run " "setup if such hardware is added or removed." msgstr "" +"Home Assistant kan upptäcka, konfigurera och använda olika enheter på det " +"lokala nätverket. För enheter som använder andra protokoll som ZigBee kräver " +"det vanligtvis ytterligare hårdvara som en ZigBee USB-dongel. Du måste köra " +"om inställningarna om sådan hårdvara läggs till eller tas bort." #: plinth/modules/homeassistant/__init__.py:39 msgid "" @@ -3774,24 +3725,22 @@ msgid "" "An administrator account is created at this time. Home Assistant maintains " "its own user accounts." msgstr "" +"Hem Assistent webbgränssnitt måste ställas in strax efter att appen är " +"installerad. Ett administratörskonto skapas vid det tillfället. Home " +"Assistant har sina egna användarkonton." #: plinth/modules/homeassistant/__init__.py:43 -#, fuzzy, python-brace-format -#| msgid "" -#| "Please note that Nextcloud is installed and run inside a container " -#| "provided by the Nextcloud community. Security, quality, privacy and legal " -#| "reviews are done by the upstream project and not by Debian/{box_name}. " -#| "Updates are performed following an independent cycle." +#, python-brace-format msgid "" "Please note that Home Assistant is installed and run inside a container " "provided by the Home Assistant project. Security, quality, privacy and legal " "reviews are done by the upstream project and not by Debian/{box_name}. " "Updates are performed following an independent cycle." msgstr "" -"Observera att Nextcloud installeras och körs i en behållare som " -"tillhandahålls av Nextcloud-gemenskapen. Säkerhet, kvalitet, integritet och " -"juridiska granskningar görs av uppströmsprojektet och inte av Debian/" -"{box_name}. Uppdateringar utförs enligt en oberoende cykel." +"Observera att Home Assistant installeras och körs i en behållare som " +"tillhandahålls av Home Assistantprojektet. Säkerhet, kvalitet, sekretess och " +"juridiska omdömen görs av uppströmsprojektet och inte av Debian/{box_name}. " +"Uppdateringar utförs efter en oberoende cykel." #: plinth/modules/homeassistant/__init__.py:48 msgid "This app is experimental." @@ -3801,17 +3750,15 @@ msgstr "Denna app är experimentell." #: plinth/modules/homeassistant/manifest.py:12 #: plinth/modules/homeassistant/manifest.py:20 msgid "Home Assistant" -msgstr "" +msgstr "Home Assistant" #: plinth/modules/homeassistant/manifest.py:62 -#, fuzzy -#| msgid "Automatic" msgid "Home Automation" -msgstr "Automatisk" +msgstr "Hemautomation" #: plinth/modules/homeassistant/manifest.py:63 msgid "IoT" -msgstr "" +msgstr "IoT" #: plinth/modules/homeassistant/manifest.py:64 #: plinth/modules/networks/manifest.py:8 @@ -3824,15 +3771,15 @@ msgstr "Wi-Fi" #: plinth/modules/homeassistant/manifest.py:65 msgid "ZigBee" -msgstr "" +msgstr "ZigBee" #: plinth/modules/homeassistant/manifest.py:66 msgid "Z-Wave" -msgstr "" +msgstr "Z-Wave" #: plinth/modules/homeassistant/manifest.py:67 msgid "Thread" -msgstr "" +msgstr "Thread" #: plinth/modules/homeassistant/templates/homeassistant.html:17 msgid "" @@ -3840,6 +3787,10 @@ msgid "" "URL path. Please select the domain on which Home Assistant will be " "available. Home Assistant will not be available on other domains." msgstr "" +"Home Assistant kräver en dedikerad domän för att arbeta med och kan inte " +"arbeta på en URL-sökväg. Välj den domän där Home Assistant kommer att finnas " +"tillgänglig. Home Assistant kommer inte att finnas tillgänglig på andra " +"domäner." #: plinth/modules/homeassistant/templates/homeassistant.html:28 #, python-format @@ -3849,6 +3800,11 @@ msgid "" "href=\"%(names_url)s\">Names app and Dynamic DNS app for configuring subdomains." msgstr "" +"En separat domän kan göras tillgänglig för Home Assistant genom att " +"konfigurera en underdomän som homeassistant.mydomain.exempel. Se Namn appen och Dynamisk DNS appen för konfigurering av " +"underdomäner." #: plinth/modules/homeassistant/templates/homeassistant.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:18 @@ -3896,7 +3852,7 @@ msgstr "Lösenord för administratörskontot" #: plinth/modules/ikiwiki/manifest.py:15 #: plinth/modules/wordpress/manifest.py:26 msgid "Blog" -msgstr "" +msgstr "Blogg" #: plinth/modules/ikiwiki/templates/ikiwiki_configure.html:12 msgid "Manage Wikis and Blogs" @@ -4004,7 +3960,7 @@ msgstr "" #: plinth/modules/infinoted/manifest.py:46 msgid "Collaborative editing" -msgstr "" +msgstr "Samarbetsredigering" #: plinth/modules/janus/__init__.py:23 msgid "Janus is a lightweight WebRTC server." @@ -4027,6 +3983,9 @@ msgid "" "only be installed if frequent feature updates is enabled in the Software Update app." msgstr "" +"Notera: Denna app får frekventa funktionsuppdateringar. Det " +"kan endast installeras om frekventa funktionsuppdateringar aktiveras i Programuppdatering appen." #: plinth/modules/janus/__init__.py:47 msgid "Janus" @@ -4037,18 +3996,16 @@ msgid "Janus Video Room" msgstr "Janus videorum" #: plinth/modules/janus/manifest.py:16 -#, fuzzy -#| msgid "Web Server" msgid "WebRTC" -msgstr "Webbserver" +msgstr "Webbkommunikation i realtid" #: plinth/modules/janus/manifest.py:16 msgid "Web conference" -msgstr "" +msgstr "Webbkonferens" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "JavaScript-licensinformation" @@ -4065,16 +4022,12 @@ msgid "JSXC" msgstr "JSXC" #: plinth/modules/jsxc/manifest.py:16 -#, fuzzy -#| msgid "Web Search" msgid "Web chat" -msgstr "Webbsökning" +msgstr "Webbchat" #: plinth/modules/jsxc/manifest.py:16 plinth/modules/quassel/manifest.py:54 -#, fuzzy -#| msgid "IRC Client" msgid "Client" -msgstr "IRC-klient" +msgstr "Klient" #: plinth/modules/kiwix/__init__.py:21 msgid "" @@ -4145,27 +4098,23 @@ msgstr "" "raderas omedelbart för att spara diskutrymme." #: plinth/modules/kiwix/manifest.py:24 -#, fuzzy -#| msgid "Offline Wikipedia" msgid "Offline reader" -msgstr "Offline Wikipedia" +msgstr "Offlineläsare" #: plinth/modules/kiwix/manifest.py:25 msgid "Archival" -msgstr "" +msgstr "Arkiv" #: plinth/modules/kiwix/manifest.py:26 #: plinth/modules/shadowsocks/manifest.py:19 #: plinth/modules/shadowsocksserver/manifest.py:18 #: plinth/modules/tor/manifest.py:60 plinth/modules/torproxy/manifest.py:57 msgid "Censorship resistance" -msgstr "" +msgstr "Censurmotstånd" #: plinth/modules/kiwix/manifest.py:27 -#, fuzzy -#| msgid "Offline Wikipedia" msgid "Wikipedia" -msgstr "Offline Wikipedia" +msgstr "Wikipedia" #: plinth/modules/kiwix/templates/kiwix-add-package.html:29 #, python-format @@ -4219,10 +4168,8 @@ msgid "Add a new content package" msgstr "Lägg till ett nytt innehållspaket" #: plinth/modules/kiwix/views.py:76 -#, fuzzy -#| msgid "Content package added." msgid "Content package already exists." -msgstr "Innehållspaket har lagts till." +msgstr "Innehållspaket finns redan." #: plinth/modules/kiwix/views.py:79 msgid "Failed to add content package." @@ -4268,10 +4215,8 @@ msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/letsencrypt/manifest.py:11 -#, fuzzy -#| msgid "Website Security" msgid "Web security" -msgstr "Säkerhet för webbsida" +msgstr "Webbsäkerhet" #: plinth/modules/letsencrypt/templates/letsencrypt.html:25 msgid "Certificate Status" @@ -4321,16 +4266,13 @@ msgid "Obtain" msgstr "Skaffa" #: plinth/modules/letsencrypt/templates/letsencrypt.html:112 -#, fuzzy, python-format -#| msgid "" -#| "No domains have been configured. Configure " -#| "domains to be able to obtain certificates for them." +#, python-format msgid "" "No domains have been configured. Configure " "domains to be able to obtain certificates for them." msgstr "" -"Inga domäner har konfigurerats. Konfigurera " -"domäner för att kunna få certifikat för dem." +"Inga domäner har konfigurerats. Konfigurera " +"domäner för att kunna få certifikat för dem." #: plinth/modules/letsencrypt/views.py:40 #, python-brace-format @@ -4456,16 +4398,12 @@ msgstr "FluffyChat" #: plinth/modules/matrixsynapse/manifest.py:101 #: plinth/modules/quassel/manifest.py:54 -#, fuzzy -#| msgid "IRC Chatroom" msgid "Chat room" -msgstr "IRC chatrum" +msgstr "Chattrum" #: plinth/modules/matrixsynapse/manifest.py:105 -#, fuzzy -#| msgid "Media streaming server" msgid "Matrix server" -msgstr "Media Streaming Server" +msgstr "Matrixserver" #: plinth/modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:18 msgid "" @@ -4478,24 +4416,13 @@ msgstr "" "användar-ID kommer att se ut som @ användarnamn: domännamn." #: plinth/modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:31 -#, fuzzy -#| msgid "" -#| "\n" -#| " Warning! Changing the domain name after this step " -#| "will\n" -#| " require uninstalling and reinstalling the app which will wipe app's " -#| "data.\n" -#| " " msgid "" "Warning! Changing the domain name after this step will " "require uninstalling and reinstalling the app which will wipe app's data." msgstr "" -"\n" -" Varning! Om du ändrar domännamnet efter det här " -"steget\n" -" kräver avinstallation och ominstallation av appen vilket kommer att " -"radera appens data.\n" -" " +" Varning! Ändring av domännamnet efter det här steget kommer att kräva att " +"du avinstallerar och installerar om appen vilket kommer att radera appens " +"data." #: plinth/modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:42 #, python-format @@ -4507,19 +4434,16 @@ msgstr "" "minst en domän för att kunna använda Matrix Synapse." #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:20 -#, fuzzy, python-format -#| msgid "" -#| "The Matrix server domain is set to %(domain_name)s. User IDs " -#| "will look like @username:%(domain_name)s. Changing the domain " -#| "name after the initial setup is currently not supported." +#, python-format msgid "" "The Matrix server domain is set to %(domain_name)s. User IDs will " "look like @username:%(domain_name)s. Changing the domain name " "requires uninstalling and reinstalling the app which will wipe app's data." msgstr "" -"Matrix-serverdomänen är inställd på %(domain_name)s . Användar-ID " -"kommer att se ut som @användarnamn:%(domain_name)s . Ändring av " -"domännamn efter den första installationen stöds för närvarande inte." +"Matrix serverdomänen är inställd på %(domain_name)s. Användar-ID " +"ser ut som @användarnamn:%(domain_name)s. Att ändra domännamnet " +"kräver att man avinstallerar och installerar om appen vilket kommer att " +"radera appens data." #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:28 msgid "" @@ -4562,10 +4486,8 @@ msgid "Unlimited" msgstr "Obegränsat" #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:78 -#, fuzzy -#| msgid "RSS Feed Generator" msgid "Federation" -msgstr "RSS Feed Generator" +msgstr "Federation" #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:81 #, python-format @@ -4576,6 +4498,11 @@ msgid "" "hosted here. If you face problems with federation, try the federation tester tool." msgstr "" +"Matrix Synapse är konfigurerad för att arbeta med andra Matrix-servrar på " +"internet. Detta gör det möjligt för %(box_name)s användare att delta i rum " +"som är drivs någon annanstans och Matrix-användare på andra servrar att " +"delta i rum drivna här. Om du stöter på problem med federation, prova federationstestverktyg." #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:99 #, python-format @@ -4757,26 +4684,21 @@ msgid "Default language changed" msgstr "Standardspråk ändrat" #: plinth/modules/minetest/__init__.py:33 -#, fuzzy, python-brace-format -#| msgid "" -#| "Minetest is a multiplayer infinite-world block sandbox. This module " -#| "enables the Minetest server to be run on this {box_name}, on the default " -#| "port (30000). To connect to the server, a Minetest client is needed." +#, python-brace-format msgid "" "Luanti, formally known as Minetest, is a multiplayer infinite-world block " "sandbox. This module enables the Luanti server to be run on this {box_name}, " "on the default port (30000). To connect to the server, a Luanti client is needed." msgstr "" -"Minetest är en multiplayer-sandlåda med oändlig värld. Denna modul gör det " -"möjligt att köra Minetest-servern på denna {box_name}, på standardporten " -"(30000). För att ansluta till servern, en Minetest klient behövs." +"Luanti, formellt känd som Minetest, är en multiplayer infiniteworld block " +"sandbox. Denna modul gör det möjligt för Luantiservern att köras på denna " +"{box_name}, på standardporten (30000). För att ansluta till servern behövs " +"en Luantiklient." #: plinth/modules/minetest/__init__.py:57 plinth/modules/minetest/manifest.py:9 msgid "Luanti" -msgstr "" +msgstr "Luanti" #: plinth/modules/minetest/forms.py:13 msgid "Maximum number of players" @@ -4820,20 +4742,16 @@ msgid "When disabled, players cannot die or receive damage of any kind." msgstr "Om inaktiverat kan spelare inte dö eller få skador av något slag." #: plinth/modules/minetest/manifest.py:49 -#, fuzzy -#| msgid "Updated server." msgid "Game server" -msgstr "Uppdaterad server." +msgstr "Spelserver" #: plinth/modules/minetest/manifest.py:49 -#, fuzzy -#| msgid "Block Sandbox" msgid "Block sandbox" msgstr "Block sandbox" #: plinth/modules/minetest/manifest.py:49 msgid "Platform" -msgstr "" +msgstr "Plattform" #: plinth/modules/minetest/templates/minetest.html:17 #: plinth/modules/networks/forms.py:105 plinth/modules/networks/forms.py:145 @@ -4890,24 +4808,20 @@ msgid "totem" msgstr "totem" #: plinth/modules/minidlna/manifest.py:116 -#, fuzzy -#| msgid "Simple Media Server" msgid "Media server" -msgstr "Enkel mediaserver" +msgstr "Mediaserver" #: plinth/modules/minidlna/manifest.py:116 msgid "Television" -msgstr "" +msgstr "Television" #: plinth/modules/minidlna/manifest.py:116 msgid "UPnP" -msgstr "" +msgstr "Universal Plug and Play" #: plinth/modules/minidlna/manifest.py:116 -#, fuzzy -#| msgid "MiniDLNA" msgid "DLNA" -msgstr "MiniDLNA" +msgstr "DLNA" #: plinth/modules/minidlna/views.py:33 msgid "Updated media directory" @@ -4921,6 +4835,11 @@ msgid "" "subscribe to your favorite sites and access full article contents within the " "reader itself." msgstr "" +"Miniflux är ett webbaserat verktyg som samlar nyheter och blogguppdateringar " +"från olika webbplatser till ett centraliserat lättläst format. Den har ett " +"enkelt gränssnitt och fokuserar på en distraktionsfri läsupplevelse. Du kan " +"prenumerera på dina favoritwebbplatser och få tillgång till fullständigt " +"innehåll i läsaren själv." #: plinth/modules/miniflux/__init__.py:23 msgid "" @@ -4930,156 +4849,132 @@ msgid "" "are several third-party clients as well." msgstr "" +"Viktiga funktioner inkluderar tangentbordsgenvägar för snabb navigering, " +"fullständig textsökning, artikelfiltrering, kategorier och favoriter. " +"Miniflux bevarar användarnas integritet genom att ta bort spårare. Det " +"primära gränssnittet är webbaserat. Det finns flera tredje part klienter också." #: plinth/modules/miniflux/__init__.py:42 #: plinth/modules/miniflux/manifest.py:10 msgid "Miniflux" -msgstr "" +msgstr "Miniflux" #: plinth/modules/miniflux/forms.py:12 -#, fuzzy -#| msgid "Enter a valid username." msgid "Enter a username for the user." -msgstr "Ange ett giltigt användarnamn." +msgstr "Ange ett användarnamn för användaren." #: plinth/modules/miniflux/forms.py:16 msgid "Enter a strong password with a minimum of 6 characters." -msgstr "" +msgstr "Ange ett starkt lösenord med minst 6 tecken." #: plinth/modules/miniflux/forms.py:18 -#, fuzzy -#| msgid "Updating configuration" msgid "Password confirmation" -msgstr "Uppdatera konfigurationen" +msgstr "Lösenordbekräftelse" #: plinth/modules/miniflux/forms.py:20 -#, fuzzy -#| msgid "" -#| "Enter the password for user \"{user}\" to authorize account modifications." msgid "Enter the same password for confirmation." -msgstr "" -"Ange lösenordet för användaren \"{user}\" för att godkänna " -"kontomodifieringar." +msgstr "Ange samma lösenord för bekräftelse." #: plinth/modules/miniflux/forms.py:31 -#, fuzzy -#| msgid "Password updated" msgid "Passwords do not match." -msgstr "Lösenord uppdaterad" +msgstr "Lösenorden stämmer inte." #: plinth/modules/miniflux/manifest.py:18 msgid "Fluent Reader Lite" -msgstr "" +msgstr "Fluent Reader Lite" #: plinth/modules/miniflux/manifest.py:33 -#, fuzzy -#| msgid "News Feed Reader" msgid "Fluent Reader" -msgstr "Läsare för nyhetsflödet" +msgstr "Fluent Reader" #: plinth/modules/miniflux/manifest.py:46 msgid "FluxNews" -msgstr "" +msgstr "FluxNews" #: plinth/modules/miniflux/manifest.py:61 msgid "MiniFlutt" -msgstr "" +msgstr "MiniFlutt" #: plinth/modules/miniflux/manifest.py:71 msgid "NetNewsWire" -msgstr "" +msgstr "NetNewsWire" #: plinth/modules/miniflux/manifest.py:86 msgid "Newsflash" -msgstr "" +msgstr "Newsflash" #: plinth/modules/miniflux/manifest.py:96 -#, fuzzy -#| msgid "Read" msgid "Read You" -msgstr "Läsa" +msgstr "Read You" #: plinth/modules/miniflux/manifest.py:106 msgid "RSS Guard" -msgstr "" +msgstr "RSS Guard" #: plinth/modules/miniflux/manifest.py:138 -#, fuzzy -#| msgid "News Feed Reader" msgid "Feed reader" -msgstr "Läsare för nyhetsflödet" +msgstr "Feed Reader" #: plinth/modules/miniflux/manifest.py:138 msgid "News aggregation" -msgstr "" +msgstr "Nyhetsaggregation" #: plinth/modules/miniflux/manifest.py:138 #: plinth/modules/rssbridge/manifest.py:16 -#, fuzzy -#| msgid "SSH" msgid "RSS" -msgstr "SSH" +msgstr "RSS" #: plinth/modules/miniflux/manifest.py:138 #: plinth/modules/rssbridge/manifest.py:16 msgid "ATOM" -msgstr "" +msgstr "ATOM" #: plinth/modules/miniflux/templates/miniflux.html:14 msgid "" "Create an admin user to get started. Other users can be created from within " "Miniflux." msgstr "" +"Skapa en admininistratörsanvändare för att komma igång. Andra användare kan " +"skapas inifrån Miniflux." #: plinth/modules/miniflux/templates/miniflux.html:22 #: plinth/modules/miniflux/templates/miniflux.html:24 -#, fuzzy -#| msgid "Create User" msgid "Create admin user" -msgstr "Skapa användare" +msgstr "Skapa administratörsanvändare" #: plinth/modules/miniflux/templates/miniflux.html:27 #: plinth/modules/miniflux/templates/miniflux.html:29 -#, fuzzy -#| msgid "Set SuperUser Password" msgid "Reset user password" -msgstr "Ange SuperUser lösenord" +msgstr "Återställ lösenord" #: plinth/modules/miniflux/views.py:38 -#, fuzzy -#| msgid "Create User" msgid "Create Admin User" -msgstr "Skapa användare" +msgstr "Skapa administratörsanvändare" #: plinth/modules/miniflux/views.py:48 -#, fuzzy, python-brace-format -#| msgid "Invalid username: {username}" +#, python-brace-format msgid "Created admin user: {username}" -msgstr "Ogiltigt användernamn: {username}" +msgstr "Skapad administratör: {username}" #: plinth/modules/miniflux/views.py:53 -#, fuzzy, python-brace-format -#| msgid "An error occurred while creating the repository." +#, python-brace-format msgid "An error occurred while creating the user: {error}." -msgstr "Ett fel uppstod medan skapa ett repository." +msgstr "Ett fel inträffade när du skapade användaren: {error}." #: plinth/modules/miniflux/views.py:70 -#, fuzzy -#| msgid "Set SuperUser Password" msgid "Reset User Password" -msgstr "Ange SuperUser lösenord" +msgstr "Återställ lösenord" #: plinth/modules/miniflux/views.py:80 -#, fuzzy, python-brace-format -#| msgid "Invalid username: {username}" +#, python-brace-format msgid "Password reset for user: {username}" -msgstr "Ogiltigt användernamn: {username}" +msgstr "Lösenord återställt för användaren: {username}" #: plinth/modules/miniflux/views.py:85 -#, fuzzy, python-brace-format -#| msgid "An error occurred during configuration." +#, python-brace-format msgid "An error occurred during password reset: {error}." -msgstr "Ett fel inträffade under konfiguration." +msgstr "Ett fel inträffade under återställning av lösenord: {error}." #: plinth/modules/mumble/__init__.py:26 msgid "" @@ -5104,10 +4999,8 @@ msgid "Mumble" msgstr "Mumble" #: plinth/modules/mumble/__init__.py:158 -#, fuzzy -#| msgid "Mumble server is running" msgid "Mumble server is configured" -msgstr "Mumble-servern är aktiverad" +msgstr "Mumble-servern är konfigurerad" #: plinth/modules/mumble/forms.py:30 msgid "Set SuperUser Password" @@ -5156,7 +5049,7 @@ msgstr "Mumla" #: plinth/modules/mumble/manifest.py:67 msgid "Group conference" -msgstr "" +msgstr "Gruppkonferens" #: plinth/modules/mumble/views.py:43 msgid "SuperUser password successfully updated." @@ -5189,16 +5082,16 @@ msgstr "Namntjänster" #: plinth/modules/names/__init__.py:69 msgid "Domain (regular)" -msgstr "" +msgstr "Domän (regelbunden)" #: plinth/modules/names/__init__.py:178 msgid "Package systemd-resolved is installed" -msgstr "" +msgstr "Paketet systemd-resolved är installerat" #: plinth/modules/names/__init__.py:232 #, python-brace-format msgid "Resolve domain name: {domain}" -msgstr "" +msgstr "Lös domännamn: {domain}" #: plinth/modules/names/components.py:14 msgid "All" @@ -5214,11 +5107,11 @@ msgstr "Secure Shell" #: plinth/modules/names/forms.py:22 msgid "Use DNS-over-TLS for resolving domains (global preference)" -msgstr "" +msgstr "Använd DNS-over-TLS för att lösa domäner (global preferens)" #: plinth/modules/names/forms.py:50 msgid "Use DNSSEC when resolving domains (global preference)" -msgstr "" +msgstr "Använd DNSSEC när du löser domäner (global preferens)" #: plinth/modules/names/forms.py:85 plinth/modules/names/manifest.py:12 msgid "Hostname" @@ -5258,10 +5151,8 @@ msgstr "" "domännamnet får max vara 253 tecken." #: plinth/modules/names/manifest.py:13 -#, fuzzy -#| msgid "Evolution" msgid "DNS Resolution" -msgstr "Evolution" +msgstr "DNS-upplösning" #: plinth/modules/names/resolved.py:91 plinth/modules/names/resolved.py:101 #: plinth/modules/networks/forms.py:28 @@ -5275,28 +5166,24 @@ msgstr "Ja" #: plinth/modules/names/resolved.py:92 plinth/modules/networks/forms.py:29 #: plinth/modules/networks/views.py:124 msgid "opportunistic" -msgstr "" +msgstr "opportunistiska" #: plinth/modules/names/resolved.py:93 plinth/modules/names/resolved.py:103 #: plinth/modules/networks/forms.py:30 plinth/modules/networks/views.py:123 -#, fuzzy -#| msgid "Dino" msgid "no" -msgstr "Dino" +msgstr "ingen" #: plinth/modules/names/resolved.py:102 msgid "allow-downgrade" -msgstr "" +msgstr "tillåt nedgradering" #: plinth/modules/names/resolved.py:110 -#, fuzzy -#| msgid "Get Support" msgid "supported" -msgstr "Få support" +msgstr "stöds" #: plinth/modules/names/resolved.py:110 msgid "unsupported" -msgstr "" +msgstr "stöds inte" #: plinth/modules/names/templates/names-domain-add.html:11 #, python-format @@ -5305,6 +5192,9 @@ msgid "" "here. The name servers responsible for the domain must be pointing (A and " "AAAA records) to the public IP addresses of the %(box_name)s." msgstr "" +"Om du har köpt ett domännamn från en domänregistrator kan du konfigurera det " +"här. Namnservrar som ansvarar för domänen måste peka (A och AAA-poster) på " +"de offentliga IP-adresserna i %(box_name)s." #: plinth/modules/names/templates/names-domain-add.html:18 #, python-format @@ -5314,12 +5204,16 @@ msgid "" "to %(box_name)s. Subdomains are useful for hosting multiple applications " "that each require a dedicted domain for themselves." msgstr "" +"Om du också vill använda en underdomän av en redan konfigurerad domän, lägg " +"till en annan post för den här. Se till att underdomänen konfigureras för " +"att peka på %(box_name)s. Subdomäner är användbara för att vara värd för " +"flera applikationer som varje kräver en dedikerad domän för sig själv." #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Redigera" @@ -5329,66 +5223,56 @@ msgstr "Lägg till domäner" #: plinth/modules/names/templates/names.html:87 msgid "Resolver Status" -msgstr "" +msgstr "DNS-klientstatus" #: plinth/modules/names/templates/names.html:97 msgid "Global" -msgstr "" +msgstr "Global" #: plinth/modules/names/templates/names.html:99 msgid "Link" -msgstr "" +msgstr "Länk" #: plinth/modules/names/templates/names.html:104 #: plinth/modules/networks/templates/connection_show.html:268 msgid "DNS-over-TLS" -msgstr "" +msgstr "Krypterad DNS via TLS" #: plinth/modules/names/templates/names.html:108 -#, fuzzy -#| msgid "Enable DNSSEC" msgid "DNSSEC" -msgstr "Aktivera DNSSEC" +msgstr "DNSSEC" #: plinth/modules/names/templates/names.html:113 -#, fuzzy -#| msgid "Second DNS Server" msgid "Current DNS Server" -msgstr "Sekundär DNS-server" +msgstr "Nuvarande DNS-server" #: plinth/modules/names/templates/names.html:119 -#, fuzzy -#| msgid "DNS Server" msgid "DNS Servers" -msgstr "DNS-Server" +msgstr "DNS-servrar" #: plinth/modules/names/templates/names.html:129 -#, fuzzy -#| msgid "DNS Server" msgid "Fallback DNS Servers" -msgstr "DNS-Server" +msgstr "Reserv-DNS-servrar" #: plinth/modules/names/templates/names.html:143 msgid "" "systemd-resolved package is not installed. Install it for additional " "functionality." msgstr "" +"systemd-resolved paketet är inte installerat. Installera det för ytterligare " +"funktionalitet." #: plinth/modules/names/templates/names.html:152 plinth/templates/setup.html:87 msgid "Install" msgstr "Installera" #: plinth/modules/names/templates/names.html:162 -#, fuzzy -#| msgid "Error during installation" msgid "Error retrieving status:" -msgstr "Fel vid installation" +msgstr "Fel vid hämtning av status:" #: plinth/modules/names/views.py:83 -#, fuzzy -#| msgid "Hostname" msgid "Set Hostname" -msgstr "Värdnamn" +msgstr "Ställ in värdnamn" #: plinth/modules/names/views.py:101 #, python-brace-format @@ -5396,10 +5280,8 @@ msgid "Error setting hostname: {exception}" msgstr "Fel inställning av värdnamn: {exception}" #: plinth/modules/names/views.py:117 -#, fuzzy -#| msgid "Domain Name" msgid "Add Domain Name" -msgstr "Domännamn" +msgstr "Lägg till domännamn" #: plinth/modules/networks/__init__.py:19 msgid "" @@ -5457,7 +5339,7 @@ msgstr "" #: plinth/modules/networks/forms.py:56 msgid "Use DNS-over-TLS" -msgstr "" +msgstr "Använd DNS-via-TLS" #: plinth/modules/networks/forms.py:90 msgid "IPv4 Addressing Method" @@ -5558,16 +5440,12 @@ msgstr "" "Internetanslutning från det här nätverket" #: plinth/modules/networks/forms.py:136 -#, fuzzy -#| msgid "" -#| "Automatic: Configure automatically, use Internet connection from this " -#| "network" msgid "" "Link-local: Configure automatically to use an address that is only relevant " "to this network." msgstr "" -"Automatiskt: Konfigurera automatiskt, använd Internetanslutning från det här " -"nätverket" +"Link-local: Konfigurera automatiskt för att använda en adress som endast är " +"relevant för detta nätverk." #: plinth/modules/networks/forms.py:141 msgid "Ignore: Ignore this addressing method" @@ -5575,7 +5453,7 @@ msgstr "Ignorera: Ignorera den här adresseringsmetoden" #: plinth/modules/networks/forms.py:142 msgid "Disabled: Disable IPv6 for this connection" -msgstr "" +msgstr "Inaktiverad: Inaktivera IPv6 för denna anslutning" #: plinth/modules/networks/forms.py:147 msgid "Prefix" @@ -5859,14 +5737,12 @@ msgstr "Internet" #: plinth/modules/networks/manifest.py:8 plinth/modules/privoxy/manifest.py:10 #: plinth/modules/samba/manifest.py:82 -#, fuzzy -#| msgid "Local Network Domain" msgid "Local network" -msgstr "Lokalt nätverksdomän" +msgstr "Lokalt nätverk" #: plinth/modules/networks/manifest.py:8 msgid "Topology" -msgstr "" +msgstr "Topologi" #: plinth/modules/networks/templates/connection_show.html:27 #, python-format @@ -5904,6 +5780,7 @@ msgstr "Ta bort anslutning" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Anslutning" @@ -6030,7 +5907,7 @@ msgstr "Brandväggs zon" #: plinth/modules/networks/templates/connection_show.html:338 #: plinth/templates/internal-zone.html:13 plinth/templates/messages.html:20 msgid "Info:" -msgstr "" +msgstr "Information:" #: plinth/modules/networks/templates/connection_show.html:292 msgid "" @@ -6116,11 +5993,10 @@ msgid "Edit Connection" msgstr "Redigera Anslutning" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 -#, fuzzy -#| msgid "Error" msgid "Error:" -msgstr "Fel" +msgstr "Fel:" #: plinth/modules/networks/templates/connections_fields.html:20 #: plinth/modules/users/templates/users_update.html:51 @@ -6129,10 +6005,8 @@ msgid "Close" msgstr "Stäng" #: plinth/modules/networks/templates/connections_fields.html:32 -#, fuzzy -#| msgid "Generic" msgid "General" -msgstr "Generiska" +msgstr "Allmänna" #: plinth/modules/networks/templates/connections_fields_pppoe.html:15 #: plinth/network.py:30 @@ -6326,11 +6200,17 @@ msgstr "" "tjänsterna." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Om du inte har kontroll över routern kan du välja att inte konfigurera den. " "Om du vill se alternativ för att övervinna denna begränsning väljer du 'Jag " @@ -6367,29 +6247,24 @@ msgstr "" #: plinth/modules/networks/templates/wifi_scan.html:14 msgid "No Wi-Fi device detected." -msgstr "" +msgstr "Inga WiFi-enhet upptäckt." #: plinth/modules/networks/templates/wifi_scan.html:21 -#, fuzzy, python-format -#| msgid "Delete %(username)s" +#, python-format msgid "Device: %(interface_name)s" -msgstr "Ta bort %(username)s" +msgstr "Enhet: %(interface_name)s" #: plinth/modules/networks/templates/wifi_scan.html:27 -#, fuzzy -#| msgid "Last Connected Time" msgid "Last scanned: " -msgstr "Senast ansluten tid" +msgstr "Senast skannad: " #: plinth/modules/networks/templates/wifi_scan.html:31 msgid "never" -msgstr "" +msgstr "aldrig" #: plinth/modules/networks/templates/wifi_scan.html:52 -#, fuzzy -#| msgid "Wi-Fi network not found" msgid "No Wi-Fi networks found." -msgstr "Wi-Fi-nätverket hittades inte" +msgstr "Inga WiFi-nätverk hittades." #: plinth/modules/networks/views.py:27 msgid "disabled" @@ -6413,13 +6288,11 @@ msgstr "länk-lokal" #: plinth/modules/networks/views.py:32 msgid "dhcp" -msgstr "" +msgstr "dhcp" #: plinth/modules/networks/views.py:33 -#, fuzzy -#| msgid "Ignore" msgid "ignore" -msgstr "Ignorera" +msgstr "ignorera" #: plinth/modules/networks/views.py:40 msgid "unmanaged" @@ -6571,10 +6444,8 @@ msgid "mesh point" msgstr "mesh point" #: plinth/modules/networks/views.py:122 -#, fuzzy -#| msgid "Default" msgid "default" -msgstr "Standard" +msgstr "standardvärde" #: plinth/modules/networks/views.py:155 msgid "Cannot show connection: Connection not found." @@ -6730,7 +6601,7 @@ msgstr "" #: plinth/modules/nextcloud/manifest.py:56 #: plinth/modules/syncthing/manifest.py:58 msgid "File sync" -msgstr "" +msgstr "Filsynkronisering" #: plinth/modules/nextcloud/manifest.py:56 #: plinth/modules/sharing/__init__.py:34 @@ -6738,15 +6609,47 @@ msgid "Sharing" msgstr "Sharing" #: plinth/modules/nextcloud/manifest.py:56 plinth/modules/sogo/manifest.py:72 -#, fuzzy -#| msgid "Group Share" msgid "Groupware" -msgstr "Grupp Share" +msgstr "Groupware" #: plinth/modules/nextcloud/views.py:53 msgid "Password update failed. Please choose a stronger password." msgstr "Lösenordsuppdateringen misslyckades. Välj ett starkare lösenord." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "Applikationer" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Auktoriserade SSH-nycklar" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Auktoriserade SSH-nycklar" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6785,17 +6688,13 @@ msgstr "Tunnelblick" #: plinth/modules/openvpn/manifest.py:60 #: plinth/modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "DNS server" msgid "VPN server" -msgstr "DNS-Server" +msgstr "VPN-server" #: plinth/modules/openvpn/manifest.py:60 plinth/modules/pagekite/manifest.py:17 #: plinth/modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "Name Services" msgid "Remote access" -msgstr "Namntjänster" +msgstr "Fjärråtkomst" #: plinth/modules/openvpn/templates/openvpn.html:12 msgid "Profile" @@ -6877,10 +6776,10 @@ msgid "" "provider, for example pagekite.net. In " "the future it might be possible to use your buddy's {box_name} for this." msgstr "" -"PageKite arbetar runt NAT, brandväggar och IP adress begränsningar med hjälp " +"PageKite arbetar runt NAT, brandväggar och IP-adress begränsningar med hjälp " "av en kombination av tunnlar och omvända proxyservrar. Du kan använda valfri " -"pagekite-tjänstprovider, till exempel " -"pagekite. net . I framtiden kan det vara möjligt att använda din kompis " +"pagekite-tjänstprovider, till exempel " +"pagekite. net . I framtiden kan det vara möjligt att använda din kompis " "{box_name} för detta." #: plinth/modules/pagekite/__init__.py:59 @@ -6969,13 +6868,11 @@ msgstr "Den här tjänsten finns redan" #: plinth/modules/pagekite/manifest.py:16 msgid "Reachability" -msgstr "" +msgstr "Tillgänglighet" #: plinth/modules/pagekite/manifest.py:18 -#, fuzzy -#| msgid "Tunnelblick" msgid "Tunneling" -msgstr "Tunnelblick" +msgstr "Tunnling" #: plinth/modules/pagekite/templates/pagekite_configure.html:13 msgid "Custom Services" @@ -7001,19 +6898,14 @@ msgid "Add custom PageKite service" msgstr "Lägg till anpassad PageKite-tjänst" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:19 -#, fuzzy -#| msgid "" -#| "Warning:
Your PageKite frontend server may not support all the " -#| "protocol/port combinations that you are able to define here. For example, " -#| "HTTPS on ports other than 443 is known to cause problems." msgid "" "Your PageKite frontend server may not support all the protocol/port " "combinations that you are able to define here. For example, HTTPS on ports " "other than 443 is known to cause problems." msgstr "" -" Varning:
din PageKite frontend-Server kanske inte stöder alla " -"de protokoll/port kombinationer som du kan definiera här. Till exempel, " -"HTTPS på andra portar än 443 är kända för att orsaka problem." +"Din PageKite-frontendserver kanske inte stöder alla protokoll/" +"portkombinationer som du kan definiera här. Till exempel är HTTPS på andra " +"portar än 443 kända för att orsaka problem." #: plinth/modules/pagekite/utils.py:45 msgid "Web Server (HTTP)" @@ -7046,8 +6938,8 @@ msgid "" "See SSH client setup instructions" msgstr "" -"Se SSH-klientinstallation instruktioner" +"Se SSH-klientinsställning instruktioner" #: plinth/modules/performance/__init__.py:19 msgid "" @@ -7069,14 +6961,12 @@ msgstr "" "Cockpit-appen." #: plinth/modules/performance/manifest.py:18 -#, fuzzy -#| msgid "System Monitoring" msgid "Monitoring" -msgstr "Systemövervakning" +msgstr "Övervakning" #: plinth/modules/performance/manifest.py:18 msgid "Resource utilization" -msgstr "" +msgstr "Resursutnyttjande" #: plinth/modules/power/__init__.py:14 msgid "Restart or shut down the system." @@ -7088,16 +6978,14 @@ msgstr "Ström" #: plinth/modules/power/manifest.py:10 msgid "Reboot" -msgstr "" +msgstr "Omstart" #: plinth/modules/power/manifest.py:10 -#, fuzzy -#| msgid "Shut down" msgid "Shutdown" -msgstr "Stänga ner" +msgstr "Avstängning" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Starta om" @@ -7161,6 +7049,12 @@ msgid "" "provided by the FreedomBox Foundation at https://ddns.freedombox.org/ip/. If " "empty, lookups are disabled and some functionality will fail." msgstr "" +"Valfritt värde. Denna URL används för att bestämma den offentligt synliga IP-" +"adressen för din {box_name}. Adressen ska helt enkelt returnera IPv4- eller " +"IPv6-adressen där kundens begäran kommer från. Standard är att använda " +"tjänsten som tillhandahålls av FreedomBox Foundation på https://" +"ddns.freedombox.org/ip/. Om de lämnas tomma, är uppslagning inaktiverade och " +"vissa funktioner kommer att misslyckas." #: plinth/modules/privacy/forms.py:25 msgid "Periodically submit a list of apps used (suggested)" @@ -7187,7 +7081,7 @@ msgstr "" #: plinth/modules/privacy/forms.py:37 msgid "Allow using fallback DNS servers" -msgstr "" +msgstr "Tillåt användning av reserv-DNS-servrar" #: plinth/modules/privacy/forms.py:39 msgid "" @@ -7196,28 +7090,26 @@ msgid "" "available. Can be disabled in most cases if network connectivity is stable " "and reliable." msgstr "" +"Använd välkända offentliga DNS-servrar för att lösa domännamn under ovanliga " +"omständigheter där inga DNS-servrar är kända men internetanslutning är " +"tillgänglig. Kan inaktiveras i de flesta fall om nätverksanslutningen är " +"stabil och tillförlitlig." #: plinth/modules/privacy/forms.py:45 -#, fuzzy -#| msgid "URL to look up public IP" msgid "URL to look up public IP address" -msgstr "URL för att hitta publik IP" +msgstr "URL för att leta upp offentlig IP-adress" #: plinth/modules/privacy/manifest.py:10 msgid "Usage reporting" -msgstr "" +msgstr "Användningsrapportering" #: plinth/modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "Enable repro service" msgid "External services" -msgstr "Aktivera tjänsten repro" +msgstr "Externa tjänster" #: plinth/modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "DNS Server" msgid "Fallback DNS" -msgstr "DNS-Server" +msgstr "Reserv-DNS" #: plinth/modules/privoxy/__init__.py:25 msgid "" @@ -7256,15 +7148,13 @@ msgstr "Anslut till {url} med proxy {proxy} på TCP {kind}" #: plinth/modules/privoxy/manifest.py:10 msgid "Ad blocker" -msgstr "" +msgstr "Reklamblockerare" #: plinth/modules/privoxy/manifest.py:10 #: plinth/modules/shadowsocks/manifest.py:18 #: plinth/modules/torproxy/manifest.py:55 -#, fuzzy -#| msgid "Gobby Server" msgid "Proxy server" -msgstr "Gobby-Server" +msgstr "Proxyserver" #: plinth/modules/quassel/__init__.py:24 #, python-brace-format @@ -7290,10 +7180,10 @@ msgid "" "downloads\">desktop and mobile devices are available." msgstr "" -"Du kan ansluta till din quassel-kärna på standard-quassel-porten 4242. " -"Klienter att ansluta till quassel från din Desktop och mobila-enheter är tillgängliga." +"Du kan ansluta till din Quasselkärna på standard Quasselport 4242. Klienter " +"för att ansluta till Quassel från din desktop och mobila enheter är tillgängliga." #: plinth/modules/quassel/__init__.py:51 plinth/modules/quassel/manifest.py:9 msgid "Quassel" @@ -7305,27 +7195,21 @@ msgstr "Quasseldroid" #: plinth/modules/quassel/manifest.py:54 msgid "IRC" -msgstr "" +msgstr "IRC" #: plinth/modules/radicale/__init__.py:25 -#, fuzzy, python-brace-format -#| msgid "" -#| "Radicale is a CalDAV and CardDAV server. It allows synchronization and " -#| "sharing of scheduling and contact data. To use Radicale, a supported client application is needed. Radicale can be " -#| "accessed by any user with a {box_name} login." +#, python-brace-format msgid "" "Radicale is a CalDAV and CardDAV server. It allows synchronization and " "sharing of scheduling and contact data. To use Radicale, a supported client application is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -"Radicale är en CalDAV och CardDAV server. Det möjliggör synkronisering och " -"delning av schemaläggning och kontaktdata. För att använda Radicale behövs " -"ett stöds klientprogram. Radicale kan nås av alla användare med en " -"{box_name} inloggning." +"Radicale är en CalDAV och CardDAV-server. Det möjliggör synkronisering och " +"delning av kalender- och kontaktdata. För att använda Radicale behövs en stödd " +"användarklient. Radikal kan nås av alla användare med en {box_name} " +"inloggning." #: plinth/modules/radicale/__init__.py:31 msgid "" @@ -7379,9 +7263,10 @@ msgid "" ") and your user name. DAVx5 will show all existing " "calendars and address books and you can create new." msgstr "" -"Ange URL-adressen till Radicale-servern (t. ex. https://" -") och ditt användarnamn. DAVx5 kommer att visa alla " -"befintliga kalendrar och adressböcker och du kan skapa nya." +"Ange webbadressen till Radicale-servern (t.ex. https://" +") och ditt användarnamn. DAVx5 visar alla " +"befintliga kalendrar och adressböcker och du kan skapa nya." #: plinth/modules/radicale/manifest.py:28 plinth/modules/sogo/manifest.py:51 msgid "GNOME Calendar" @@ -7406,29 +7291,27 @@ msgid "" ") and your user name. Clicking on the search button " "will list the existing calendars and address books." msgstr "" -"I evolution lägga till en ny kalender och adressbok respektive med WebDAV. " -"Ange URL-adressen till Radicale-servern (t. ex. https://" -") och ditt användarnamn. Om du klickar på " -"sökknappen visas en lista över befintliga kalendrar och adressböcker." +"Lägg till en ny kalender respektive adressbok i Evolution med WebDAV. Ange " +"webbadressen till Radicale-servern (t.ex. https://) " +"och ditt användarnamn. Klicka på sökknappen så listas de befintliga " +"kalendrarna och adressböckerna." #: plinth/modules/radicale/manifest.py:91 plinth/modules/sogo/manifest.py:73 -#, fuzzy -#| msgid "GNOME Calendar" msgid "Calendar" -msgstr "GNOME-kalender" +msgstr "Kalender" #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/roundcube/manifest.py:23 msgid "Contacts" -msgstr "" +msgstr "Kontakter" #: plinth/modules/radicale/manifest.py:91 plinth/modules/sogo/manifest.py:75 msgid "CalDAV" -msgstr "" +msgstr "Caldav" #: plinth/modules/radicale/manifest.py:91 plinth/modules/sogo/manifest.py:76 msgid "CardDAV" -msgstr "" +msgstr "CardDAV" #: plinth/modules/radicale/views.py:32 msgid "Access rights configuration updated" @@ -7469,12 +7352,12 @@ msgid "" "lesssecureapps\">https://www.google.com/settings/security/lesssecureapps)." msgstr "" -"För Gmail, anvädarnamn vilja bli din Gmail adress, lösenord vilja bli din " -"Google redovisa lösenord och Servaren vilja bli imaps://" -"imap.gmail.com. Observera att du också måste aktivera \"mindre säkra " -"appar\" i inställningarna för Google-kontot (https://www.Google.com/" -"settings/Security/lesssecureapps)." +"För Gmail kommer användarnamn att vara din Gmail-adress. Lösenord kommer att " +"vara ditt Googlelösenord och server kommer att vara imaps://" +"imap.gmail.com. Observera att du också behöver aktivera \"Less safe " +"apps\" i dina Googlekontoinställningar (https://www.google.com/settings/security/" +"lesssecureapps)." #: plinth/modules/roundcube/forms.py:16 msgid "Use only the local mail server" @@ -7495,10 +7378,8 @@ msgstr "" "vilket konto de vill ansluta till." #: plinth/modules/roundcube/manifest.py:23 -#, fuzzy -#| msgid "FairEmail" msgid "Email" -msgstr "FairEmail" +msgstr "Epost" #: plinth/modules/rssbridge/__init__.py:21 msgid "" @@ -7518,19 +7399,16 @@ msgstr "" "användare som tillhör feed-reader-gruppen." #: plinth/modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Tiny Tiny RSS to " -#| "follow various websites. When adding a feed, enable authentication and " -#| "use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Nextcloud News to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"Du kan använda RSS-Bridge med Tiny Tiny RSS för " -"att följa olika webbplatser. När du lägger till ett feed aktiverar du " -"autentisering och använder dina {box_name}-autentiseringsuppgifter." +"Du kan använda RSS-Bridge med Miniflux eller " +"Nextcloud News för att följa olika " +"webbplatser. När du lägger till ett flöde, aktivera autentisering och använd " +"dina {box_name} referenser." #: plinth/modules/rssbridge/__init__.py:49 msgid "Read and subscribe to news feeds" @@ -7550,14 +7428,12 @@ msgid "Allow this application to be used by anyone who can reach it." msgstr "Tillåt att det här programmet används av alla som kan nå det." #: plinth/modules/rssbridge/manifest.py:16 -#, fuzzy -#| msgid "RSS Feed Generator" msgid "Feed generator" -msgstr "RSS Feed Generator" +msgstr "Flödesgenerator" #: plinth/modules/rssbridge/manifest.py:16 msgid "News" -msgstr "" +msgstr "Nyheter" #: plinth/modules/samba/__init__.py:23 msgid "" @@ -7576,9 +7452,9 @@ msgid "" "are three types of shares you can choose from: " msgstr "" "Efter installationen kan du välja vilka diskar som ska användas för delning. " -"Aktiverade resurser är tillgängliga i filhanteraren på din dator på plats \\" -"\\{hostname} (på Windows) eller SMB://{hostname}. local (på Linux och Mac). " -"Det finns tre typer av shares som du kan välja mellan: " +"Aktiverade delningar är tillgängliga i filhanteraren på din dator på platsen " +"\\ {hostname} (på Windows) eller smb://{hostname}.local (på Linux och Mac). " +"Det finns tre typer av delningar du kan välja mellan: " #: plinth/modules/samba/__init__.py:31 msgid "Open share - accessible to everyone in your local network." @@ -7609,10 +7485,8 @@ msgid "Samba" msgstr "Samba" #: plinth/modules/samba/manifest.py:12 -#, fuzzy -#| msgid "Samba" msgid "SambaLite" -msgstr "Samba" +msgstr "SambaLite" #: plinth/modules/samba/manifest.py:26 msgid "Ghost Commander" @@ -7631,22 +7505,16 @@ msgid "Dolphin" msgstr "Dolphin" #: plinth/modules/samba/manifest.py:83 -#, fuzzy -#| msgid "Network Interface" msgid "Network drive" -msgstr "Nätverksgränssnitt" +msgstr "Nätverksenhet" #: plinth/modules/samba/manifest.py:84 -#, fuzzy -#| msgid "Media streaming server" msgid "Media storage" -msgstr "Media Streaming Server" +msgstr "Medialagring" #: plinth/modules/samba/manifest.py:85 -#, fuzzy -#| msgid "Backups" msgid "Backup storage" -msgstr "Säkerhetskopiering" +msgstr "Backuplagring" #: plinth/modules/samba/templates/samba.html:20 msgid "Shares" @@ -7670,9 +7538,9 @@ msgid "" "href=\"%(storage_url)s\">storage module page and configure access to the " "shares on the users module page." msgstr "" -"Du kan hitta ytterligare information om diskar på sidan storage module och konfigurera åtkomsten till " -"resurserna på sidan usersmodule." +"Du kan hitta ytterligare information om diskar på lagring modulsidan och konfigurera åtkomst till " +"delningarna på användare modul sida." #: plinth/modules/samba/templates/samba.html:120 msgid "Users who can currently access group and home shares" @@ -7781,14 +7649,12 @@ msgid "Strict" msgstr "Strikt" #: plinth/modules/searx/manifest.py:17 -#, fuzzy -#| msgid "Web Search" msgid "Web search" msgstr "Webbsökning" #: plinth/modules/searx/manifest.py:17 msgid "Metasearch Engine" -msgstr "" +msgstr "Metasökmotor" #: plinth/modules/security/forms.py:13 msgid "Fail2Ban (recommended)" @@ -7805,16 +7671,12 @@ msgstr "" "Internet-tjänster." #: plinth/modules/security/manifest.py:10 -#, fuzzy -#| msgid "Automatic" msgid "Automatic bans" -msgstr "Automatisk" +msgstr "Automatiska förbud" #: plinth/modules/security/manifest.py:10 -#, fuzzy -#| msgid "Ports" msgid "Reports" -msgstr "Portar" +msgstr "Rapporter" #: plinth/modules/security/templates/security.html:12 #: plinth/modules/security/templates/security.html:14 @@ -7918,10 +7780,12 @@ msgid "N/A" msgstr "N/A" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Ja" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Nej" @@ -7955,13 +7819,11 @@ msgstr "Bokmärken" #: plinth/modules/shaarli/manifest.py:34 msgid "Link blog" -msgstr "" +msgstr "Länkblogg" #: plinth/modules/shaarli/manifest.py:34 -#, fuzzy -#| msgid "in use" msgid "Single user" -msgstr "används" +msgstr "Enkel användare" #: plinth/modules/shadowsocks/__init__.py:18 #: plinth/modules/shadowsocksserver/__init__.py:18 @@ -8029,23 +7891,17 @@ msgstr "Krypteringsmetod. Måste matcha inställningen på servern." #: plinth/modules/shadowsocks/manifest.py:20 #: plinth/modules/shadowsocksserver/manifest.py:19 -#, fuzzy -#| msgid "Encryption" msgid "Encrypted tunnel" -msgstr "Kryptering" +msgstr "Krypterad tunnel" #: plinth/modules/shadowsocks/manifest.py:21 -#, fuzzy -#| msgid "Endpoint" msgid "Entry point" -msgstr "Slutpunkt" +msgstr "Ingångspunkt" #: plinth/modules/shadowsocks/manifest.py:22 #: plinth/modules/shadowsocksserver/manifest.py:21 -#, fuzzy -#| msgid "Shadowsocks Client" msgid "Shadowsocks" -msgstr "Shadowsocks klient" +msgstr "Shadowsocks" #: plinth/modules/shadowsocksserver/__init__.py:26 #, python-brace-format @@ -8078,8 +7934,6 @@ msgid "Encryption method. Clients must use the same setting." msgstr "Krypteringsmetod. Klienter måste använda samma inställning." #: plinth/modules/shadowsocksserver/manifest.py:20 -#, fuzzy -#| msgid "Endpoint" msgid "Exit point" msgstr "Slutpunkt" @@ -8141,10 +7995,8 @@ msgid "Shares should be either public or shared with at least one group" msgstr "Shares ska antingen vara offentliga eller delas med minst en grupp" #: plinth/modules/sharing/manifest.py:19 plinth/modules/zoph/manifest.py:26 -#, fuzzy -#| msgid "Sharing" msgid "Web sharing" -msgstr "Sharing" +msgstr "Webbdelning" #: plinth/modules/sharing/templates/sharing.html:18 #: plinth/modules/sharing/templates/sharing.html:21 @@ -8213,10 +8065,17 @@ msgstr "" "kommer att rensas automatiskt enligt inställningarna nedan." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Ögonblicksbilder fungerar för närvarande endast på Btrfs-filsystem och " "endast på rotpartitionen. Ögonblicksbilder är inte en ersättning för Postfix/Dovecot email " "server app to retrieve, manage, and send email." msgstr "" +"Webmail fungerar med Postfix/Dovecot e-" +"postserver app för att hämta, hantera och skicka e-post." #: plinth/modules/sogo/__init__.py:30 #, python-brace-format @@ -8463,26 +8328,25 @@ msgid "" "their mailboxes by the email server app can be read and new mail can be sent " "out." msgstr "" +"Alla användare på {box_name} kan logga in och använda SOGo. Mails levereras " +"till sina brevlådor via e-postserverappen kan läsas och ny post kan skickas " +"ut." #: plinth/modules/sogo/__init__.py:48 plinth/modules/sogo/manifest.py:11 msgid "SOGo" -msgstr "" +msgstr "SOGo" #: plinth/modules/sogo/manifest.py:19 msgid "Thunderbird + SOGo connector" -msgstr "" +msgstr "Thunderbird + SOGo-kontakt" #: plinth/modules/sogo/manifest.py:71 -#, fuzzy -#| msgid "FairEmail" msgid "Webmail" -msgstr "FairEmail" +msgstr "Webbmail" #: plinth/modules/sogo/manifest.py:74 -#, fuzzy -#| msgid "Address" msgid "Address book" -msgstr "Adress" +msgstr "Adressbok" #: plinth/modules/ssh/__init__.py:22 msgid "" @@ -8497,10 +8361,8 @@ msgstr "" "anslutningar." #: plinth/modules/ssh/__init__.py:42 -#, fuzzy -#| msgid "Secure Shell (SSH) Server" msgid "Secure Shell Server" -msgstr "Secure Shell-Server (SSH)" +msgstr "SSH-server" #: plinth/modules/ssh/__init__.py:75 msgid "Remotely login using Secure Shell (SSH)" @@ -8535,20 +8397,14 @@ msgstr "" "freedombox-ssh logga in via SSH." #: plinth/modules/ssh/manifest.py:22 -#, fuzzy -#| msgid "SSH" msgid "SSH" msgstr "SSH" #: plinth/modules/ssh/manifest.py:22 -#, fuzzy -#| msgid "Remove Location" msgid "Remote terminal" -msgstr "Ta bort plats" +msgstr "Fjärrterminal" #: plinth/modules/ssh/manifest.py:22 -#, fuzzy -#| msgid "Fingerprint" msgid "Fingerprints" msgstr "Fingeravtryck" @@ -8572,26 +8428,6 @@ msgstr "Algoritm" msgid "Fingerprint" msgstr "Fingeravtryck" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Enkel inloggning på" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "Skriv in bokstäverna i bilden för att gå vidare till inloggningssidan" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "Fortsätt till inloggning" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Logga in" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "Du har loggat ut framgångsrikt." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8726,7 +8562,7 @@ msgstr "Gå till Ström" #: plinth/modules/storage/__init__.py:447 #: plinth/modules/storage/tests/test_storage.py:407 msgid "grub package is configured" -msgstr "" +msgstr "grubpaket är konfigurerat" #: plinth/modules/storage/forms.py:63 msgid "Invalid directory name." @@ -8766,23 +8602,19 @@ msgstr "Annan katalog (specificera nedan)" #: plinth/modules/storage/manifest.py:9 msgid "Disks" -msgstr "" +msgstr "Diskar" #: plinth/modules/storage/manifest.py:9 msgid "Usage" -msgstr "" +msgstr "Användning" #: plinth/modules/storage/manifest.py:9 -#, fuzzy -#| msgid "Automatic" msgid "Auto-mount" -msgstr "Automatisk" +msgstr "Montera automatiskt" #: plinth/modules/storage/manifest.py:9 -#, fuzzy -#| msgid "Expand Root Partition" msgid "Expand partition" -msgstr "Utöka root-partitionen" +msgstr "Utöka partitionen" #: plinth/modules/storage/templates/storage.html:17 msgid "The following storage devices are in use:" @@ -8911,6 +8743,10 @@ msgid "" "several short notes called Tiddlers and link them together into a dense " "graph." msgstr "" +"TiddlyWiki är en interaktiv applikation som körs helt i webbläsaren. Varje " +"wiki är en självinnehållen HTML-fil som lagras på din {box_name}. Istället " +"för att skriva långa wikisidor uppmuntrar TiddlyWiki dig att skriva flera " +"korta anteckningar som heter Tiddlers och länka dem ihop till en tät graf." #: plinth/modules/tiddlywiki/__init__.py:30 msgid "" @@ -8920,6 +8756,11 @@ msgid "" "TiddlyWiki. Encrypting individual tiddlers or password-protecting a wiki " "file is possible from within the application." msgstr "" +"Det är en mångsidig applikation med ett brett utbud av användningsfall - " +"icke-linjär anteckningsbok, webbplats, personlig kunskapsbas, uppgift och " +"projektledningssystem, personlig dagbok etc. Plugins kan utöka " +"funktionaliteten hos TiddlyWiki. Kryptera enskilda tiddlar eller " +"lösenordsskydda en wiki-fil är möjligt inifrån programmet." #: plinth/modules/tiddlywiki/__init__.py:37 #, python-brace-format @@ -8927,45 +8768,50 @@ msgid "" "TiddlyWiki is downloaded from {box_name} website and not from Debian. Wikis " "need to be upgraded to newer version manually." msgstr "" +"TiddlyWiki laddas ner från {box_name} webbplats och inte från Debian. Wikis " +"måste uppgraderas till nyare version manuellt." #: plinth/modules/tiddlywiki/__init__.py:46 msgid "Create a new wiki or upload your existing wiki file to get started." msgstr "" +"Skapa en ny wiki eller ladda upp din befintliga wiki-fil för att komma igång." #: plinth/modules/tiddlywiki/__init__.py:64 #: plinth/modules/tiddlywiki/manifest.py:9 msgid "TiddlyWiki" -msgstr "" +msgstr "TiddlyWiki" #: plinth/modules/tiddlywiki/forms.py:39 msgid "A TiddlyWiki file with .html file extension" -msgstr "" +msgstr "En Tiddly Wiki-fil med .html filändelse" #: plinth/modules/tiddlywiki/forms.py:43 msgid "TiddlyWiki files must be in HTML format" -msgstr "" +msgstr "Tiddly Wiki-filer måste vara i HTML-format" #: plinth/modules/tiddlywiki/forms.py:46 msgid "Upload an existing TiddlyWiki file from this computer." -msgstr "" +msgstr "Ladda upp en befintlig TiddlyWiki-fil från den här datorn." #: plinth/modules/tiddlywiki/manifest.py:22 msgid "Journal" -msgstr "" +msgstr "Dagbok" #: plinth/modules/tiddlywiki/manifest.py:23 msgid "Digital garden" -msgstr "" +msgstr "Digital trädgård" #: plinth/modules/tiddlywiki/manifest.py:24 msgid "Zettelkasten" -msgstr "" +msgstr "Zettelkasten" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:18 msgid "" "Hint: You can download a copy of this wiki from within " "TiddlyWiki before deleting it." msgstr "" +"Tips: Du kan ladda ner en kopia av denna wiki inifrån " +"TiddlyWiki innan du tar bort den." #: plinth/modules/tor/__init__.py:34 plinth/modules/torproxy/__init__.py:30 msgid "" @@ -8975,11 +8821,11 @@ msgid "" "the Tor Browser." msgstr "" -"Tor är ett anonymt kommunikationssystem. Du kan läsa mer om det från " -"webbplatsen Tor Project. För " -"bästa skydd när du surfar på webben rekommenderar Tor-projektet att du " -"använder TOR Browser." +"Tor är ett anonymt kommunikationssystem. Du kan lära dig mer om det från Tor Project webbplats. För bästa " +"skydd vid webbsurfning rekommenderar Tor-projektet att du använder Tor " +"Browser." #: plinth/modules/tor/__init__.py:40 msgid "" @@ -9117,25 +8963,21 @@ msgstr "Ange minst en uppströms bro för att använda uppströms broar." #: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" -msgstr "TOR Browser" +msgstr "Tor Browser" #: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: proxy med Tor" #: plinth/modules/tor/manifest.py:57 -#, fuzzy -#| msgid "Onion Service" msgid "Onion services" -msgstr "Onion tjänst" +msgstr "Oniontjänst" #: plinth/modules/tor/manifest.py:58 msgid "Relay" -msgstr "Relay" +msgstr "relä" #: plinth/modules/tor/manifest.py:59 plinth/modules/torproxy/manifest.py:56 -#, fuzzy -#| msgid "Anonymity Network" msgid "Anonymity network" msgstr "Anonymitetsnätverk" @@ -9303,29 +9145,27 @@ msgid "FreedomBox Updated" msgstr "FreedomBox uppdaterad" #: plinth/modules/upgrades/__init__.py:141 -#, fuzzy -#| msgid "Software Update" msgid "Run software update manually" -msgstr "Mjukvaruuppdatering" +msgstr "Kör programuppdatering manuellt" #: plinth/modules/upgrades/__init__.py:143 msgid "" "Automatic software update runs daily by default. For the first time, " "manually run it now." msgstr "" +"Automatisk mjukvaruuppdatering körs dagligen som standard. För första gången " +"kör manuellt det nu." #: plinth/modules/upgrades/__init__.py:319 #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:9 #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:11 #: plinth/modules/upgrades/templates/upgrades_configure.html:16 -#, fuzzy -#| msgid "Distribution update started" msgid "Distribution Update" -msgstr "Distributionsuppdateringen har startats" +msgstr "Distributionsuppdatering" #: plinth/modules/upgrades/__init__.py:394 msgid "Check for package holds" -msgstr "" +msgstr "Kontrollera för pakethåll" #: plinth/modules/upgrades/forms.py:15 msgid "Enable auto-update" @@ -9354,25 +9194,15 @@ msgstr "Aktivera frekventa uppdateringar (rekommenderas)" #: plinth/modules/upgrades/manifest.py:10 msgid "Reboots" -msgstr "" +msgstr "Startar om" #: plinth/modules/upgrades/manifest.py:10 -#, fuzzy -#| msgid "New value" msgid "New features" -msgstr "Nytt värde" +msgstr "Nya funktioner" #: plinth/modules/upgrades/templates/backports-firstboot.html:14 #: plinth/modules/upgrades/templates/upgrades_configure.html:69 -#, fuzzy, python-format -#| msgid "" -#| "Frequent feature updates allow the %(box_name)s Service, plus a very " -#| "limited set of software, to receive new features more frequently (from " -#| "the backports repository). This results in receiving some new features " -#| "within weeks, instead of only once every 2 years or so. Note that " -#| "software with frequent feature updates does not have support from the " -#| "Debian Security Team. Instead, they are maintained by contributors to " -#| "Debian and the %(box_name)s community." +#, python-format msgid "" "Frequent feature updates allow the %(box_name)s Service, plus a very limited " "set of software, to receive new features more frequently (from the backports " @@ -9382,13 +9212,13 @@ msgid "" "Team. Instead, they are maintained by contributors to Debian and the " "%(box_name)s community." msgstr "" -"Frekventa funktionsuppdateringar gör att %(box_name)s Tjänsten, plus en " -"mycket begränsad uppsättning programvaror, kan ta emot nya funktioner oftare " -"(från backports-förvaret). Detta resulterar i att få några nya funktioner " -"inom veckor, i stället för bara en gång vart 2 år eller så. Observera att " -"programvara med frekventa funktionsuppdateringar inte har stöd från Debians " -"säkerhetsgrupp. Istället underhålls de av bidragsgivare till Debian och " -"%(box_name)s community." +"Frekventa funktionsuppdateringar tillåter %(box_name)s Service, plus en " +"mycket begränsad uppsättning programvara att få nya funktioner oftare (från " +"bakporten eller instabilt mjukvaruförråd). Detta resulterar i att få några " +"nya funktioner inom veckor istället för bara en gång vartannat år eller så. " +"Observera att programvara med frekventa funktionsuppdateringar inte har stöd " +"från Debian Security Team. Istället upprätthålls de av bidragsgivare till " +"Debian och %(box_name)s gemenskapen." #: plinth/modules/upgrades/templates/backports-firstboot.html:26 msgid "" @@ -9411,10 +9241,8 @@ msgid "Next" msgstr "Nästa" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:11 -#, fuzzy -#| msgid "Could not start distribution update" msgid "Confirm Distribution Update?" -msgstr "Det gick inte att starta distributionsuppdatering" +msgstr "Bekräfta distributionsuppdatering?" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:21 #, python-format @@ -9423,34 +9251,41 @@ msgid "" "released. Proceed only if you wish to help with beta testing of %(box_name)s " "functionality." msgstr "" +"Du håller på att uppdatera till nästa distributionsversion innan den har " +"släppts. Proceed only if you want to help with beta testing of %(box_name)s " +"functionality." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:32 msgid "" "Take a full backup of all apps and data before performing a distribution " "update." msgstr "" +"Ta en fullständig säkerhetskopia av alla appar och data innan du utför en " +"distributionsuppdatering." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:38 msgid "" "The process will take several hours. Most apps will be unavailable during " "this time." msgstr "" +"Processen tar flera timmar. De flesta appar kommer att vara otillgängliga " +"under denna tid." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:44 msgid "" "Don't interrupt the process by shutting down or interrupting power to the " "machine." msgstr "" +"Avbryt inte processen genom att stänga av eller slå av strömmen till " +"maskinen." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:50 msgid "If the process is interrupted, you should be able to continue it." -msgstr "" +msgstr "Om processen avbryts bör du kunna fortsätta den." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:66 -#, fuzzy -#| msgid "Could not start distribution update" msgid "Confirm & Start Distribution Update" -msgstr "Det gick inte att starta distributionsuppdatering" +msgstr "Bekräfta och starta versionsuppdatering" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:15 msgid "" @@ -9458,10 +9293,14 @@ msgid "" "apps will be unavailable during this period. Don't interrupt the process by " "shutting down or interrupting power to the machine." msgstr "" +"Distributionsuppdateringen har börjat. Denna operation kan ta flera timmar. " +"De flesta appar kommer att vara otillgängliga under denna period. Avbryt " +"inte processen genom att stänga av eller slå av strömmen till maskinen." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:21 msgid "Distribution update has completed. Reboot the machine, if necessary." msgstr "" +"Distributionsuppdateringen har slutförts. Starta om maskinen vid behov." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:25 #, python-format @@ -9470,6 +9309,9 @@ msgid "" "then. See manual page for expected " "changes and transitions during the distribution upgrade." msgstr "" +"Distributionsuppdateringen börjar snart. Ta en säkerhetskopia av appar och " +"data innan dess. Se manual för " +"förväntade förändringar och övergångar under distributionsuppgraderingen." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:31 #, python-format @@ -9478,19 +9320,14 @@ msgid "" "and data before then. See manual page " "for expected changes and transitions during the distribution upgrade." msgstr "" +"Distributionsuppdateringen startar om %(in_days)s dagar. Ta en " +"säkerhetskopia av appar och data innan dess. Se manuell sida för förväntade förändringar " +"och övergångar under distributionsuppgraderingen." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:42 -#, fuzzy -#| msgid "Test Distribution Upgrade" msgid "Go to Distribution Update" -msgstr "Uppgradering av testdistribution" - -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "Avfärda" +msgstr "Gå till distributionsduppdatering" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format @@ -9505,77 +9342,78 @@ msgid "" "changes, you can keep each distribution for at least 5 years before updating." msgstr "" +"Din %(box_name)s kommer att få säkerhetsuppdateringar, viktiga korrigeringar " +"och vissa utvalda funktioner med regelbundna programuppdateringar. För att " +"ge en lång livscykel för mjukvara för %(box_name)s kommer hela " +"operativsystemet att få en stor distributionsuppdatering vartannat år. Detta " +"kommer att omfatta större funktioner och förändringar. Ibland kommer gamla " +"funktioner att sluta fungera. Vänligen konsultera manual för förväntade förändringar och " +"övergångar under en distributionsuppgradering. Om du ogillar dessa " +"förändringar kan du hålla varje distribution i minst 5 år innan du uppdaterar." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:34 msgid "" "Distribution update is currently running. This operation may take several " "hours. Most apps will be unavailable during this period." msgstr "" +"Distributionsuppdateringen körs för närvarande. Denna operation kan ta flera " +"timmar. De flesta appar kommer att vara otillgängliga under denna period." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:50 -#, fuzzy -#| msgid "Automatic upgrades disabled" msgid "Automatic updates are disabled." -msgstr "Automatiska uppgraderingar inaktiverade" +msgstr "Automatiska uppdateringar är inaktiverade." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:54 -#, fuzzy -#| msgid "Distribution upgrade disabled" msgid "Distribution upgrades are disabled." -msgstr "Distributionsuppgradering inaktiverad" +msgstr "Distributionsuppgradering inaktiverad." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:58 msgid "" "You need to have at least 5 GB of free space available on primary disk to " "perform a distribution update." msgstr "" +"Du måste ha minst 5 GB ledigt utrymme tillgängligt på primär disk för att " +"utföra en distributionsuppdatering." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:65 msgid "Your current distribution is mixed or not understood." -msgstr "" +msgstr "Din nuvarande distribution är blandad eller inte förstådd." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:72 -#, fuzzy -#| msgid "Test Distribution Upgrade" msgid "Current Distribution:" -msgstr "Uppgradering av testdistribution" +msgstr "Nuvarande distribution:" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:74 -#, fuzzy -#| msgid "unknown error" msgid "Unknown or mixed" -msgstr "okänd fel" +msgstr "Okänd eller blandad" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:77 msgid "Rolling release distribution" -msgstr "" +msgstr "Distribution med rullande utgåva" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:84 -#, fuzzy, python-format -#| msgid "Delete site %(site)s" +#, python-format msgid "Released: %(date)s." -msgstr "Ta bort webbsida %(site)s" +msgstr "Släpptes %(date)s." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:91 -#, fuzzy -#| msgid "Test Distribution Upgrade" msgid "Next Stable Distribution:" -msgstr "Uppgradering av testdistribution" +msgstr "Nästa stabila distribution:" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:93 -#, fuzzy -#| msgid "unknown" msgid "Unknown" -msgstr "okänd" +msgstr "Okänt" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:99 #, python-format msgid "Likely release: %(date)s." -msgstr "" +msgstr "Troligt släppdatum: %(date)s." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:107 msgid "Next stable distribution is not available yet." -msgstr "" +msgstr "Nästa stabila distribution är inte tillgänglig ännu." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:113 #, python-format @@ -9584,12 +9422,17 @@ msgid "" "necessary. Thank you for helping test the %(box_name)s project. Please " "report any problems you notice." msgstr "" +"Du är på en distribution med rullande utgåva. Ingen distributionsuppdatering " +"är nödvändig. Tack för att du hjälpte till att testa %(box_name)s-projektet. " +"Vänligen rapportera eventuella problem du märker." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:121 msgid "" "A previous run of distribution update may have been interrupted. Please re-" "run the distribution update." msgstr "" +"En tidigare distributionsuppdatering kan ha avbrutits. Vänligen kör " +"distributionsuppdateringen på nytt." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:128 #, python-format @@ -9598,6 +9441,8 @@ msgid "" "automatically in %(period)s. You may choose to update manually now, if you " "wish." msgstr "" +"En ny stabil distribution är tillgänglig. Din %(box_name)s uppdateras " +"automatiskt i %(period)s. Du kan välja att uppdatera manuellt nu om du vill." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:136 #, python-format @@ -9605,6 +9450,9 @@ msgid "" "A new stable distribution is available. Your %(box_name)s will be updated " "automatically soon. You may choose to update manually now, if you wish." msgstr "" +"En ny stabil distribution är tillgänglig. Din %(box_name)s kommer att " +"uppdateras automatiskt snart. Du kan välja att uppdatera manuellt nu om du " +"vill." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:144 #, python-format @@ -9614,25 +9462,23 @@ msgid "" "next distribution manually. This setup may experience occational app " "failures until the next stable release." msgstr "" +"Du är på den senaste stabila distributionen. Detta rekommenderas. Men om du " +"vill hjälpa betatesta %(box_name)s funktionalitet, kan du uppdatera till " +"nästa distribution manuellt. Denna inställning kan uppleva enstaka appfel " +"fram till nästa stabila release." #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:157 #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:172 -#, fuzzy -#| msgid "Test Distribution Upgrade" msgid "Start Distribution Update" -msgstr "Uppgradering av testdistribution" +msgstr "Starta distributionsuppdatering" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:162 -#, fuzzy -#| msgid "Test Distribution Upgrade" msgid "Continue Distribution Update" -msgstr "Uppgradering av testdistribution" +msgstr "Fortsätt distributionuppdatering" #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:167 -#, fuzzy -#| msgid "Starting distribution upgrade test." msgid "Start Distribution Update (for testing)" -msgstr "Startar distributionsuppgraderingstest." +msgstr "Starta distributionsuppdatering (för testning)" #: plinth/modules/upgrades/templates/upgrades-new-release.html:9 #, python-format @@ -9712,10 +9558,8 @@ msgid "Error when configuring unattended-upgrades" msgstr "Fel vid konfigurering av obevakad uppgraderingar" #: plinth/modules/upgrades/views.py:117 -#, fuzzy -#| msgid "Starting distribution upgrade test." msgid "Started distribution update." -msgstr "Startar distributionsuppgraderingstest." +msgstr "Startade distributionsuppdatering." #: plinth/modules/upgrades/views.py:153 msgid "Upgrade process started." @@ -9755,37 +9599,41 @@ msgstr "" msgid "Users and Groups" msgstr "Användare och grupper" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Tillgång till alla tjänster och systeminställningar" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Kontrollera LDAP-posten \"{search_item}\"" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Kontrollera nslcd-konfigurationen \"{key}{value}\"" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Kontrollera nsswitch-konfigurationen \"{database}\"" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "Skriv in bokstäverna i bilden för att gå vidare till inloggningssidan" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "Användarnamnet är upptaget eller är reserverade." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" "Valfritt. Används för att skicka e-post för att återställa lösenord och " "viktiga meddelanden." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9794,27 +9642,27 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" "Välj vilka tjänster som ska vara tillgängliga för den nya användaren. " -"Användaren kommer att kunna logga in på tjänster som stöder enkel inloggning " -"via LDAP, om de finns i lämplig grupp.

Användare i " -"administratörsgruppen kommer att kunna logga in på alla tjänster. De kan " -"också logga in på systemet via SSH och har administratörsprivilegier (sudo)." +"Användaren kommer att kunna logga in på tjänster som stöder enkel sign-on " +"via LDAP, om de är i lämplig grupp.

Användare i admin-gruppen kommer " +"att kunna logga in på alla tjänster. De kan också logga in på systemet genom " +"SSH och ha administrativa privilegier (sudo)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "Ange ett giltigt användarnamn." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "Krävs. 150 tecken eller färre. Engelska bokstäver, siffror och endast @/./-/" "_ ." -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "Auktoriseringslösenord" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." @@ -9822,25 +9670,25 @@ msgstr "" "Ange lösenordet för användaren \"{user}\" för att godkänna " "kontomodifieringar." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "Ogiltigt lösenord." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "Det gick inte att skapa LDAP-användare: {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "Det gick inte att lägga till ny användare i gruppen {group} : {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "Auktoriserade SSH-nycklar" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9850,69 +9698,68 @@ msgstr "" "systemet utan att använda ett lösenord. Du kan ange flera nycklar, en på " "varje rad. Tomma rader och rader som börjar med # kommer att ignoreras." -#: plinth/modules/users/forms.py:252 -#, fuzzy -#| msgid "Delete User" +#: plinth/modules/users/forms.py:273 msgid "Delete user" -msgstr "Ta bort användare" +msgstr "Radera användare" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" +"Att ta bort användarkontot tar också bort alla filer relaterade till " +"användaren. Att ta bort filer kan undvikas genom att ange användarkontot som " +"inaktivt." -#: plinth/modules/users/forms.py:305 -#, fuzzy -#| msgid "Failed to add user to group." +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." -msgstr "Det gick inte att lägga till användare i gruppen." +msgstr "Misslyckades med att ta bort användaren." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "Det gick inte att byta namn på LDAP-användare." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Det gick inte att ta bort användare från gruppen." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Det gick inte att lägga till användare i gruppen." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "Det går inte att ange SSH-nycklar." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "Det gick inte att ändra användarstatus." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "Det gick inte att ändra användarlösenordet för LDAP." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" "Det gick inte att lägga till ny användare i administratörsgruppen: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Användarkonto skapat, du är nu inloggad" #: plinth/modules/users/manifest.py:8 -#, fuzzy -#| msgid "Manage Snapshots" msgid "Manage accounts" -msgstr "Hantera ögonblicksbilder" +msgstr "Hantera konton" #: plinth/modules/users/manifest.py:8 -#, fuzzy -#| msgid "Permissions" msgid "App permissions" -msgstr "Behörigheter" +msgstr "Programbehörigheter" + +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "Fortsätt till inloggning" #: plinth/modules/users/templates/users_change_password.html:11 #, python-format @@ -9927,7 +9774,7 @@ msgstr "Spara lösenord" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Skapa användare" @@ -9958,13 +9805,7 @@ msgid "The following administrator accounts exist in the system." msgstr "Följande administratörskonton finns i systemet." #: plinth/modules/users/templates/users_firstboot.html:56 -#, fuzzy, python-format -#| msgid "" -#| "Delete these accounts from command line and refresh the page to create an " -#| "account that is usable with %(box_name)s. On the command line run the " -#| "command \"echo '{\"args\": [\"USERNAME\", \"PASSWORD\"], \"kwargs\": {}}' " -#| "| sudo /usr/share/plinth/actions/actions users remove_user\". If an " -#| "account is already usable with %(box_name)s, skip this step." +#, python-format msgid "" "Delete these accounts from command line and refresh the page to create an " "account that is usable with %(box_name)s. On the command line run the " @@ -9973,17 +9814,17 @@ msgid "" "already usable with %(box_name)s, skip this step." msgstr "" "Ta bort dessa konton från kommandoraden och uppdatera sidan för att skapa " -"ett konto som kan användas med %(box_name)s. På kommandoraden kör du " -"kommandot \"echo '{\"args\": [\"USERNAME\", \"PASSWORD\"], \"kwargs\": {}}' " -"| sudo /usr/share/plinth/actions/actions users remove_user\". Om ett konto " -"redan kan användas med %(box_name)s, hoppa över detta steg." +"ett konto som är användbart med %(box_name)s. På kommandoraden kör kommandot " +"\"echo\" { \"args\": [\"USERNAME\", \"AUTH_USER\", \"AUTH_PASSWORD\"], " +"\"kwargs\": {}}' | sudo freedombox-cmd users remove_user\". Om ett konto " +"redan är användbart med %(box_name)s, hoppa över detta steg." #: plinth/modules/users/templates/users_firstboot.html:69 msgid "Skip this step" msgstr "Hoppa över det här steget" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Användare" @@ -9992,6 +9833,10 @@ msgstr "Användare" msgid "Edit user %(username)s" msgstr "Redigera användare %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Logga in" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -10003,8 +9848,8 @@ msgid "" "Use the change password form to " "change the password." msgstr "" -"Använd formuläret ändra lösenord för " -"att ändra lösenordet." +"Använd ändra lösenord för att ändra " +"lösenordet." #: plinth/modules/users/templates/users_update.html:37 #: plinth/templates/language-selection.html:17 @@ -10012,52 +9857,55 @@ msgid "Save Changes" msgstr "Spara ändringar" #: plinth/modules/users/templates/users_update.html:46 -#, fuzzy, python-format -#| msgid "Delete user %(username)s permanently?" +#, python-format msgid "Delete user %(username)s and all the user's files?" -msgstr "Ta bort användare %(username)s permanent?" +msgstr "Ta bort användaren %(username)s och alla användarens filer?" #: plinth/modules/users/templates/users_update.html:56 msgid "" "Deleting a user account also removes all the files user's home directory. If " "you wish to keep these files, disable the user account instead." msgstr "" +"Att ta bort ett användarkonto tar också bort alla filer användarens " +"hemkatalog. Om du vill behålla dessa filer, inaktivera användarkontot " +"istället." #: plinth/modules/users/templates/users_update.html:65 -#, fuzzy -#| msgid "Delete files" msgid "Delete user and files" -msgstr "Ta bort filer" +msgstr "Ta bort användare och filer" #: plinth/modules/users/templates/users_update.html:68 msgid "Cancel" msgstr "Avbryt" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Du har loggat ut framgångsrikt." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Användaren %(username)s skapades." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Användaren %(username)s har uppdaterats." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Redigera användar" -#: plinth/modules/users/views.py:111 -#, fuzzy, python-format -#| msgid "User %(username)s created." +#: plinth/modules/users/views.py:177 +#, python-format msgid "User %(username)s deleted." -msgstr "Användaren %(username)s skapades." +msgstr "Användare %(username)s raderades." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Ändra lösenord" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Lösenordet har ändrats." @@ -10089,14 +9937,25 @@ msgstr "" msgid "Invalid key." msgstr "Ogiltig nyckel." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Ange ett giltigt användarnamn." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Offentlig nyckel" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10104,11 +9963,11 @@ msgstr "" "Offentlig nyckel för peer. Exempel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Slutpunkt för servern" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -10116,11 +9975,11 @@ msgstr "" "Domännamn och port i formuläret \"ip:port\". Exempel: " "demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Offentlig nyckel för servern" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10128,25 +9987,32 @@ msgstr "" "Tillhandahålls av serveroperatören, en lång sträng av tecken. Exempel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Klient-IP-adress som tillhandahålls av servern" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "IP-adress som tilldelats den här datorn på VPN efter anslutning till " "slutpunkten. Det här värdet tillhandahålls vanligtvis av serveroperatören. " "Exempel: 192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Maskinens privata nyckel" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10158,11 +10024,11 @@ msgstr "" "rekommenderade sättet. Vissa serveroperatörer insisterar dock på att " "tillhandahålla detta. Exempel: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "I förväg delad nyckel" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10172,91 +10038,125 @@ msgstr "" "till ytterligare ett säkerhetslager. Fyll bara i om det finns. Exempel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Använd den här anslutningen för att skicka all utgående trafik" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Vanligtvis kontrolleras för en VPN-tjänst genom vilken all trafik skickas." #: plinth/modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "IRC Client" msgid "VPN client" -msgstr "IRC-klient" +msgstr "VPN-klient" #: plinth/modules/wireguard/templates/wireguard.html:10 msgid "As a Server" msgstr "Som en server" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Endpoints for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Slutpunkter för detta %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Slutpunkt" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "Till %(box_name)s Portar" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Peers får ansluta till den här servern:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "Tillåtna IPs" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Senast ansluten tid" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" "Inga peer-datorer har konfigurerats för att ansluta till dessa %(box_name)s " "ännu." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Offentlig nyckel för dessa %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Inte konfigurerad än." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Lägga till en ny peer" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Lägga till tillåten klient" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "WireGuard server started successfully." +msgid "WireGuard server not started yet." +msgstr "WireGuard-server startades framgångsrikt." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "Starta WireGuard-server" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Som klient" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Servrar som %(box_name)s kommer att ansluta till:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Slutpunkt" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Inga anslutningar till fjärrservrar har konfigurerats ännu." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Lägga till en ny server" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Lägga till anslutning till server" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "IP-adress som kommer att tilldelas denna klient" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Lägg till klient" @@ -10307,18 +10207,22 @@ msgstr "Serverändpunkter:" msgid "Server public key:" msgstr "Serverns offentliga nyckel:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Överförda uppgifter:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Mottagna uppgifter:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Senaste handskakningen:" @@ -10345,62 +10249,74 @@ msgstr "Offentlig nyckel för denna maskin:" msgid "IP address of this machine:" msgstr "IP-adressen för denna maskin:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Lade till ny klient." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Klient med offentlig nyckel finns redan" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Tillåten klient" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Uppdaterad klient." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Ändra klienten" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Ta bort tillåten klient" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Klienten har tagits bort." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Klienten hittades inte" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Lade till ny server." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Anslutning till server" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Uppdaterad server." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Ändra Anslutningen till Servern" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Ta bort anslutning till server" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Servern har tagits bort." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "WireGuard-server startades framgångsrikt." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "Misslyckades att starta WireGuard-server: {}" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10470,7 +10386,7 @@ msgstr "" #: plinth/modules/wordpress/manifest.py:26 msgid "Content management system" -msgstr "" +msgstr "Innehållshanteringssystem" #: plinth/modules/zoph/__init__.py:25 #, python-brace-format @@ -10522,13 +10438,11 @@ msgstr "" #: plinth/modules/zoph/manifest.py:26 msgid "Photo" -msgstr "" +msgstr "Bild" #: plinth/modules/zoph/manifest.py:26 -#, fuzzy -#| msgid "Photo Organizer" msgid "Organizer" -msgstr "Foto Organizer" +msgstr "Organisatör" #: plinth/modules/zoph/templates/zoph-pre-setup.html:15 #: plinth/modules/zoph/templates/zoph-pre-setup.html:28 @@ -10549,10 +10463,9 @@ msgid "Generic" msgstr "Generiska" #: plinth/operation.py:120 -#, fuzzy, python-brace-format -#| msgid "Error: {name}: {exception_message}" +#, python-brace-format msgid "Error: {name}: {exception}" -msgstr "Fel: {name}: {exception_message}" +msgstr "Fel: {name}: {exception}" #: plinth/operation.py:123 #, python-brace-format @@ -10595,6 +10508,24 @@ msgstr "konfigurationsfil: {file}" msgid "Timeout waiting for package manager" msgstr "Timeout väntar på pakethanteraren" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "begära adress" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Installera app" @@ -10604,22 +10535,19 @@ msgid "Updating app" msgstr "Uppdatera app" #: plinth/setup.py:80 -#, fuzzy, python-brace-format -#| msgid "Error installing app: {error}" +#, python-brace-format msgid "Error installing app: {exception}" -msgstr "Fel vid installation av app: {error}" +msgstr "Fel vid installation av app: {exception}" #: plinth/setup.py:82 -#, fuzzy, python-brace-format -#| msgid "Error repairing app: {error}" +#, python-brace-format msgid "Error repairing app: {exception}" -msgstr "Fel vid reparation av app: {error}" +msgstr "Fel vid reparation av app: {exception}" #: plinth/setup.py:84 -#, fuzzy, python-brace-format -#| msgid "Error updating app: {error}" +#, python-brace-format msgid "Error updating app: {exception}" -msgstr "Fel vid uppdatering av app: {error}" +msgstr "Fel vid uppdatering av app: {exception}" #: plinth/setup.py:87 msgid "App installed." @@ -10706,22 +10634,17 @@ msgid "" "FreedomBox Service (Plinth) project issue tracker." msgstr "" -"Om du tror att denna saknade sida bör finnas, vänligen skicka en bugg på " -"FreedomBox service (Plinth) projekt issue tracker." +"Om du tror att denna saknade sida bör finnas, vänligen lämna in en " +"buggrapport på FreedomBox Service (Plinth)-projektet " +"felrapporteringssystem." #: plinth/templates/500.html:10 msgid "500" msgstr "500" #: plinth/templates/500.html:14 -#, fuzzy, python-format -#| msgid "" -#| "This is an internal error and not something you caused or can fix. Please " -#| "report the error on the bug tracker so we can fix it. Also, please " -#| "attach the status log to the bug " -#| "report." +#, python-format msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker så att vi kan fixa det. Bifoga också status logg till felrapporten." +"href=\"%(logs_url)s\">logg till felrapporten." #: plinth/templates/app-header.html:26 msgid "Installation" msgstr "Installation" #: plinth/templates/app-logs.html:12 -#, fuzzy -#| msgid "" -#| "These are the last %(num_lines)s lines of the status log for this web " -#| "interface. If you want to report a bug, please use the bug tracker and " -#| "attach this status log to the bug report." msgid "" "These are the last lines of the logs for services involved in this app. If " "you want to report a bug, please use the bug tracker and attach this log to " "the bug report." msgstr "" -"Dessa är de sista %(num_lines)s rader i statusloggen för detta " -"webbgränssnitt. Om du vill rapportera ett fel, använd bug tracker och " -"bifoga denna statuslogg rapport bug-tracker." +"Dessa är de sista raderna av loggar för tjänster som är involverade i denna " +"app. Om du vill rapportera en bugg, vänligen använd buggspårare och " +"bifoga denna logg till buggrapporten." #: plinth/templates/app-logs.html:26 -#, fuzzy -#| msgid "" -#| "Please remove any passwords or other personal information from the log " -#| "before submitting the bug report." msgid "" "Please remove any personal information from the log before submitting the " "bug report." msgstr "" -"Ta bort lösenord eller annan personlig information från loggen innan du " -"skickar felrapporten." +"Ta bort all personlig information från loggen innan du skickar in " +"felrapporten." #: plinth/templates/app.html:34 #, python-format @@ -10781,35 +10694,35 @@ msgstr "" "Det är gratis programvara som låter dig enkelt installera och hantera " "serverappar." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Hem" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Appar" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " System" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Ändra lösenord" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Stänga ner" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Logga ut" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Välj språk" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Logga in" @@ -10910,14 +10823,18 @@ msgstr "" "För närvarande konfigureras följande nätverksgränssnitt som interna: " "%(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Avfärda" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Aviseringar" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" -msgstr "" +msgstr "%(time_since)s sedan" #: plinth/templates/port-forwarding-info.html:8 msgid "Port Forwarding" @@ -10989,14 +10906,12 @@ msgid "This application is currently not available in your distribution." msgstr "Denna ansökan är för närvarande inte tillgänglig i din distribution." #: plinth/templates/setup.html:51 -#, fuzzy -#| msgid "RoundCube availability" msgid "Checking app availability..." -msgstr "RoundCube tillgänglighet" +msgstr "Kontrollera apptillgänglighet..." #: plinth/templates/setup.html:57 msgid "Error checking app availability. Please refresh page." -msgstr "" +msgstr "Fel vid kontroll av apptillgänglighet. Vänligen uppdatera sida." #: plinth/templates/setup.html:72 msgid "" @@ -11013,44 +10928,36 @@ msgid "Update" msgstr "Uppdatera" #: plinth/templates/tags.html:24 -#, fuzzy -#| msgid "Search the web" msgid "Search with tags" -msgstr "Sök på webben" +msgstr "Sök med taggar" #: plinth/templates/tags.html:37 -#, fuzzy -#| msgid "Search the web" msgid "Clear all tags" -msgstr "Sök på webben" +msgstr "Ta bort alla taggar" #: plinth/templates/theme-menu.html:8 msgid "Toggle theme (auto)" -msgstr "" +msgstr "Växla tema (auto)" #: plinth/templates/theme-menu.html:14 msgid "Toggle theme" -msgstr "" +msgstr "Växla tema" #: plinth/templates/theme-menu.html:23 -#, fuzzy -#| msgid "Weight" msgid "Light" -msgstr "Vikt" +msgstr "Ljust" #: plinth/templates/theme-menu.html:32 msgid "Dark" -msgstr "" +msgstr "Mörkt" #: plinth/templates/theme-menu.html:41 -#, fuzzy -#| msgid "Automatic" msgid "Auto" -msgstr "Automatisk" +msgstr "Auto" #: plinth/templates/toolbar.html:39 plinth/templates/toolbar.html:40 msgid "View Logs" -msgstr "" +msgstr "Visa loggar" #: plinth/templates/toolbar.html:46 plinth/templates/toolbar.html:47 msgid "Backup" @@ -11080,21 +10987,38 @@ msgstr "" #: plinth/views.py:89 msgid "Here" -msgstr "" +msgstr "Här" #: plinth/views.py:431 msgid "Setting unchanged" msgstr "Instänllningar oförändrade" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "innan du avinstallerar {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Lösenord för SSH-servern.
SSH-nyckelbaserad autentisering är ännu " +#~ "inte möjligt." + +#~ msgid "Single Sign On" +#~ msgstr "Enkel inloggning på" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Offentlig nyckel för dessa %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Inte konfigurerad än." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12714,9 +12638,6 @@ msgstr "Gujarati" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "Du har inga anpassade tjänster aktiverade" -#~ msgid "Standard Services" -#~ msgstr "Standard tjänster" - #~ msgid "" #~ "When enabled, Syncthing's web interface will be available from /syncthing. Desktop and mobile " @@ -12929,9 +12850,6 @@ msgstr "Gujarati" #~ " (repro)" #~ msgstr "SIP-Server (repro)" -#~ msgid "Applications" -#~ msgstr "Applikationer" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/ta/LC_MESSAGES/django.po b/plinth/locale/ta/LC_MESSAGES/django.po index f0779d6c5..9163ea6c5 100644 --- a/plinth/locale/ta/LC_MESSAGES/django.po +++ b/plinth/locale/ta/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2025-08-17 08:02+0000\n" -"Last-Translator: தமிழ்நேரம் \n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-03-02 19:53+0000\n" +"Last-Translator: James Valleroy \n" "Language-Team: Tamil \n" "Language: ta\n" @@ -17,7 +17,7 @@ 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 5.13\n" +"X-Generator: Weblate 5.17-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -25,10 +25,9 @@ msgid "Static configuration {etc_path} is setup properly" msgstr "நிலையான உள்ளமைவு {etc_path} சரியாக அமைக்கப்படுகிறது" #: plinth/container.py:140 -#, fuzzy, python-brace-format -#| msgid "Service {service_name} is running" +#, python-brace-format msgid "Container {container_name} is running" -msgstr "பணி {service_name} இயங்குகிறது" +msgstr "கொள்கலன் {container_name} இயங்குகிறது" #: plinth/context_processors.py:21 plinth/views.py:175 msgid "FreedomBox" @@ -72,10 +71,8 @@ msgid "Repository to backup to" msgstr "காப்புப்பிரதிக்கு களஞ்சியம்" #: plinth/forms.py:62 -#, fuzzy -#| msgid "None" msgid "(None)" -msgstr "எதுவுமில்லை" +msgstr "(இல்லை)" #: plinth/forms.py:68 msgid "Select a domain name to be used with this application" @@ -107,15 +104,15 @@ msgstr "இந்த வலை இடைமுகத்தை வழங்க msgid "Use the language preference set in the browser" msgstr "உலாவியில் உள்ள மொழி விருப்பத்தேர்வைப் பயன்படுத்தவும்" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "வீடு" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "பயன்பாடுகள்" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "மண்டலம்" @@ -138,36 +135,40 @@ msgstr "பாதுகாப்பு" msgid "Administration" msgstr "நிர்வாகம்" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "கணினி அதிக சுமைக்கு உட்பட்டது. தயவுசெய்து மீண்டும் முயற்சிக்கவும்." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "பக்கம் கிடைக்கவில்லை: {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "இயங்கும் செயல்பாடு." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "பிழை ஏற்றுதல் பக்கம்." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "அப்பாச்சி HTTP சேவையகம்" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "வலை சேவையகம்" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} வலை இடைமுகம் (அச்தி)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -214,17 +215,17 @@ msgstr "உள்ளக" msgid "mDNS" msgstr "எம்.டி.என்" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "" "காப்புப்பிரதி காப்பகங்களை உருவாக்க மற்றும் நிர்வகிக்க காப்புப்பிரதிகள் அனுமதிக்கிறது." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "காப்புப்பிரதிகள்" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -233,19 +234,19 @@ msgstr "" "தொலைநிலை காப்புப்பிரதி இருப்பிடம் அல்லது கூடுதல் இணைக்கப்பட்ட வட்டு ஆகியவற்றை " "விரும்புங்கள்." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "காப்புப்பிரதி அட்டவணையை இயக்கவும்" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "{app_name} க்குச் செல்லவும்" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -254,7 +255,7 @@ msgstr "" "திட்டமிடப்பட்ட காப்புப்பிரதி தோல்வியடைந்தது. கடந்த {error_count} காப்புப்பிரதிக்கான " "முயற்சிகள் வெற்றிபெறவில்லை. அண்மைக் கால பிழை: {error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "காப்புப்பிரதியின் போது பிழை" @@ -407,7 +408,9 @@ msgid "Passphrase" msgstr "கடவுச்சொல்" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "கடவுச்சொல்; குறியாக்கத்தைப் பயன்படுத்தும் போது மட்டுமே தேவை." #: plinth/modules/backups/forms.py:190 @@ -447,29 +450,57 @@ msgstr "" "repo/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "அங்கீகார முறை" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "தொலை சேவையகத்திற்கான ஏற்பு தோல்வியடைந்தது." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "ஏற்பு தேவை" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "கடவுச்சொல் அங்கீகாரத்தை முடக்கு" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "பாஓடு சேவையக கடவுச்சொல்" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"பாஓடு சேவையகத்தின் கடவுச்சொல்.
பாஓடு விசை அடிப்படையிலான ஏற்பு இன்னும் " -"சாத்தியமில்லை." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "கடவுச்சொல் அங்கீகாரத்தை முடக்கு" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "கடவுச்சொல் அங்கீகாரத்தை முடக்கு" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "தொலைநிலை காப்புப்பிரதி களஞ்சியம் ஏற்கனவே உள்ளது." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "சரிபார்க்கப்பட்ட பாஓடு பொது விசையைத் தேர்ந்தெடுக்கவும்" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "மீட்டமை" @@ -547,17 +578,17 @@ msgstr "காப்புப்பிரதி அமைப்பு மற் msgid "Not enough space left on the disk or remote location." msgstr "வட்டு அல்லது தொலைதூர இடத்தில் போதுமான இடம் இல்லை." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "தற்போதுள்ள களஞ்சியம் குறியாக்கம் செய்யப்படவில்லை." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} சேமிப்பு" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "புதிய காப்புப்பிரதியை உருவாக்கவும்" @@ -593,7 +624,23 @@ msgstr "தொலைதூர காப்புப்பிரதி இரு msgid "Existing Backups" msgstr "இருக்கும் காப்புப்பிரதிகள்" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -618,7 +665,7 @@ msgstr "இருக்கும் காப்புப்பிரதிக msgid "Caution:" msgstr "எச்சரிக்கை:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -629,7 +676,7 @@ msgstr "" "%(box_name)s காப்புப்பிரதியை மீட்டெடுக்க உங்களுக்கு பாஓடு நற்சான்றிதழ்கள் தேவை, " "தேர்ந்தெடுக்கப்பட்டால், குறியாக்க பாச்ஃபிரேச்." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "இருப்பிடத்தை உருவாக்கவும்" @@ -700,26 +747,15 @@ msgid "Restore data from" msgstr "இருந்து தரவை மீட்டமைக்கவும்" #: plinth/modules/backups/templates/backups_upload.html:17 -#, fuzzy, python-format -#| msgid "" -#| "\n" -#| " Upload a backup file downloaded from another %(box_name)s to " -#| "restore its\n" -#| " contents. You can choose the apps you wish to restore after " -#| "uploading a\n" -#| " backup file.\n" -#| " " +#, python-format msgid "" "Upload a backup file downloaded from another %(box_name)s to restore its " "contents. You can choose the apps you wish to restore after uploading a " "backup file." msgstr "" -"\n" -" அதை மீட்டெடுக்க மற்றொரு %(box_name)s இலிருந்து பதிவிறக்கம் செய்யப்பட்ட " -"காப்புப்பிரதி கோப்பைப் பதிவேற்றவும்\n" -" உள்ளடக்கங்கள். பதிவேற்றிய பின் மீட்டெடுக்க விரும்பும் பயன்பாடுகளை நீங்கள் தேர்வு செய்யலாம்\n" -" காப்புப்பிரதி கோப்பு.\n" -" " +"மற்றொரு %(box_name)s இலிருந்து பதிவிறக்கம் செய்யப்பட்ட காப்புப் பிரதி கோப்பை அதன் " +"உள்ளடக்கங்களை மீட்டமைக்க பதிவேற்றவும். காப்புப் பிரதி கோப்பைப் பதிவேற்றிய பிறகு, நீங்கள் " +"மீட்டெடுக்க விரும்பும் பயன்பாடுகளைத் தேர்வுசெய்யலாம்." #: plinth/modules/backups/templates/backups_upload.html:31 #, python-format @@ -770,107 +806,109 @@ msgstr "" msgid "Verify Host" msgstr "ஓச்டை சரிபார்க்கவும்" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "காப்பு அட்டவணை புதுப்பிக்கப்பட்டது." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "காப்புப்பிரதிகளை திட்டமிடுங்கள்" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "காப்பகம் உருவாக்கப்பட்டது." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "காப்பகத்தை நீக்கு" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "காப்பகம் நீக்கப்பட்டது." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "பதிவேற்றி காப்புப்பிரதியை மீட்டெடுக்கவும்" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "வெற்றிகரமாக பதிவேற்றவும்." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "காப்புப்பிரதி கோப்பு எதுவும் கிடைக்கவில்லை." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "பதிவேற்றிய கோப்பிலிருந்து மீட்டமைக்கவும்" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "காப்புப்பிரதியிலிருந்து மீட்டெடுக்கப்பட்ட கோப்புகள்." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "களஞ்சியத்தைச் சேர்க்க கூடுதல் வட்டுகள் எதுவும் கிடைக்கவில்லை." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "காப்பு களஞ்சியத்தை உருவாக்கவும்" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "புதிய களஞ்சியத்தை சேர்க்கப்பட்டது." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "தொலைதூர காப்புப்பிரதி களஞ்சியத்தை உருவாக்கவும்" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "புதிய தொலைநிலை பாஓடு களஞ்சியத்தை சேர்க்கப்பட்டது." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "பாஓடு ஓச்ட்கியை சரிபார்க்கவும்" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "பாஓடு புரவலன் ஏற்கனவே சரிபார்க்கப்பட்டது." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "பாஓடு புரவலன் சரிபார்க்கப்பட்டது." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "பாஓடு புரவலன் பொது விசையை சரிபார்க்க முடியவில்லை." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "தொலை சேவையகத்திற்கான ஏற்பு தோல்வியடைந்தது." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "சேவையகத்துடன் இணைப்பை நிறுவுவதில் பிழை: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "காப்பு அட்டவணை புதுப்பிக்கப்பட்டது." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "காப்புப்பிரதிகளை திட்டமிடுங்கள்" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "காப்பகம் உருவாக்கப்பட்டது." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "காப்பகத்தை நீக்கு" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "காப்பகம் நீக்கப்பட்டது." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "பதிவேற்றி காப்புப்பிரதியை மீட்டெடுக்கவும்" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "வெற்றிகரமாக பதிவேற்றவும்." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "காப்புப்பிரதி கோப்பு எதுவும் கிடைக்கவில்லை." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "பதிவேற்றிய கோப்பிலிருந்து மீட்டமைக்கவும்" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "காப்புப்பிரதியிலிருந்து மீட்டெடுக்கப்பட்ட கோப்புகள்." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "களஞ்சியத்தைச் சேர்க்க கூடுதல் வட்டுகள் எதுவும் கிடைக்கவில்லை." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "காப்பு களஞ்சியத்தை உருவாக்கவும்" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "புதிய களஞ்சியத்தை சேர்க்கப்பட்டது." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "தொலைதூர காப்புப்பிரதி களஞ்சியத்தை உருவாக்கவும்" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "புதிய தொலைநிலை பாஓடு களஞ்சியத்தை சேர்க்கப்பட்டது." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "பாஓடு ஓச்ட்கியை சரிபார்க்கவும்" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "பாஓடு புரவலன் ஏற்கனவே சரிபார்க்கப்பட்டது." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "பாஓடு புரவலன் சரிபார்க்கப்பட்டது." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "களஞ்சியம் அகற்றப்பட்டது." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "களஞ்சியத்தை அகற்று" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "களஞ்சியம் அகற்றப்பட்டது. காப்புப்பிரதிகள் நீக்கப்படவில்லை." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "அன்யூனிங் தோல்வியுற்றது!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "பெருகிவரும் தோல்வியுற்றது" @@ -951,7 +989,7 @@ msgstr "கடவுச்சொல்லை வழங்காத அநாம #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "அனுமதிகள்" @@ -1036,8 +1074,8 @@ msgstr "பட்டியல்" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "நீக்கு" @@ -1114,6 +1152,7 @@ msgstr "டி.என்.எச்" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "சேவையகம்" @@ -1412,13 +1451,20 @@ msgid "Webserver Home Page" msgstr "வெப்சர்வர் முகப்பு பக்கம்" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "வலையில் உங்கள் {box_name} ஐ யாராவது பார்வையிடும்போது வழங்கப்பட வேண்டிய இயல்புநிலை " "பக்கத்தைத் தேர்வுசெய்க. டொமைன் பெயரை யாராவது பார்வையிடும்போது உங்கள் வலைப்பதிவு அல்லது " @@ -1652,6 +1698,8 @@ msgid "" "This app also shows the logs for {box_name} " "services." msgstr "" +"இந்தப் பயன்பாடு {box_name} சேவைகளுக்கான பதிவுகளையும் " +"காட்டுகிறது." #: plinth/modules/diagnostics/__init__.py:60 #: plinth/modules/diagnostics/__init__.py:255 @@ -1806,31 +1854,31 @@ msgstr "முடிவுகள்" #: plinth/modules/diagnostics/templates/diagnostics_full.html:53 #, python-format msgid "%(number)s passed" -msgstr "" +msgstr "%(number)s கடந்துவிட்டன" #: plinth/modules/diagnostics/templates/diagnostics_full.html:57 #, python-format msgid "%(number)s failed" -msgstr "" +msgstr "%(number)s தோல்வியடைந்தன" #: plinth/modules/diagnostics/templates/diagnostics_full.html:61 #, python-format msgid "%(number)s warnings" -msgstr "" +msgstr "%(number)sரிக்கைகள்" #: plinth/modules/diagnostics/templates/diagnostics_full.html:65 #, python-format msgid "%(number)s errors" -msgstr "" +msgstr "%(number)s பிழைகள்" #: plinth/modules/diagnostics/templates/diagnostics_full.html:69 #, python-format msgid "%(number)s skipped" -msgstr "" +msgstr "%(number)s தவிர்க்கப்பட்டன" #: plinth/modules/diagnostics/templates/diagnostics_full.html:111 msgid "Running..." -msgstr "" +msgstr "இயங்குகிறது..." #: plinth/modules/diagnostics/templates/diagnostics_results.html:11 msgid "Test" @@ -1879,13 +1927,6 @@ msgstr "" "தற்போதைய ஐபி முகவரியுடன் பதிலைப் பெறுவார்கள்." #: plinth/modules/dynamicdns/__init__.py:41 -#, fuzzy -#| msgid "" -#| "If you are looking for a free dynamic DNS account, you may find a free " -#| "GnuDIP service at ddns.freedombox.org or you may find free update URL " -#| "based services at freedns.afraid.org." msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at ddns.freedombox.org இல் இலவச " -"GnuDIP சேவையைக் காணலாம் அல்லது freedns.afraid.org இல் இலவச புதுப்பிப்பு URL அடிப்படையிலான " -"சேவைகளைக் காணலாம்." +"நீங்கள் இலவச மாறும் டிஎன்எச் கணக்கைத் தேடுகிறீர்களானால், இலவச GnuDIP சேவையை ddns.freedombox.org இல் காணலாம். இந்த சேவையின் மூலம், நீங்கள் வரம்பற்ற துணை டொமைன்களையும் பெறுவீர்கள் (கணக்கு " +"அமைப்புகளில் வைல்டு அட்டை விருப்பத்துடன்). துணை டொமைனைப் பயன்படுத்த, பெயர்கள் பயன்பாட்டில் " +"நிலையான டொமைனாகச் சேர்க்கவும்." #: plinth/modules/dynamicdns/__init__.py:47 -#, fuzzy -#| msgid "" -#| "If you are looking for a free dynamic DNS account, you may find a free " -#| "GnuDIP service at ddns.freedombox.org or you may find free update URL " -#| "based services at freedns.afraid.org." msgid "" "Alternatively, you may find a free update URL based service at freedns.afraid.org." msgstr "" -"நீங்கள் ஒரு இலவச டைனமிக் DNS கணக்கைத் தேடுகிறீர்கள் என்றால், ddns.freedombox.org இல் இலவச " -"GnuDIP சேவையைக் காணலாம் அல்லது freedns.afraid.org இல் இலவச புதுப்பிப்பு URL அடிப்படையிலான " -"சேவைகளைக் காணலாம்." +"மாற்றாக, freedns.afraid.org இல் இலவச புதுப்பிப்பு முகவரி " +"அடிப்படையிலான சேவையை நீங்கள் காணலாம்." #: plinth/modules/dynamicdns/__init__.py:50 msgid "" @@ -2032,7 +2064,7 @@ msgid "Invalid domain name" msgstr "தவறான டொமைன் பெயர்" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "பயனர்பெயர்" @@ -2321,8 +2353,8 @@ msgstr "Xmpp" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "நிலை" @@ -2385,9 +2417,13 @@ msgstr "" "முதல் நிர்வாக பயனரை சுட்டிக்காட்டி தானாகவே உருவாக்கப்படுகின்றன." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" " ரவுண்ட்கியூப் பயன்பாடு பயனர்களுக்கு " "மின்னஞ்சலை அணுக வலை இடைமுகத்தை வழங்குகிறது." @@ -2644,7 +2680,7 @@ msgstr "இறகு விக்கி" #: plinth/modules/featherwiki/forms.py:13 plinth/modules/tiddlywiki/forms.py:13 msgid "Wiki files cannot be named \"index.html\"." -msgstr "" +msgstr "விக்கி கோப்புகளை \"index.html\" என்று பெயரிட முடியாது." #: plinth/modules/featherwiki/forms.py:20 plinth/modules/tiddlywiki/forms.py:20 msgid "Name of the wiki file, with file extension \".html\"" @@ -3295,8 +3331,8 @@ msgstr "கருத்துக்களை சமர்ப்பிக்க msgid "Contribute" msgstr "பங்களிப்பு" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "பற்றி" @@ -3640,6 +3676,10 @@ msgid "" "alarms, presence sensors, door bells, thermostats, irrigation timers, energy " "monitors, etc." msgstr "" +"வீட்டு உதவியாளர் என்பது உள்ளக கட்டுப்பாடு மற்றும் தனியுரிமைக்கு முக்கியத்துவம் அளிக்கும் ஓம் " +"ஆட்டோமேசன் மையமாகும். இது அறிவுள்ள பல்புகள், அலாரங்கள், இருப்பு உணரிகள், கதவு மணிகள், " +"தெர்மோச்டாட்கள், நீர்ப்பாசன டைமர்கள், ஆற்றல் மானிட்டர்கள் போன்ற ஆயிரக்கணக்கான சாதனங்களுடன் " +"ஒருங்கிணைக்கிறது." #: plinth/modules/homeassistant/__init__.py:35 msgid "" @@ -3648,6 +3688,10 @@ msgid "" "requires additional hardware such as a ZigBee USB dongle. You need to re-run " "setup if such hardware is added or removed." msgstr "" +"உள்ளக நெட்வொர்க்கில் உள்ள பல்வேறு சாதனங்களைக் கண்டறியவும், உள்ளமைக்கவும் மற்றும் பயன்படுத்தவும் " +"முகப்பு உதவியாளரால் முடியும். ZigBee போன்ற பிற நெறிமுறைகளைப் பயன்படுத்தும் " +"சாதனங்களுக்கு, பொதுவாக ZigBee USB டாங்கிள் போன்ற கூடுதல் வன்பொருள் தேவைப்படுகிறது. " +"அத்தகைய வன்பொருள் சேர்க்கப்பட்டாலோ அல்லது அகற்றப்பட்டாலோ நீங்கள் அமைப்பை மீண்டும் இயக்க வேண்டும்." #: plinth/modules/homeassistant/__init__.py:39 msgid "" @@ -3655,24 +3699,22 @@ msgid "" "An administrator account is created at this time. Home Assistant maintains " "its own user accounts." msgstr "" +"ஆப்ச் நிறுவப்பட்டவுடன், வீடு Assistant இணைய இடைமுகம் விரைவில் அமைக்கப்பட வேண்டும். இந்த " +"நேரத்தில் ஒரு நிர்வாகி கணக்கு உருவாக்கப்பட்டது. வீட்டு உதவியாளர் அதன் சொந்த பயனர் " +"கணக்குகளை பராமரிக்கிறது." #: plinth/modules/homeassistant/__init__.py:43 -#, fuzzy, python-brace-format -#| msgid "" -#| "Please note that Nextcloud is installed and run inside a container " -#| "provided by the Nextcloud community. Security, quality, privacy and legal " -#| "reviews are done by the upstream project and not by Debian/{box_name}. " -#| "Updates are performed following an independent cycle." +#, python-brace-format msgid "" "Please note that Home Assistant is installed and run inside a container " "provided by the Home Assistant project. Security, quality, privacy and legal " "reviews are done by the upstream project and not by Debian/{box_name}. " "Updates are performed following an independent cycle." msgstr "" -"நெக்ச்ட் முகில் நிறுவப்பட்டு, நெக்ச்ட் முகில் சமூகத்தால் வழங்கப்பட்ட கொள்கலனுக்குள் இயக்கவும் " -"என்பதை நினைவில் கொள்க. பாதுகாப்பு, தகுதி, தனியுரிமை மற்றும் சட்ட மதிப்புரைகள் மேலோடை " -"திட்டத்தால் செய்யப்படுகின்றன, ஆனால் டெபியன்/{box_name} ஆல் அல்ல. சுயாதீன சுழற்சியைத் " -"தொடர்ந்து புதுப்பிப்புகள் செய்யப்படுகின்றன." +"ஓம் அசிச்டென்ட் ப்ராசெக்ட் வழங்கிய கன்டெய்னரில் ஓம் அசிச்டண்ட் நிறுவப்பட்டு இயங்குகிறது என்பதை " +"நினைவில் கொள்ளவும். பாதுகாப்பு, தகுதி, தனியுரிமை மற்றும் சட்ட மதிப்பாய்வுகள் மேலோடை " +"திட்டத்தால் செய்யப்படுகின்றன, Debian/{box_name} மூலம் அல்ல. புதுப்பிப்புகள் ஒரு சுயாதீன " +"சுழற்சியைத் தொடர்ந்து செய்யப்படுகின்றன." #: plinth/modules/homeassistant/__init__.py:48 msgid "This app is experimental." @@ -3682,17 +3724,15 @@ msgstr "இந்த பயன்பாடு சோதனை." #: plinth/modules/homeassistant/manifest.py:12 #: plinth/modules/homeassistant/manifest.py:20 msgid "Home Assistant" -msgstr "" +msgstr "வீட்டு உதவியாளர்" #: plinth/modules/homeassistant/manifest.py:62 -#, fuzzy -#| msgid "Automatic" msgid "Home Automation" -msgstr "தானியங்கி" +msgstr "வீட்டு ஆட்டோமேசன்" #: plinth/modules/homeassistant/manifest.py:63 msgid "IoT" -msgstr "" +msgstr "IoT" #: plinth/modules/homeassistant/manifest.py:64 #: plinth/modules/networks/manifest.py:8 @@ -3705,15 +3745,15 @@ msgstr "இல்" #: plinth/modules/homeassistant/manifest.py:65 msgid "ZigBee" -msgstr "" +msgstr "சிக்பீ" #: plinth/modules/homeassistant/manifest.py:66 msgid "Z-Wave" -msgstr "" +msgstr "Z-அலை" #: plinth/modules/homeassistant/manifest.py:67 msgid "Thread" -msgstr "" +msgstr "நூல்" #: plinth/modules/homeassistant/templates/homeassistant.html:17 msgid "" @@ -3721,6 +3761,9 @@ msgid "" "URL path. Please select the domain on which Home Assistant will be " "available. Home Assistant will not be available on other domains." msgstr "" +"முகப்பு உதவியாளருக்குப் பணிபுரிய ஒரு பிரத்யேக டொமைன் தேவை மற்றும் முகவரி பாதையில் " +"வேலை செய்ய முடியாது. வீடு Assistant கிடைக்கக்கூடிய டொமைனைத் தேர்ந்தெடுக்கவும். மற்ற " +"டொமைன்களில் வீடு Assistant கிடைக்காது." #: plinth/modules/homeassistant/templates/homeassistant.html:28 #, python-format @@ -3730,6 +3773,10 @@ msgid "" "href=\"%(names_url)s\">Names app and Dynamic DNS app for configuring subdomains." msgstr "" +"homeassistant.mydomain.example போன்ற துணை டொமைனை உள்ளமைப்பதன் மூலம் வீட்டு " +"உதவியாளருக்கு ஒரு தனி டொமைனைக் கிடைக்கச் செய்யலாம். துணை டொமைன்களை உள்ளமைக்க பெயர்கள் பயன்பாடு மற்றும் டைனமிக் DNS பயன்பாட்டைப் பார்க்கவும்." #: plinth/modules/homeassistant/templates/homeassistant.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:18 @@ -3908,6 +3955,9 @@ msgid "" "only be installed if frequent feature updates is enabled in the Software Update app." msgstr "" +"குறிப்பு: இந்த ஆப்ச் அடிக்கடி அம்ச புதுப்பிப்புகளைப் பெறுகிறது. மென்பொருள் புதுப்பிப்பு பயன்பாட்டில் அடிக்கடி அம்ச " +"புதுப்பிப்புகள் இயக்கப்பட்டால் மட்டுமே அதை நிறுவ முடியும்." #: plinth/modules/janus/__init__.py:47 msgid "Janus" @@ -3927,7 +3977,7 @@ msgstr "வலை மாநாடு" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "சாவாச்கிரிப்ட் உரிம செய்தி" @@ -4354,19 +4404,15 @@ msgstr "" "மேட்ரிக்ச் சினாப்சைப் பயன்படுத்த குறைந்தபட்சம் ஒரு டொமைன்." #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:20 -#, fuzzy, python-format -#| msgid "" -#| "The Matrix server domain is set to %(domain_name)s. User IDs " -#| "will look like @username:%(domain_name)s. Changing the domain " -#| "name after the initial setup is currently not supported." +#, python-format msgid "" "The Matrix server domain is set to %(domain_name)s. User IDs will " "look like @username:%(domain_name)s. Changing the domain name " "requires uninstalling and reinstalling the app which will wipe app's data." msgstr "" -"மேட்ரிக்ச் சர்வர் டொமைன் %(domain_name)s என அமைக்கப்பட்டுள்ளது. பயனர் ஐடிகள் " -" @username:%(domain_name)s போல இருக்கும். ஆரம்ப அமைப்புக்குப் பிறகு " -"டொமைன் பெயரை மாற்றுவது தற்போது ஆதரிக்கப்படவில்லை." +"மேட்ரிக்ச் சர்வர் டொமைன் %(domain_name)s என அமைக்கப்பட்டுள்ளது. பயனர் ஐடிகள் " +"@username:%(domain_name)s போன்று இருக்கும். டொமைன் பெயரை மாற்ற, ஆப்சின் " +"தரவை அழிக்கும் பயன்பாட்டை நிறுவல் நீக்கி மீண்டும் நிறுவ வேண்டும்." #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:28 msgid "" @@ -4409,10 +4455,8 @@ msgid "Unlimited" msgstr "வரம்பற்றது" #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:78 -#, fuzzy -#| msgid "Feed generator" msgid "Federation" -msgstr "ஊட்ட செனரேட்டர்" +msgstr "கூட்டமைப்பு" #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:81 #, python-format @@ -4423,6 +4467,12 @@ msgid "" "hosted here. If you face problems with federation, try the federation tester tool." msgstr "" +"மேட்ரிக்ச் சினாப்ச் இணையத்தில் உள்ள மற்ற மேட்ரிக்ச் சேவையகங்களுடன் வேலை செய்ய " +"கட்டமைக்கப்பட்டுள்ளது. இது %(box_name)s பயனர்கள் வேறு இடங்களில் புரவலன் செய்யப்பட்ட " +"அறைகளில் பங்கேற்கவும், மற்ற சேவையகங்களில் உள்ள அணி பயனர்கள் இங்கு புரவலன் செய்யப்பட்ட " +"அறைகளில் பங்கேற்கவும் அனுமதிக்கிறது. கூட்டமைப்பில் நீங்கள் சிக்கலை எதிர்கொண்டால், கூட்டமைப்பு சோதனை கருவியை " +"முயற்சிக்கவும்." #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:99 #, python-format @@ -4601,26 +4651,21 @@ msgid "Default language changed" msgstr "இயல்புநிலை மொழி மாற்றப்பட்டது" #: plinth/modules/minetest/__init__.py:33 -#, fuzzy, python-brace-format -#| msgid "" -#| "Minetest is a multiplayer infinite-world block sandbox. This module " -#| "enables the Minetest server to be run on this {box_name}, on the default " -#| "port (30000). To connect to the server, a Minetest client is needed." +#, python-brace-format msgid "" "Luanti, formally known as Minetest, is a multiplayer infinite-world block " "sandbox. This module enables the Luanti server to be run on this {box_name}, " "on the default port (30000). To connect to the server, a Luanti client is needed." msgstr "" -"மின்டெச்ட் ஒரு மல்டிபிளேயர் எல்லையற்ற-உலக தொகுதி சாண்ட்பாக்ச் ஆகும். இந்த தொகுதி " -"இயல்புநிலை துறைமுகத்தில் (30000) இந்த {box_name} at இல் இயங்குவதற்கு மின்டெச்ட் " -"சேவையகத்தை இயக்குகிறது. சேவையகத்துடன் இணைக்க, ஒரு மின்டெச்ட் வாங்கி தேவை." +"லுவான்டி, முறையாக Minetest என அறியப்படுகிறது, இது ஒரு மல்டிபிளேயர் எல்லையற்ற உலகத் " +"தொகுதி சாண்ட்பாக்ச் ஆகும். இந்த தொகுதியானது, இயல்புநிலை போர்ட்டில் (30000) இந்த " +"{box_name} இல் Luanti சேவையகத்தை இயக்க உதவுகிறது. சேவையகத்துடன் இணைக்க, Luanti கிளையன்ட் தேவை." #: plinth/modules/minetest/__init__.py:57 plinth/modules/minetest/manifest.py:9 msgid "Luanti" -msgstr "" +msgstr "லுவாண்டி" #: plinth/modules/minetest/forms.py:13 msgid "Maximum number of players" @@ -5111,6 +5156,9 @@ msgid "" "here. The name servers responsible for the domain must be pointing (A and " "AAAA records) to the public IP addresses of the %(box_name)s." msgstr "" +"நீங்கள் டொமைன் பதிவாளரிடமிருந்து டொமைன் பெயரை வாங்கியிருந்தால், அதை இங்கே உள்ளமைக்கலாம். " +"டொமைனுக்குப் பொறுப்பான பெயர் சேவையகங்கள் %(box_name)s இன் பொது IP முகவரிகளை (A " +"மற்றும் AAAA பதிவுகள்) சுட்டிக்காட்டி இருக்க வேண்டும்." #: plinth/modules/names/templates/names-domain-add.html:18 #, python-format @@ -5120,12 +5168,16 @@ msgid "" "to %(box_name)s. Subdomains are useful for hosting multiple applications " "that each require a dedicted domain for themselves." msgstr "" +"ஏற்கனவே உள்ளமைக்கப்பட்ட டொமைனின் துணை டொமைனையும் நீங்கள் பயன்படுத்த விரும்பினால், அதற்கான " +"மற்றொரு பதிவை இங்கே சேர்க்கவும். துணை டொமைன் %(box_name)s ஐ சுட்டிக்காட்டும் வகையில் " +"கட்டமைக்கப்பட்டுள்ளதை உறுதிசெய்யவும். துணை டொமைன்கள் பல பயன்பாடுகளை புரவலன் செய்வதற்கு " +"பயனுள்ளதாக இருக்கும், அவை ஒவ்வொன்றும் தங்களுக்கு ஒரு தனி டொமைன் தேவைப்படும்." #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "தொகு" @@ -5679,6 +5731,7 @@ msgstr "இணைப்பை நீக்கு" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "இணைப்பு" @@ -5889,6 +5942,7 @@ msgid "Edit Connection" msgstr "இணைப்பைத் திருத்து" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "பிழை:" @@ -6091,11 +6145,17 @@ msgstr "" "அனுப்ப கட்டமைக்கப்பட வேண்டும், இதனால் %(box_name)s சேவைகளை வழங்குகிறது." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "உங்கள் திசைவி மீது உங்களுக்கு கட்டுப்பாடு இல்லையென்றால், அதை உள்ளமைக்க வேண்டாம் என்பதைத் " "தேர்வுசெய்க. இந்த வரம்பைக் கடக்க விருப்பங்களைக் காண, 'எனக்கு பொது ஐபி முகவரி இல்லை' " @@ -6500,6 +6560,40 @@ msgstr "குழுக்கள்" msgid "Password update failed. Please choose a stronger password." msgstr "கடவுச்சொல் புதுப்பிப்பு தோல்வியடைந்தது. வலுவான கடவுச்சொல்லைத் தேர்வுசெய்க." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Action" +msgid "Application" +msgstr "செயல்" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "அங்கீகரிக்கப்பட்ட பாஓடு விசைகள்" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "அங்கீகரிக்கப்பட்ட பாஓடு விசைகள்" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6827,8 +6921,8 @@ msgstr "மறுதொடக்கம் செய்யுங்கள்" msgid "Shutdown" msgstr "பணிநிறுத்தம்" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "மறுதொடக்கம்" @@ -7237,19 +7331,16 @@ msgstr "" "ரீடர் குழுவிற்கு சொந்தமானது." #: plinth/modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Miniflux or Tiny Tiny RSS to follow various websites. When " -#| "adding a feed, enable authentication and use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Nextcloud News to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"நீங்கள் மினிஃப்ளக்ச் அல்லது சின்னஞ்சிறிய RSS உடன் RSS-BRIDGE ஐப் பயன்படுத்தலாம். ஒரு ஊட்டத்தைச் " -"சேர்க்கும்போது, அங்கீகாரத்தை இயக்கவும், உங்கள் {box_name} நற்சான்றிதழ்களைப் பயன்படுத்தவும்." +"பல்வேறு இணையதளங்களைப் பின்தொடர Miniflux அல்லது Nextcloud News உடன் RSS-Bridge ஐப் பயன்படுத்தலாம். " +"ஊட்டத்தைச் சேர்க்கும்போது, அங்கீகாரத்தை இயக்கி, உங்கள் {box_name} நற்சான்றிதழ்களைப் " +"பயன்படுத்தவும்." #: plinth/modules/rssbridge/__init__.py:49 msgid "Read and subscribe to news feeds" @@ -7326,10 +7417,8 @@ msgid "Samba" msgstr "சாம்பா" #: plinth/modules/samba/manifest.py:12 -#, fuzzy -#| msgid "Samba" msgid "SambaLite" -msgstr "சாம்பா" +msgstr "சம்பாலைட்" #: plinth/modules/samba/manifest.py:26 msgid "Ghost Commander" @@ -7623,10 +7712,12 @@ msgid "N/A" msgstr "இதற்கில்லை" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "ஆம்" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "இல்லை" @@ -7904,10 +7995,17 @@ msgstr "" "அமைப்புகளின்படி தானாக தூய்மை செய்யப்படும்." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "ச்னாப்சாட்கள் தற்போது பி.டி.ஆர்.எஃப்.எச் கோப்பு முறைமைகளில் மட்டுமே வேலை செய்கின்றன மற்றும் " "ரூட் பகிர்வில் மட்டுமே. ச்னாப்சாட்கள் " @@ -8259,26 +8357,6 @@ msgstr "படிமுறை" msgid "Fingerprint" msgstr "கைரேகை" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "ஒற்றை அடையாளம்" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "உள்நுழைவு பக்கத்திற்குச் செல்ல படத்தில் உள்ள எழுத்துக்களை உள்ளிடவும்" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "உள்நுழைய தொடரவும்" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "புகுபதிவு" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "வெற்றிகரமாக உள்நுழைந்தது." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9045,15 +9123,7 @@ msgstr "புதிய நற்பொருத்தங்கள்" #: plinth/modules/upgrades/templates/backports-firstboot.html:14 #: plinth/modules/upgrades/templates/upgrades_configure.html:69 -#, fuzzy, python-format -#| msgid "" -#| "Frequent feature updates allow the %(box_name)s Service, plus a very " -#| "limited set of software, to receive new features more frequently (from " -#| "the backports repository). This results in receiving some new features " -#| "within weeks, instead of only once every 2 years or so. Note that " -#| "software with frequent feature updates does not have support from the " -#| "Debian Security Team. Instead, they are maintained by contributors to " -#| "Debian and the %(box_name)s community." +#, python-format msgid "" "Frequent feature updates allow the %(box_name)s Service, plus a very limited " "set of software, to receive new features more frequently (from the backports " @@ -9063,12 +9133,12 @@ msgid "" "Team. Instead, they are maintained by contributors to Debian and the " "%(box_name)s community." msgstr "" -"அடிக்கடி அம்ச புதுப்பிப்புகள் %(box_name)sேவையையும், மிகக் குறைந்த மென்பொருளையும் " -"புதிய அம்சங்களை அடிக்கடி பெற அனுமதிக்கின்றன (பின்னணி களஞ்சியத்திலிருந்து). இது 2 " -"வருடங்களுக்கு ஒரு முறை அல்லது அதற்கு பதிலாக வாரங்களுக்குள் சில புதிய அம்சங்களைப் " -"பெறுகிறது. அடிக்கடி அம்ச புதுப்பிப்புகளைக் கொண்ட மென்பொருளுக்கு டெபியன் பாதுகாப்பு " -"குழுவின் உதவி இல்லை என்பதை நினைவில் கொள்க. அதற்கு பதிலாக, அவை டெபியன் மற்றும் " -"%(box_name)sமூகத்தின் பங்களிப்பாளர்களால் பராமரிக்கப்படுகின்றன." +"%(box_name)s பணி மற்றும் மிகக் குறைந்த அளவிலான மென்பொருட்கள், புதிய அம்சங்களை அடிக்கடி " +"(பேக்போர்ட்கள் அல்லது நிலையற்ற களஞ்சியத்தில் இருந்து) பெற அடிக்கடி அம்ச புதுப்பிப்புகள் " +"அனுமதிக்கின்றன. இதன் விளைவாக 2 ஆண்டுகளுக்கு ஒருமுறை அல்லது அதற்குப் பதிலாக " +"வாரங்களுக்குள் சில புதிய அம்சங்களைப் பெறுகிறது. டெபியன் பாதுகாப்புக் குழுவின் ஆதரவை " +"அடிக்கடி மேம்படுத்தும் மென்பொருளுக்கு இல்லை என்பதை நினைவில் கொள்ளவும். மாறாக, டெபியன் " +"மற்றும் %(box_name)s சமூகத்தின் பங்களிப்பாளர்களால் அவை பராமரிக்கப்படுகின்றன." #: plinth/modules/upgrades/templates/backports-firstboot.html:26 msgid "" @@ -9176,13 +9246,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "விநியோக புதுப்பிப்புக்குச் செல்லவும்" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "தள்ளுபடி" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9450,37 +9513,41 @@ msgstr "" msgid "Users and Groups" msgstr "பயனர்கள் மற்றும் குழுக்கள்" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "அனைத்து சேவைகள் மற்றும் கணினி அமைப்புகளுக்கான அணுகல்" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP உள்ளீட்டை சரிபார்க்கவும் \"{search_item}\"" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "NSLCD கட்டமைப்பைச் சரிபார்க்கவும் \"{key} {value}\"" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "NSSWITCH கட்டமைப்பு \"{database}\"" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "உள்நுழைவு பக்கத்திற்குச் செல்ல படத்தில் உள்ள எழுத்துக்களை உள்ளிடவும்" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "பயனர்பெயர் எடுக்கப்பட்டது அல்லது ஒதுக்கப்பட்டுள்ளது." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" "விரும்பினால். கடவுச்சொல் மற்றும் முக்கியமான அறிவிப்புகளை மீட்டமைக்க மின்னஞ்சல்களை அனுப்ப " "பயன்படுகிறது." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9494,46 +9561,46 @@ msgstr "" "உள்நுழைய முடியும். அவர்கள் பாஓடு மூலம் கணினியில் உள்நுழைந்து நிர்வாகச் சலுகைகள் (SUDO) " "வைத்திருக்கலாம்." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "செல்லுபடியாகும் பயனர்பெயரை உள்ளிடவும்." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "தேவை. 150 எழுத்துக்கள் அல்லது அதற்கும் குறைவாக. ஆங்கில கடிதங்கள், இலக்கங்கள் மற்றும் @/./-/" "_ மட்டும்." -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "அங்கீகார கடவுச்சொல்" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "கணக்கு மாற்றங்களை அங்கீகரிக்க பயனர் \"{user}\" க்கான கடவுச்சொல்லை உள்ளிடவும்." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "தவறான கடவுச்சொல்." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "LDAP பயனரை உருவாக்குதல் தோல்வியுற்றது: {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "புதிய பயனரை {group} குழுவில் சேர்க்கத் தவறிவிட்டது: {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "அங்கீகரிக்கப்பட்ட பாஓடு விசைகள்" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9543,11 +9610,11 @@ msgstr "" "பாதுகாப்பாக உள்நுழைய அனுமதிக்கும். நீங்கள் பல விசைகளை உள்ளிடலாம், ஒவ்வொரு வரியிலும் " "ஒன்று. # உடன் தொடங்கும் வெற்று கோடுகள் மற்றும் கோடுகள் புறக்கணிக்கப்படும்." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "பயனரை நீக்கு" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -9555,40 +9622,40 @@ msgstr "" "பயனர் கணக்கை நீக்குவது பயனருடன் தொடர்புடைய அனைத்து கோப்புகளையும் அகற்றும். பயனர் கணக்கை " "செயலற்றதாக அமைப்பதன் மூலம் கோப்புகளை நீக்குவதைத் தவிர்க்கலாம்." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "பயனரை நீக்குவதில் தோல்வி." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "LDAP பயனரை மறுபெயரிடுவது தோல்வியுற்றது." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "குழுவிலிருந்து பயனரை அகற்றுவதில் தோல்வி." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "குழுவில் பயனரைச் சேர்க்கத் தவறிவிட்டது." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "பாஓடு விசைகளை அமைக்க முடியவில்லை." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "பயனர் நிலையை மாற்றுவதில் தோல்வி." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "LDAP பயனர் கடவுச்சொல்லை மாற்றுவது தோல்வியடைந்தது." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "நிர்வாகக் குழுவில் புதிய பயனரைச் சேர்ப்பதில் தோல்வி: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "பயனர் கணக்கு உருவாக்கப்பட்டது, நீங்கள் இப்போது உள்நுழைந்துள்ளீர்கள்" @@ -9600,6 +9667,10 @@ msgstr "கணக்குகளை நிர்வகிக்கவும்" msgid "App permissions" msgstr "பயன்பாட்டு அனுமதிகள்" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "உள்நுழைய தொடரவும்" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9613,7 +9684,7 @@ msgstr "கடவுச்சொல்லைச் சேமிக்கவு #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "பயனரை உருவாக்கு" @@ -9644,13 +9715,7 @@ msgid "The following administrator accounts exist in the system." msgstr "கணினியில் பின்வரும் நிர்வாகி கணக்குகள் உள்ளன." #: plinth/modules/users/templates/users_firstboot.html:56 -#, fuzzy, python-format -#| msgid "" -#| "Delete these accounts from command line and refresh the page to create an " -#| "account that is usable with %(box_name)s. On the command line run the " -#| "command \"echo '{\"args\": [\"USERNAME\", \"PASSWORD\"], \"kwargs\": {}}' " -#| "| sudo /usr/share/plinth/actions/actions users remove_user\". If an " -#| "account is already usable with %(box_name)s, skip this step." +#, python-format msgid "" "Delete these accounts from command line and refresh the page to create an " "account that is usable with %(box_name)s. On the command line run the " @@ -9658,18 +9723,18 @@ msgid "" "\"kwargs\": {}}' | sudo freedombox-cmd users remove_user\". If an account is " "already usable with %(box_name)s, skip this step." msgstr "" -"இந்த கணக்குகளை கட்டளை வரியிலிருந்து நீக்கி, %(box_name)s மூலம் பயன்படுத்தக்கூடிய ஒரு " -"கணக்கை உருவாக்க பக்கத்தைப் புதுப்பிக்கவும். கட்டளை வரியில் \"எக்கோ '{\" ஆர்க்ச் \"என்ற " -"கட்டளையை இயக்கவும்: [\" பயனர்பெயர் \",\" கடவுச்சொல் \"],\" குவார்க்ச் \": {}}' ஒரு " -"கணக்கு ஏற்கனவே %(box_name)s உடன் பயன்படுத்தக்கூடியதாக இருந்தால், இந்த படிநிலையைத் " -"தவிர்க்கவும்." +"கட்டளை வரியிலிருந்து இந்தக் கணக்குகளை நீக்கி, %(box_name)s உடன் பயன்படுத்தக்கூடிய கணக்கை " +"உருவாக்க பக்கத்தைப் புதுப்பிக்கவும். கட்டளை வரியில் \"echo '{\"args\" கட்டளையை " +"இயக்கவும்: [\"USERNAME\", \"AUTH_USER\", \"AUTH_PASSWORD\"], \"kwargs\": {}}' " +"| sudo freedombox-cmd பயனர்கள் remove_user\". ஒரு கணக்கு ஏற்கனவே %(box_name)s " +"உடன் பயன்படுத்தக்கூடியதாக இருந்தால், இந்தப் படிநிலையைத் தவிர்க்கவும்." #: plinth/modules/users/templates/users_firstboot.html:69 msgid "Skip this step" msgstr "இந்த படியைத் தவிர்க்கவும்" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "பயனர்கள்" @@ -9678,6 +9743,10 @@ msgstr "பயனர்கள்" msgid "Edit user %(username)s" msgstr "பயனர் %(username)s திருத்து" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "புகுபதிவு" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9718,30 +9787,34 @@ msgstr "பயனர் மற்றும் கோப்புகளை நீ msgid "Cancel" msgstr "ரத்துசெய்" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "வெற்றிகரமாக உள்நுழைந்தது." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "பயனர் %(username)s உருவாக்கப்பட்டது." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "பயனர் %(username)s புதுப்பிக்கப்பட்டன." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "பயனரைத் திருத்து" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "பயனர் %(username)s நீக்கப்பட்டன." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "கடவுச்சொல்லை மாற்றவும்" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "கடவுச்சொல் வெற்றிகரமாக மாற்றப்பட்டது." @@ -9773,14 +9846,25 @@ msgstr "" msgid "Invalid key." msgstr "தவறான விசை." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "செல்லுபடியாகும் பயனர்பெயரை உள்ளிடவும்." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "பொது விசை" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9788,11 +9872,11 @@ msgstr "" "சகாக்களின் பொது விசை. எடுத்துக்காட்டு: " "MCONEJFIG6+DFHG2J1NN9SNLOSE9KR0YSDPGMPJIBES =." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "சேவையகத்தின் இறுதிப் புள்ளி" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -9800,11 +9884,11 @@ msgstr "" "\"ஐபி: துறைமுகம்\" வடிவத்தில் டொமைன் பெயர் மற்றும் துறைமுகம். எடுத்துக்காட்டு: " "Demo.wiregaurd.com:12912." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "சேவையகத்தின் பொது விசை" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9812,24 +9896,31 @@ msgstr "" "சேவையக ஆபரேட்டரால் வழங்கப்பட்டது, நீண்ட எழுத்துக்கள். எடுத்துக்காட்டு: " "MCONEJFIG6+DFHG2J1NN9SNLOSE9KR0YSDPGMPJIBES =." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "சேவையகம் வழங்கிய கிளையன்ட் ஐபி முகவரி" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "இறுதிப் புள்ளியுடன் இணைந்த பிறகு VPN இல் இந்த கணினியில் ஒதுக்கப்பட்ட ஐபி முகவரி. இந்த " "மதிப்பு பொதுவாக சேவையக ஆபரேட்டரால் வழங்கப்படுகிறது. எடுத்துக்காட்டு: 192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "இந்த இயந்திரத்தின் தனிப்பட்ட விசை" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9841,11 +9932,11 @@ msgstr "" "ஆபரேட்டர்கள் இதை வழங்க வலியுறுத்துகின்றனர். எடுத்துக்காட்டு: " "MCONEJFIG6+DFHG2J1NN9SNLOSE9KR0YSDPGMPJIBES =." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "முன் பகிரப்பட்ட விசை" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -9855,11 +9946,11 @@ msgstr "" "வழங்கப்பட்டால் மட்டுமே நிரப்பவும். எடுத்துக்காட்டு: " "MCONEJFIG6+DFHG2J1NN9SNLOSE9KR0YSDPGMPJIBES =." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "வெளிச்செல்லும் அனைத்து போக்குவரத்தையும் அனுப்ப இந்த இணைப்பைப் பயன்படுத்தவும்" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "பொதுவாக அனைத்து போக்குவரத்தும் அனுப்பப்படும் VPN சேவைக்கு சரிபார்க்கப்படும்." @@ -9871,70 +9962,106 @@ msgstr "VPN வாங்கி" msgid "As a Server" msgstr "ஒரு சேவையகமாக" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Endpoints for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "இதற்கான முடிவுப்புள்ளிகள் %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "முனைப்புள்ளி" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "பெறுநர் %(box_name)s துறைமுகங்கள்" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "இந்த சேவையகத்துடன் இணைக்க சகாக்கள் அனுமதிக்கப்பட்டனர்:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "அனுமதிக்கப்பட்ட ஐபிக்கள்" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "கடைசியாக இணைக்கப்பட்ட நேரம்" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "இந்த %(box_name)s உடன் இணைக்க எந்த சகாக்களும் கட்டமைக்கப்படவில்லை." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "இந்த %(box_name)s: கள்:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "இன்னும் கட்டமைக்கப்படவில்லை." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "புதிய சகாக்களைச் சேர்க்கவும்" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "அனுமதிக்கப்பட்ட கிளையன்ட் சேர்க்கவும்" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "WireGuard server started successfully." +msgid "WireGuard server not started yet." +msgstr "WireGuard சேவையகம் வெற்றிகரமாக தொடங்கப்பட்டது." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "WireGuard சேவையகத்தைத் தொடங்கவும்" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "ஒரு வாடிக்கையாளராக" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "%(box_name)s இணைக்கும் சேவையகங்கள்:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "முனைப்புள்ளி" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "தொலை சேவையகங்களுக்கான தொடர்புகள் இன்னும் கட்டமைக்கப்படவில்லை." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "புதிய சேவையகத்தைச் சேர்க்கவும்" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "சேவையகத்திற்கு இணைப்பைச் சேர்க்கவும்" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "இந்த கிளையண்டிற்கு ஒதுக்கப்படும் IP முகவரி" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "கிளையன்ட் சேர்க்கவும்" @@ -9985,18 +10112,22 @@ msgstr "சேவையக இறுதிப் புள்ளிகள்:" msgid "Server public key:" msgstr "சேவையக பொது விசை:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "தரவு கடத்தப்பட்டது:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "பெறப்பட்ட தரவு:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "அண்மைக் கால ஏண்ட்சேக்:" @@ -10023,62 +10154,74 @@ msgstr "இந்த இயந்திரத்தின் பொது வி msgid "IP address of this machine:" msgstr "இந்த இயந்திரத்தின் ஐபி முகவரி:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "புதிய கிளையன்ட் சேர்க்கப்பட்டது." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "பொது விசையுடன் கூடிய வாடிக்கையாளர் ஏற்கனவே இருக்கிறார்" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "அனுமதிக்கப்பட்ட கிளையன்ட்" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "புதுப்பிக்கப்பட்ட வாங்கி." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "கிளையண்டை மாற்றவும்" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "அனுமதிக்கப்பட்ட கிளையன்ட் நீக்கு" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "கிளையன்ட் நீக்கப்பட்டது." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "வாடிக்கையாளர் கண்டுபிடிக்கப்படவில்லை" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "புதிய சேவையகத்தைச் சேர்த்தது." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "சேவையகத்திற்கான இணைப்பு" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "புதுப்பிக்கப்பட்ட சேவையகம்." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "சேவையகத்திற்கான இணைப்பை மாற்றவும்" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "சேவையகத்திற்கான இணைப்பை நீக்கு" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "சேவையகம் நீக்கப்பட்டது." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "WireGuard சேவையகம் வெற்றிகரமாக தொடங்கப்பட்டது." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "WireGuard சேவையகத்தைத் தொடங்குவதில் தோல்வி: {}" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10268,6 +10411,24 @@ msgstr "உள்ளமைவு கோப்பு: {file}" msgid "Timeout waiting for package manager" msgstr "தொகுப்பு மேலாளருக்காக நேரம் காத்திருக்கிறது" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "முகவரி கோருதல்" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "பயன்பாட்டை நிறுவுகிறது" @@ -10384,46 +10545,33 @@ msgid "500" msgstr "500" #: plinth/templates/500.html:14 -#, fuzzy, python-format -#| msgid "" -#| "This is an internal error and not something you caused or can fix. Please " -#| "report the error on the bug tracker so we can fix it. Also, please " -#| "attach the status log to the bug " -#| "report." +#, python-format msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it. Also, please attach " "the logs to the bug report." msgstr "" -"இது ஒரு உள் பிழை மற்றும் நீங்கள் ஏற்படுத்திய அல்லது சரிசெய்ய முடியாத ஒன்று அல்ல. பிழை " -"டிராக்கர் இல் பிழையைப் புகாரளிக்கவும், எனவே நாங்கள் அதைச் சரிசெய்ய முடியும். " -"மேலும், தயவுசெய்து நிலை பதிவு பிழை " -"அறிக்கையுடன் இணைக்கவும்." +"இது ஒரு உள் பிழை மற்றும் நீங்கள் ஏற்படுத்திய அல்லது சரிசெய்யக்கூடிய ஒன்று அல்ல. பிழையை பிழை " +"டிராக்கரில் புகாரளிக்கவும், அதை நாங்கள் சரிசெய்ய முடியும். மேலும், பிழை " +"அறிக்கையுடன் பதிவுகளை இணைக்கவும்." #: plinth/templates/app-header.html:26 msgid "Installation" msgstr "நிறுவல்" #: plinth/templates/app-logs.html:12 -#, fuzzy -#| msgid "" -#| "These are the last %(num_lines)s lines of the status log for this web " -#| "interface. If you want to report a bug, please use the bug tracker and " -#| "attach this status log to the bug report." msgid "" "These are the last lines of the logs for services involved in this app. If " "you want to report a bug, please use the bug tracker and attach this log to " "the bug report." msgstr "" -"இந்த வலை இடைமுகத்திற்கான நிலை பதிவின் கடைசி %(num_lines)s வரிகள் இவை. நீங்கள் ஒரு " -"பிழையைப் புகாரளிக்க விரும்பினால், தயவுசெய்து பிழை டிராக்கர் ஐப் பயன்படுத்தவும், இந்த " -"நிலை உள்நுழைவு பிழை அறிக்கையில் இணைக்கவும்." +"இந்தப் பயன்பாட்டில் உள்ள சேவைகளுக்கான பதிவுகளின் கடைசி வரிகள் இவை. பிழையைப் புகாரளிக்க " +"விரும்பினால், தயவுசெய்து பிழை கண்காணிப்பாளரைப் பயன்படுத்தி, பிழை அறிக்கையுடன் இந்தப் " +"பதிவை இணைக்கவும்." #: plinth/templates/app-logs.html:26 msgid "" @@ -10446,35 +10594,35 @@ msgstr "" "சேவையகமாகும். இது இலவச மென்பொருளாகும், இது சேவையக பயன்பாடுகளை எளிதாக நிறுவவும் " "நிர்வகிக்கவும் உங்களை அனுமதிக்கிறது." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " வீடு" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " பயன்பாடுகள்" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " அமைப்பு" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "கடவுச்சொல்லை மாற்றவும்" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "மூடு" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "விடுபதிகை" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "மொழியைத் தேர்ந்தெடுக்கவும்" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "புகுபதிகை" @@ -10572,14 +10720,18 @@ msgid "" msgstr "" "தற்போது பின்வரும் பிணைய இடைமுகங்கள் உள் என கட்டமைக்கப்பட்டுள்ளன: %(interface_list)s கள்" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "தள்ளுபடி" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "அறிவிப்புகள்" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" -msgstr "" +msgstr "%(time_since)s முன்பு" #: plinth/templates/port-forwarding-info.html:8 msgid "Port Forwarding" @@ -10651,11 +10803,11 @@ msgstr "இந்த பயன்பாடு தற்போது உங்க #: plinth/templates/setup.html:51 msgid "Checking app availability..." -msgstr "" +msgstr "ஆப்ச் கிடைப்பதைச் சரிபார்க்கிறது..." #: plinth/templates/setup.html:57 msgid "Error checking app availability. Please refresh page." -msgstr "" +msgstr "ஆப்ச் கிடைப்பதைச் சரிபார்ப்பதில் பிழை. பக்கத்தைப் புதுப்பிக்கவும்." #: plinth/templates/setup.html:72 msgid "" @@ -10680,33 +10832,27 @@ msgstr "எல்லா குறிச்சொற்களையும் அ #: plinth/templates/theme-menu.html:8 msgid "Toggle theme (auto)" -msgstr "" +msgstr "கருப்பொருள் மாறு (தானியங்கு)" #: plinth/templates/theme-menu.html:14 msgid "Toggle theme" -msgstr "" +msgstr "கருப்பொருள் மாறு" #: plinth/templates/theme-menu.html:23 -#, fuzzy -#| msgid "Weight" msgid "Light" -msgstr "எடை" +msgstr "ஒளி" #: plinth/templates/theme-menu.html:32 msgid "Dark" -msgstr "" +msgstr "இருள்" #: plinth/templates/theme-menu.html:41 -#, fuzzy -#| msgid "Automatic" msgid "Auto" -msgstr "தானியங்கி" +msgstr "தானி" #: plinth/templates/toolbar.html:39 plinth/templates/toolbar.html:40 -#, fuzzy -#| msgid "Logs" msgid "View Logs" -msgstr "பதிவுகள்" +msgstr "பதிவுகளைப் பார்க்கவும்" #: plinth/templates/toolbar.html:46 plinth/templates/toolbar.html:47 msgid "Backup" @@ -10742,15 +10888,32 @@ msgstr "இங்கே" msgid "Setting unchanged" msgstr "மாறாமல் அமைத்தல்" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "{app_id} ஐ நிறுவல் நீக்குவதற்கு முன்" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "குசராத்தி" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "பாஓடு சேவையகத்தின் கடவுச்சொல்.
பாஓடு விசை அடிப்படையிலான ஏற்பு இன்னும் " +#~ "சாத்தியமில்லை." + +#~ msgid "Single Sign On" +#~ msgstr "ஒற்றை அடையாளம்" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "இந்த %(box_name)s: கள்:" + +#~ msgid "Not configured yet." +#~ msgstr "இன்னும் கட்டமைக்கப்படவில்லை." + #~ msgid "Minetest" #~ msgstr "பயணத்திலிருந்து" diff --git a/plinth/locale/te/LC_MESSAGES/django.po b/plinth/locale/te/LC_MESSAGES/django.po index d72471d4b..91be5ccb0 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-05-14 17:03+0000\n" "Last-Translator: Sripath Roy Koganti \n" "Language-Team: Telugu user@host:~/path/to/repo/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "ప్రామాణీకరణ విధం" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "రిమోట్ సర్వర్‌కు ప్రామాణీకరణ విఫలమైంది." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "ప్రమాణీకరణ అవసరం" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "పాస్‌వర్డ్ ప్రమాణీకరణను నిలిపివేయండి" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH సర్వర్ పాస్ వర్డ్" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "SSH సర్వర్ యొక్క పాస్వర్డ్.
SSH కీ-ఆధారిత ప్రామాణీకరణ ఇంకా సాధ్యం కాదు." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "పాస్‌వర్డ్ ప్రమాణీకరణను నిలిపివేయండి" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "పాస్‌వర్డ్ ప్రమాణీకరణను నిలిపివేయండి" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "రిమోట్ బ్యాకప్ రిపోజిటరీ ఇప్పటికే ఉంది." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "ధృవీకరించబడిన SSH పబ్లిక్ కీని ఎంచుకోండి" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "పునరుద్ధరించు" @@ -537,17 +573,17 @@ msgstr "బ్యాకప్ సిస్టమ్ మరొక ఆపరేష msgid "Not enough space left on the disk or remote location." msgstr "డిస్క్ లేదా రిమోట్ స్థానంలో తగినంత స్థలం లేదు." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "ఇప్పటికే ఉన్న రిపోజిటరీ గుప్తీకరించబడలేదు." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} నిల్వ" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "క్రొత్త బ్యాకప్‌ను సృష్టించండి" @@ -583,7 +619,23 @@ msgstr "రిమోట్ బ్యాకప్ స్థానాన్ని msgid "Existing Backups" msgstr "ఇప్పటికే ఉన్న బ్యాకప్‌లు" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -608,7 +660,7 @@ msgstr "ఇప్పటికే ఉన్న బ్యాకప్‌లు" msgid "Caution:" msgstr "జాగ్రత్త:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -618,7 +670,7 @@ msgstr "" "ఈ రిపోజిటరీకి సంబంధించిన ఆధారాలు మీ %(box_name)sలో నిల్వ చేయబడతాయి.
కొత్త %(box_name)sలో " "బ్యాకప్‌ని పునరుద్ధరించడానికి మీకు SSH ఆధారాలు మరియు ఎంచుకుంటే ఎన్‌క్రిప్షన్ పాస్‌ఫ్రేజ్ అవసరం." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "స్థానాన్ని సృష్టించు" @@ -758,107 +810,109 @@ msgstr "" msgid "Verify Host" msgstr "హోస్ట్ ను నిర్ధారించండి" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "బ్యాకప్ షెడ్యూల్ నవీకరించబడింది." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "ఖాతా సృష్టించు" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "భాండాగారాము సృజింపబడింది." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "ఆర్కైవ్ తొలగించు" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "ఆర్కైవ్ తొలగించబడింది." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "బ్యాకప్‌ను అప్‌లోడ్ చేసి పునరుద్ధరించండి" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "అప్‌లోడ్ విజయవంతమైంది." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "ఏ బ్యాకప్ ఫైల్ దొరకలేదు." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "అప్‌లోడ్ చేసిన ఫైల్ నుండి పునరుద్ధరించండి" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "బ్యాకప్ నుండి పునరుద్ధరించబడిన ఫైళ్లు." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "రిపోజిటరీని జోడించడానికి అదనపు డిస్కులు అందుబాటులో లేవు." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "బ్యాకప్ రిపోజిటరీని సృష్టించండి" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "కొత్త రిపోజిటరీ జోడించబడింది." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "రిమోట్ బ్యాకప్ రిపోజిటరీని సృష్టించండి" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "కొత్త రిమోట్ SSH రిపోజిటరీ జోడించబడింది." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "SSH హోస్ట్‌కీని ధృవీకరించండి" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "SSH హోస్ట్ ఇప్పటికే ధృవీకరించబడింది." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "SSH హోస్ట్ ధృవీకరించబడింది." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "SSH హోస్ట్ పబ్లిక్ కీని ధృవీకరించడం సాధ్యం కాలేదు." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "రిమోట్ సర్వర్‌కు ప్రామాణీకరణ విఫలమైంది." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "సర్వర్‌కు కనెక్షన్‌ని ఏర్పాటు చేయడంలో లోపం: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "బ్యాకప్ షెడ్యూల్ నవీకరించబడింది." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "ఖాతా సృష్టించు" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "భాండాగారాము సృజింపబడింది." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "ఆర్కైవ్ తొలగించు" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "ఆర్కైవ్ తొలగించబడింది." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "బ్యాకప్‌ను అప్‌లోడ్ చేసి పునరుద్ధరించండి" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "అప్‌లోడ్ విజయవంతమైంది." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "ఏ బ్యాకప్ ఫైల్ దొరకలేదు." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "అప్‌లోడ్ చేసిన ఫైల్ నుండి పునరుద్ధరించండి" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "బ్యాకప్ నుండి పునరుద్ధరించబడిన ఫైళ్లు." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "రిపోజిటరీని జోడించడానికి అదనపు డిస్కులు అందుబాటులో లేవు." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "బ్యాకప్ రిపోజిటరీని సృష్టించండి" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "కొత్త రిపోజిటరీ జోడించబడింది." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "రిమోట్ బ్యాకప్ రిపోజిటరీని సృష్టించండి" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "కొత్త రిమోట్ SSH రిపోజిటరీ జోడించబడింది." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "SSH హోస్ట్‌కీని ధృవీకరించండి" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "SSH హోస్ట్ ఇప్పటికే ధృవీకరించబడింది." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "SSH హోస్ట్ ధృవీకరించబడింది." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "రిపోజిటరీ తొలగించబడింది." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "రిపోజిటరీని తొలగించండి" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "రిపోజిటరీ తొలగించబడింది. బ్యాకప్‌లు తొలగించబడలేదు." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "అన్‌మౌంటింగ్ విఫలమైంది!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "మౌంటింగ్ విఫలమైంది" @@ -938,7 +992,7 @@ msgstr "రహస్యపదం అందించని అనామక వి #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "అనుమతులు" @@ -1023,8 +1077,8 @@ msgstr "జాబితా" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "తొలగించు" @@ -1099,6 +1153,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "సర్వర్" @@ -1392,13 +1447,20 @@ msgid "Webserver Home Page" msgstr "వెబ్‌సర్వర్ హోమ్ పేజీ" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "ఎవరైనా మిమ్మల్ని సందర్శించినప్పుడు తప్పనిసరిగా అందించాల్సిన డిఫాల్ట్ పేజీని ఎంచుకోండి {box_name} " "అంతర్జాలంలో .ఎవరైనా డొమైన్ పేరును సందర్శించినప్పుడు మీ బ్లాగ్ లేదా వికీని హోమ్ పేజీగా సెట్ చేయడం ఒక సాధారణ " @@ -2003,7 +2065,7 @@ msgid "Invalid domain name" msgstr "డొమైన్ పేరు చెల్లదు" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "వినియోగి పేరు" @@ -2288,8 +2350,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "స్థితి" @@ -2349,9 +2411,13 @@ msgstr "" "వంటి అవసరమైన మారుపేర్లు స్వయంచాలకంగా సృష్టించబడతాయి." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube యాప్ వినియోగదారులు ఇమెయిల్‌ను యాక్సెస్ " "చేయడానికి వెబ్ ఇంటర్‌ఫేస్‌ను అందిస్తుంది." @@ -3241,8 +3307,8 @@ msgstr "అభిప్రాయాన్ని సమర్పించండ msgid "Contribute" msgstr "దోహదం చేయండి" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "గురించి" @@ -3864,7 +3930,7 @@ msgstr "వెబ్ కాన్ఫరెన్స్" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "జావాస్క్రిప్ట్ లైసెన్స్ సమాచరం" @@ -5026,9 +5092,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "సవరించు" @@ -5565,6 +5631,7 @@ msgstr "అనుసంధానం తొలగించండి" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "అనుసంధానం" @@ -5775,6 +5842,7 @@ msgid "Edit Connection" msgstr "అనుసంధానాన్ని సవరించండి" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "లోపం:" @@ -5973,11 +6041,17 @@ msgstr "" "%(box_name)s సేవలను అందజేసేలా రౌటర్ మొత్తం ట్రాఫిక్‌ను ఫార్వార్డ్ చేయడానికి కాన్ఫిగర్ చేయబడాలి." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "మీ రూటర్‌పై మీకు నియంత్రణ లేకపోతే, దాన్ని కాన్ఫిగర్ చేయకూడదని ఎంచుకోండి. ఈ పరిమితిని అధిగమించడానికి " "ఎంపికలను చూడటానికి, %(app)s
wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "అధీకృత SSH కీలు" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6691,8 +6799,8 @@ msgstr "రీబూట్ చేయండి" msgid "Shutdown" msgstr "షట్డౌన్" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "పునఃప్రారంభించండి" @@ -7469,10 +7577,12 @@ msgid "N/A" msgstr "N/A" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "అవును" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "ఏమీ లేదు" @@ -7741,10 +7851,17 @@ msgstr "" "ముందు మరియు తర్వాత కూడా. దిగువ సెట్టింగ్‌ల ప్రకారం పాత స్నాప్‌షాట్‌లు స్వయంచాలకంగా శుభ్రం చేయబడతాయి." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "స్నాప్‌షాట్‌లు ప్రస్తుతం btrfs ఫైల్ సిస్టమ్‌లలో మాత్రమే మరియు రూట్ విభజనపై మాత్రమే పని చేస్తాయి. స్నాప్‌షాట్‌లు బ్యాకప్‌లకి ప్రత్యామ్నాయం కాదు, ఎందుకంటే అవి ఒకే విభజనలో " @@ -8084,26 +8201,6 @@ msgstr "అల్గారిథం" msgid "Fingerprint" msgstr "వేలిముద్ర" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "సింగిల్ సైన్ ఆన్" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "లాగిన్ పేజీకి వెళ్లడానికి చిత్రంలోని అక్షరాలను నమోదు చేయండి" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "లాగిన్ చేయడానికి కొనసాగండి" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "ప్రవేశించు" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "విజయవంతంగా లాగ్ అవుట్ చేయబడింది." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8975,13 +9072,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "డిస్ట్రిబ్యూషన్ అప్‌డేట్‌కి వెళ్లండి" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "రద్దుచేసే" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9241,36 +9331,40 @@ msgstr "" msgid "Users and Groups" msgstr "వినియోగదారులు మరియు సమూహాలు" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "అన్ని సేవలకు మరియు సిస్టమ్ అమరికలకు ప్రాప్యత" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP నమోదు \"{search_item}\" తనిఖీ" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "nslcd config \"{key} {value}\"ని తనిఖీ చేయండి" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "nsswitch config \"{database}\"ని తనిఖీ చేయండి" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "లాగిన్ పేజీకి వెళ్లడానికి చిత్రంలోని అక్షరాలను నమోదు చేయండి" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "యూజర్ పేరు తీసుకోబడింది లేదా రిజర్వ్ చేయబడింది." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" "ఐచ్ఛికం. పాస్‌వర్డ్ మరియు ముఖ్యమైన నోటిఫికేషన్‌లను రీసెట్ చేయడానికి ఇమెయిల్‌లను పంపడానికి ఉపయోగించబడుతుంది." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9283,45 +9377,45 @@ msgstr "" "అన్ని సేవలకు లాగిన్ చేయగలరు. వారు SSH ద్వారా సిస్టమ్‌కి లాగిన్ అవ్వగలరు మరియు నిర్వాహక అధికారాలను (సూడో) " "కలిగి ఉంటారు." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "చెల్లుబాటు అయ్యే వినియోగదారు పేరును నమోదు చేయండి." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "అవసరం. 150 అక్షరాలు లేదా అంతకంటే తక్కువ. ఆంగ్ల అక్షరాలు, అంకెలు మరియు @/./-/_ మాత్రమే." -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "అధికార రహస్యపదం" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "వినియోగదారు కోసం పాస్‌వర్డ్‌ను నమోదు చేయండి\"{user}\"ఖాతా సవరణలకు అధికారం ఇవ్వడానికి." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "చెల్లని రహస్యపదం." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "ల్డప్ వినియోగదారుని సృష్టించడం విఫలమైంది: {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "సమూహంసమూహానికి కొత్త వినియోగదారుని జోడించడంలో విఫలమైంది: {group} {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "అధీకృత SSH కీలు" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9331,11 +9425,11 @@ msgstr "" "అవ్వడానికి అనుమతిస్తుంది. మీరు బహుళ కీలను నమోదు చేయవచ్చు, ఒక్కో లైన్‌లో ఒకటి. #తో ప్రారంభమయ్యే ఖాళీ " "పంక్తులు మరియు పంక్తులు విస్మరించబడతాయి." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "వినియోగదారుని తొలగించు" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -9343,40 +9437,40 @@ msgstr "" "వినియోగదారు ఖాతాను తొలగించడం వలన వినియోగదారుకు సంబంధించిన అన్ని ఫైళ్లు కూడా తొలగించబడతాయి. వినియోగదారు " "ఖాతాను నిష్క్రియంగా సెట్ చేయడం ద్వారా ఫైళ్లను తొలగించడాన్ని నివారించవచ్చు." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "వినియోగదారుని తొలగించడంలో విఫలమైంది." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "ఎల్.డి.ఏ.పి వాడుకరి పేరుమార్పులో విఫలం." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "సమూహంలోంచి వినియోగదారుని తొలగించడంలో విఫలం." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "సమూహంలోకి వినియోగదారుని జోడించడంలో విఫలం." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "SSH కీలను సెట్ చేయడం సాధ్యం కాలేదు." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "వినియోగదారు స్థితిని మార్చడంలో విఫలమైంది." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "ఎల్.డి.ఏ.పి వాడుకరి పాస్‌వర్డ్ మార్పిడి విఫలం." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "నిర్వాహక సమూహానికి కొత్త వినియోగదారుని జోడించడంలో విఫలమైంది: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "వాడుకరి ఖాతా సృస్టించబడింది, మీరు లాగిన్ చేయబడ్డారు" @@ -9388,6 +9482,10 @@ msgstr "ఖాతాలను నిర్వహించండి" msgid "App permissions" msgstr "యాప్ అనుమతులు" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "లాగిన్ చేయడానికి కొనసాగండి" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9401,7 +9499,7 @@ msgstr "పాస్‌వర్డ్‌ను సేవ్ చేయి" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "వినియోగదారుని సృష్టించు" @@ -9455,7 +9553,7 @@ msgid "Skip this step" msgstr "ఈ దశను దాటవేయి" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "వినియోగదారులు" @@ -9464,6 +9562,10 @@ msgstr "వినియోగదారులు" msgid "Edit user %(username)s" msgstr "%(username)s వినియోగదారుని మార్చు" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "ప్రవేశించు" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9504,30 +9606,34 @@ msgstr "వినియోగదారు మరియు ఫైల్‌లన msgid "Cancel" msgstr "రద్దుచేయి" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "విజయవంతంగా లాగ్ అవుట్ చేయబడింది." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "వినియోగదారి %(username)s సృష్టించబడ్డారు." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "వినియోగదారి %(username)s నావీకరించబడ్డాడు." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "వినియోగదారి మార్పు" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "వినియోగదారు %(username)s తొలగించబడ్డారు." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "పాస్‌వర్డ్ మార్చు" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "పాస్‌వర్డ్ విజయవంతంగా మార్చబడినది." @@ -9558,35 +9664,46 @@ msgstr "" msgid "Invalid key." msgstr "చెల్లని తాళంచెవి ." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "చెల్లుబాటు అయ్యే వినియోగదారు పేరును నమోదు చేయండి." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "ప్రజా తాళంచెవి" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "పీర్ యొక్క ప్రజా తాళంచెవి ఉదాహరణ:ఎంకోనేజ్ఫిగ్౬+డీఫ్హఙ౨జ్౧ణ్ణ౯శ్నలొసే౯కృ౦య్సద్ప్గ్మ్పజిబ్స్." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "సర్వర్ యొక్క ముగింపు స్థానం" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" "\"ip:port\" రూపంలోఅధికారక్షేత్రం పేరు మరియు పోర్ట్. ఉదాహరణ: demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "సర్వర్ యొక్క ప్రజా తాళంచెవి" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9594,24 +9711,31 @@ msgstr "" "సర్వర్ ఆపరేటర్ ద్వారా అందించబడింది, అక్షరాల యొక్క పొడవైన స్ట్రింగ్. ఉదాహరణ: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "సర్వర్ అందించిన క్లయింట్ IP చిరునామా" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "ఎండ్ పాయింట్‌కి కనెక్ట్ చేసిన తర్వాత వపన్ లో ఈ మెషీన్‌కు ఇప్ చిరునామా కేటాయించబడుతుంది. ఈ విలువ సాధారణంగా " "సర్వర్ ఆపరేటర్ ద్వారా అందించబడుతుంది. ఉదాహరణ: ౧౯౨.౧౬౮.౦.౧౦." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "ఈ యంత్రం యొక్క స్వంత తాళం" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9622,11 +9746,11 @@ msgstr "" "సిఫార్సు చేయబడిన మార్గం. అయితే, కొంతమంది సర్వర్ ఆపరేటర్లు దీన్ని అందించాలని పట్టుబట్టారు. " "ఉదాహరణ:MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "ముందుగా భాగస్వామ్యం చేసిన తాళం" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -9635,11 +9759,11 @@ msgstr "" "ఐచ్ఛికం. అదనపు భద్రతా పొరను జోడించడానికి సర్వర్ అందించిన షేర్డ్ సీక్రెట్ కీ. అందించినట్లయితే మాత్రమే " "పూరించండి. ఉదాహరణ: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "అవుట్‌గోయింగ్ ట్రాఫిక్ మొత్తాన్ని పంపడానికి ఈ కనెక్షన్‌ని ఉపయోగించండి" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "సాధారణంగా ట్రాఫిక్ మొత్తం పంపబడే వపన్ సేవ కోసం తనిఖీ చేయబడుతుంది." @@ -9651,70 +9775,110 @@ msgstr "VPN క్లయింట్" msgid "As a Server" msgstr "ఛాయస్ ఆ సర్వర్" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Public key for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "ఈ %(box_name)s కోసం స్వయం తాళం :" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "ఎండ్ పాయింట్" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "%(box_name)s పోర్ట్‌లకు" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "ఈ సర్వర్‌కి కనెక్ట్ చేయడానికి సహచరులు అనుమతించబడ్డారు:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "అనుమతించబడిన ఐపిలు" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "చివరిగా కనెక్ట్ చేయబడిన సమయం" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "ఈ %(box_name)s కు కనెక్ట్ చేయడానికి సహచరులు ఇంకా కాన్ఫిగర్ చేయబడలేదు." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "ఈ %(box_name)s కోసం స్వయం తాళం :" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "ప్రస్తుతం ఏ షేర్లు ఏర్పాటు చేయబడలేదు." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "కొత్త పరిచయకర్తని జోడించండి" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "అనుమతించబడిన క్లయింట్‌ను జోడించండి" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "పాస్‌వర్డ్ విజయవంతంగా మార్చబడినది." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +#, fuzzy +#| msgid "Standard Services" +msgid "Start WireGuard Server" +msgstr "ప్రామాణిక సేవలు" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "చాట్ క్లయింట్" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "%(box_name)s కి కనెక్ట్ అయ్యే సర్వర్లు:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "ఎండ్ పాయింట్" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "రిమోట్ సర్వర్ లకు కనెక్షన్ లు ఇంకా కాన్ఫిగర్ చేయబడలేదు." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "కొత్త సర్వర్ జోడించండి" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "అనుసంధానాన్ని జతచేయండి" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +#, fuzzy +#| msgid "IP address to use for client:" +msgid "IP address that will be assigned to this client" +msgstr "క్లయింట్ కోసం ఉపయోగించాల్సిన IP చిరునామా:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "ఐ ర్ సి క్లయింట్ (Quassel)" @@ -9765,18 +9929,22 @@ msgstr "సర్వర్ ఎండ్ పాయింట్స్:" msgid "Server public key:" msgstr "సర్వర్ పబ్లిక్ కీ:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "డేటా బదిలీ:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "అందిన సమాచారం:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "తాజా హ్యాండ్‌షేక్:" @@ -9802,62 +9970,76 @@ msgstr "ఈ యంత్రం యొక్క పబ్లిక్ కీ:" msgid "IP address of this machine:" msgstr "ఈ యంత్రం యొక్క IP చిరునామా:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "కొత్త క్లయింట్ జోడించబడింది." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "పబ్లిక్ కీతో క్లయింట్ ఇప్పటికే ఉంది" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "అనుమతించబడిన క్లయింట్" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "నవీకరించబడిన క్లయింట్." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "క్లయింట్‌ని సవరించండి" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "అనుమతించబడిన క్లయింట్‌ను తొలగించండి" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "క్లయింట్ తొలగించబడింది." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "క్లయింట్ దొరకలేదు" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "కొత్త సర్వర్ జోడించబడింది." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "సర్వర్‌కి కనెక్షన్" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "నవీకరించబడిన సర్వర్." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "సర్వర్‌కి కనెక్షన్‌ని సవరించండి" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "సర్వర్‌కు కనెక్షన్‌ని తొలగించండి" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "సర్వర్ తొలగించబడింది." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "పాస్‌వర్డ్ విజయవంతంగా మార్చబడినది." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10040,6 +10222,24 @@ msgstr "ఆకృతీకరణ ఫైలు: {file}" msgid "Timeout waiting for package manager" msgstr "ప్యాకేజీ మేనేజర్ కోసం వేచి ఉన్న సమయం ముగిసింది" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "చిరునామాను అభ్యర్థిస్తోంది" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "యాప్‌ను ఇన్‌స్టాల్ చేస్తోంది" @@ -10214,35 +10414,35 @@ msgstr "" "FreedomBox అనేది గోప్యత మరియు డేటా యాజమాన్యం కోసం రూపొందించబడిన వ్యక్తిగత సర్వర్. ఇది సర్వర్ యాప్‌లను " "సులభంగా ఇన్‌స్టాల్ చేయడానికి మరియు నిర్వహించడానికి మిమ్మల్ని అనుమతించే ఉచిత సాఫ్ట్‌వేర్." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " నివాసం" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " కార్యక్షేత్రం" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " కార్యవ్యవస్థ" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "పాస్స్ వర్ద మార్చుము" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "మూసివేయి" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "నిష్క్రమించు" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "బాషను ఎంచుకోండి" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "లోనికి ప్రవేశించండి" @@ -10340,11 +10540,15 @@ msgid "" msgstr "" "ప్రస్తుతం దిగువ నెట్ వర్క్ ఇంటర్ ఫేస్ లు ఇంటర్నల్ గా కాన్ఫిగర్ చేయబడ్డాయి: %(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "రద్దుచేసే" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "నోటిఫికేషన్లు" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -10508,15 +10712,30 @@ msgstr "ఇక్కడ" msgid "Setting unchanged" msgstr "మారకుండా అమర్చుతోంది" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "{app_id} ని అన్ఇన్‌స్టాల్ చేయడానికి ముందు" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "గుజరాతీ" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "SSH సర్వర్ యొక్క పాస్వర్డ్.
SSH కీ-ఆధారిత ప్రామాణీకరణ ఇంకా సాధ్యం కాదు." + +#~ msgid "Single Sign On" +#~ msgstr "సింగిల్ సైన్ ఆన్" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "ఈ %(box_name)s కోసం స్వయం తాళం :" + +#~ msgid "Not configured yet." +#~ msgstr "ప్రస్తుతం ఏ షేర్లు ఏర్పాటు చేయబడలేదు." + #~ msgid "Minetest" #~ msgstr "మైన్ టెస్ట్" @@ -11969,9 +12188,6 @@ msgstr "గుజరాతీ" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "మీరు ఏ కస్టమ్ సేవలు ప్రారంభించలేదు" -#~ msgid "Standard Services" -#~ msgstr "ప్రామాణిక సేవలు" - #, fuzzy #~ msgid "" #~ "When enabled, Syncthing's web interface will be available from \n" "Language-Team: Turkish \n" @@ -16,7 +16,7 @@ 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 5.15.1-dev\n" +"X-Generator: Weblate 5.16-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -104,15 +104,15 @@ msgstr "Bu web arayüzünü sunmak için kullanılacak dil" msgid "Use the language preference set in the browser" msgstr "Tarayıcıda ayarlanan dil tercihini kullan" -#: plinth/menu.py:116 plinth/templates/base.html:123 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Giriş" -#: plinth/menu.py:117 plinth/templates/base.html:132 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Uygulamalar" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:141 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "Sistem" @@ -135,36 +135,40 @@ msgstr "Güvenlik" msgid "Administration" msgstr "Yönetim" -#: plinth/middleware.py:134 +#: plinth/middleware.py:144 msgid "System is possibly under heavy load. Please retry later." msgstr "Sistem muhtemelen ağır yük altında. Lütfen daha sonra yeniden deneyin." -#: plinth/middleware.py:147 +#: plinth/middleware.py:157 #, python-brace-format msgid "Page not found: {url}" msgstr "Sayfa bulunamadı: {url}" -#: plinth/middleware.py:150 +#: plinth/middleware.py:160 msgid "Error running operation." msgstr "İşlem çalıştırılırken hata oldu." -#: plinth/middleware.py:152 +#: plinth/middleware.py:162 msgid "Error loading page." msgstr "Sayfa yüklenirken hata oldu." -#: plinth/modules/apache/__init__.py:33 +#: plinth/modules/apache/__init__.py:96 msgid "Apache HTTP Server" msgstr "Apache HTTP Sunucusu" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "Web Sunucusu" -#: plinth/modules/apache/__init__.py:53 +#: plinth/modules/apache/__init__.py:118 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Web Arayüzü (Plinth)" +#: plinth/modules/apache/__init__.py:129 +msgid "Web app protected by FreedomBox" +msgstr "" + #: plinth/modules/apache/components.py:270 #, python-brace-format msgid "Access URL {url} on tcp{kind}" @@ -212,16 +216,16 @@ msgstr "Yerel" msgid "mDNS" msgstr "mDNS" -#: plinth/modules/backups/__init__.py:24 +#: plinth/modules/backups/__init__.py:27 msgid "Backups allows creating and managing backup archives." msgstr "Yedeklemeler, yedekleme arşivleri oluşturmayı ve yönetmeyi sağlar." -#: plinth/modules/backups/__init__.py:46 plinth/modules/backups/__init__.py:176 -#: plinth/modules/backups/__init__.py:221 +#: plinth/modules/backups/__init__.py:49 plinth/modules/backups/__init__.py:247 +#: plinth/modules/backups/__init__.py:292 msgid "Backups" msgstr "Yedeklemeler" -#: plinth/modules/backups/__init__.py:173 +#: plinth/modules/backups/__init__.py:244 msgid "" "Enable an automatic backup schedule for data safety. Prefer an encrypted " "remote backup location or an extra attached disk." @@ -229,19 +233,19 @@ msgstr "" "Veri güvenliği için otomatik bir yedekleme planı etkinleştirin. Şifrelenmiş " "bir uzak yedekleme konumu veya fazladan eklenmiş bir disk tercih edin." -#: plinth/modules/backups/__init__.py:179 +#: plinth/modules/backups/__init__.py:250 msgid "Enable a Backup Schedule" msgstr "Bir Yedekleme Planı etkinleştirin" -#: plinth/modules/backups/__init__.py:183 -#: plinth/modules/backups/__init__.py:230 plinth/modules/privacy/__init__.py:84 +#: plinth/modules/backups/__init__.py:254 +#: plinth/modules/backups/__init__.py:301 plinth/modules/privacy/__init__.py:84 #: plinth/modules/storage/__init__.py:326 #: plinth/modules/upgrades/__init__.py:152 #, python-brace-format msgid "Go to {app_name}" msgstr "{app_name} için git" -#: plinth/modules/backups/__init__.py:218 +#: plinth/modules/backups/__init__.py:289 #, python-brace-format msgid "" "A scheduled backup failed. Past {error_count} attempts for backup did not " @@ -250,7 +254,7 @@ msgstr "" "Planlanmış bir yedekleme başarısız oldu. Geçen {error_count} yedekleme " "denemesi başarılı olmadı. En son hata: {error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "Yedekleme Sırasında Hata" @@ -394,14 +398,16 @@ msgstr "Anahtar Depoda" #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:68 #: plinth/modules/searx/forms.py:14 msgid "None" -msgstr "Yok" +msgstr "Hiçbiri" #: plinth/modules/backups/forms.py:186 plinth/modules/networks/forms.py:340 msgid "Passphrase" msgstr "Parola" #: plinth/modules/backups/forms.py:187 -msgid "Passphrase; Only needed when using encryption." +#, fuzzy +#| msgid "Passphrase; Only needed when using encryption." +msgid "Only needed when using encryption." msgstr "Parola; Yalnızca şifreleme kullanırken gereklidir." #: plinth/modules/backups/forms.py:190 @@ -440,29 +446,57 @@ msgstr "" "Yeni veya varolan bir depo yolu. Örnek: user@host:~/path/to/repo/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Kimlik Doğrulama Kipi" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Uzak sunucuya kimlik doğrulama başarısız oldu." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "kimlik doğrulaması gerekiyor" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Parola kimlik doğrulamasını etkisizleştir" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH Sunucu Parolası" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"SSH sunucusunun parolası.
SSH anahtar tabanlı kimlik doğrulaması henüz " -"mümkün değildir." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Parola kimlik doğrulamasını etkisizleştir" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Parola kimlik doğrulamasını etkisizleştir" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Uzak yedekleme deposu zaten var." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Doğrulanmış SSH ortak anahtarını seçin" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Geri Yükle" @@ -540,17 +574,17 @@ msgstr "Yedekleme sistemi başka bir işlemle meşgul." msgid "Not enough space left on the disk or remote location." msgstr "Diskte veya uzak konumda yeterli alan kalmadı." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Varolan depo şifrelenmemiş." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} depolaması" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Yeni bir yedek oluşturun" @@ -586,7 +620,23 @@ msgstr "Uzak Yedekleme Konumu Ekle" msgid "Existing Backups" msgstr "Varolan Yedekler" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -611,7 +661,7 @@ msgstr "Varolan Yedekler" msgid "Caution:" msgstr "Dikkat:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -622,7 +672,7 @@ msgstr "" "yedeği yeni bir %(box_name)s cihazına geri yüklemek için SSH kimlik " "bilgilerine ve seçiliyse, şifreleme parolasına ihtiyacınız var." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Konum Oluştur" @@ -753,107 +803,109 @@ msgstr "" msgid "Verify Host" msgstr "Anamakineyi Doğrula" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Yedekleme planı güncellendi." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Yedeklemeleri Zamanla" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Arşiv oluşturuldu." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Arşivi Sil" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Arşiv silindi." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Yedeklemeyi karşıya yükleyin ve geri yükleyin" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Yükleme başarılı oldu." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "Yedekleme dosyası bulunamadı." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Karşıya yüklenen dosyadan geri yükle" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "Dosyalar yedekten geri yüklendi." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "Bir depo eklemek için mevcut ek diskler yok." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Yedekleme deposu oluşturun" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "Yeni depo eklendi." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Uzak yedekleme deposu oluşturun" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Yeni uzak SSH deposu eklendi." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "SSH anamakine anahtarını doğrula" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "SSH anamakinesi zaten doğrulandı." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "SSH anamakinesi doğrulandı." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "SSH anamakinesi ortak anahtarı doğrulanamadı." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "Uzak sunucuya kimlik doğrulama başarısız oldu." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Sunucuyla bağlantı kurulurken hata oldu: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Yedekleme planı güncellendi." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Yedeklemeleri Zamanla" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Arşiv oluşturuldu." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Arşivi Sil" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Arşiv silindi." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Yedeklemeyi karşıya yükleyin ve geri yükleyin" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Yükleme başarılı oldu." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "Yedekleme dosyası bulunamadı." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Karşıya yüklenen dosyadan geri yükle" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "Dosyalar yedekten geri yüklendi." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "Bir depo eklemek için mevcut ek diskler yok." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Yedekleme deposu oluşturun" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Yeni depo eklendi." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Uzak yedekleme deposu oluşturun" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Yeni uzak SSH deposu eklendi." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "SSH anamakine anahtarını doğrula" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "SSH anamakinesi zaten doğrulandı." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "SSH anamakinesi doğrulandı." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Depo kaldırıldı." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Depoyu Kaldır" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Depo kaldırıldı. Yedekler silinmedi." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Bağlantıyı kaldırma başarısız oldu!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Bağlama başarısız oldu" @@ -935,7 +987,7 @@ msgstr "Bir parola girmemiş isimsiz kullanıcılar için izinler." #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "İzinler" @@ -1021,8 +1073,8 @@ msgstr "Listele" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Sil" @@ -1099,6 +1151,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Sunucu" @@ -1401,13 +1454,20 @@ msgid "Webserver Home Page" msgstr "Web Sunucusu Ana Sayfası" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Birisi web'de {box_name} cihazınızı ziyaret ettiğinde sunulmak zorunda olan " "varsayılan sayfayı seçin. Tipik bir kullanım örneği, biri etki alanı adını " @@ -2012,7 +2072,7 @@ msgid "Invalid domain name" msgstr "Geçersiz etki alanı adı" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Kullanıcı adı" @@ -2307,8 +2367,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Durum" @@ -2371,9 +2431,13 @@ msgstr "" "kullanıcıyı işaret ederek otomatik olarak oluşturulur." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "
Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube uygulaması, kullanıcıların " "e-postaya erişmesi için web arayüzü sağlar." @@ -3292,8 +3356,8 @@ msgstr "Geri Bildirim Gönder" msgid "Contribute" msgstr "Katkıda Bulun" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Hakkında" @@ -3946,7 +4010,7 @@ msgstr "Web görüşme" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "JavaScript lisans bilgileri" @@ -4641,8 +4705,8 @@ msgstr "" "Resmi olarak Minetest olarak bilinen Luanti, çok oyunculu sonsuz dünya " "bloklu bir korumalı alandır. Bu modül Luanti sunucusunun bu {box_name} " "üzerinde, varsayılan bağlantı noktasında (30000) çalıştırılmasını sağlar. " -"Sunucuya bağlanmak için bir " -"Luanti istemcisi gereklidir." +"Sunucuya bağlanmak için bir Luanti istemcisi gereklidir." #: plinth/modules/minetest/__init__.py:57 plinth/modules/minetest/manifest.py:9 msgid "Luanti" @@ -5166,9 +5230,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Düzenle" @@ -5734,6 +5798,7 @@ msgstr "Bağlantıyı sil" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Bağlantı" @@ -5945,6 +6010,7 @@ msgid "Edit Connection" msgstr "Bağlantıyı Düzenle" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Hata:" @@ -6149,11 +6215,17 @@ msgstr "" "yönlendirecek şekilde yapılandırılması gerekecektir." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Eğer yönlendiriciniz üzerinde denetiminiz yoksa, yapılandırmamayı seçin. Bu " "sınırlamanın üstesinden gelme seçeneklerini görmek için %(app)s
wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Yetkili SSH Anahtarları" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6891,8 +6997,8 @@ msgstr "Baştan başlat" msgid "Shutdown" msgstr "Kapat" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Yeniden başlat" @@ -7691,13 +7797,15 @@ msgstr "Korumalı Alan Kapsamı" #: plinth/modules/security/templates/security_report.html:58 msgid "N/A" -msgstr "YOK" +msgstr "Yok" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Evet" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Hayır" @@ -7981,10 +8089,17 @@ msgstr "" "temizlenecektir." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Anlık görüntüler şu anda sadece btrfs dosya sistemlerinde ve sadece kök " "bölümde çalışmaktadır. Anlık görüntüler, sadece aynı bölümde " @@ -8338,26 +8453,6 @@ msgstr "Algoritma" msgid "Fingerprint" msgstr "Parmak İzi" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Tek Oturum Açma" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "Oturum açma sayfasına ilerlemek için resimdeki harfleri girin" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "Oturum açmak için ilerle" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Oturum aç" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "Başarılı olarak oturumu kapatıldı." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9259,13 +9354,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Dağıtım Güncellemesine Git" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "Yoksay" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9537,37 +9625,41 @@ msgstr "" msgid "Users and Groups" msgstr "Kullanıcılar ve Gruplar" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Tüm hizmetlere ve sistem ayarlarına erişim" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP \"{search_item}\" girişini denetleme" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "\"{key} {value}\" nslcd yapılandırmasını denetleme" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "\"{database}\" nsswitch yapılandırmasını denetleme" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "Oturum açma sayfasına ilerlemek için resimdeki harfleri girin" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "Kullanıcı adı alınmış veya ayrılmış." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" "İsteğe bağlı. Parolayı sıfırlamak ve önemli bildirimleri e-posta olarak " "göndermek için kullanılır." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9581,22 +9673,22 @@ msgstr "" "kullanıcılar tüm hizmetlere oturum açabilecektir. Ayrıca SSH aracılığıyla " "sisteme oturum açabilir ve yönetici yetkilerine (sudo) sahip olabilirler." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "Geçerli bir kullanıcı adı girin." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "Zorunlu. 150 veya daha az karakter. Sadece İngilizce harfler, rakamlar ve " "@/./-/_ karakterleri." -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "Yetkilendirme Parolası" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." @@ -9604,25 +9696,25 @@ msgstr "" "Hesap değişikliklerini yetkilendirmek için \"{user}\" kullanıcısının " "parolasını girin." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "Geçersiz parola." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "LDAP kullanıcısı oluşturma başarısız oldu: {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "{group} grubuna yeni kullanıcı ekleme başarısız oldu: {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "Yetkili SSH Anahtarları" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9633,11 +9725,11 @@ msgstr "" "tane olmak üzere birden çok anahtar girebilirsiniz. Boş satırlar ve # ile " "başlayan satırlar yoksayılacaktır." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "Kullanıcıyı sil" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -9646,40 +9738,40 @@ msgstr "" "kaldıracaktır. Kullanıcı hesabının etkin değil olarak ayarlanmasıyla " "dosyaların silinmesi önlenebilir." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "Kullanıcıyı silme başarısız oldu." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "LDAP kullanıcısının yeniden adlandırılması başarısız oldu." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Kullanıcıyı gruptan kaldırma başarısız oldu." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Kullanıcıyı gruba ekleme başarısız oldu." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "SSH anahtarları ayarlanamıyor." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "Kullanıcı durumunu değiştirme başarısız oldu." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "LDAP kullanıcı parolasının değiştirilmesi başarısız oldu." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "Admin grubuna yeni kullanıcı ekleme başarısız oldu: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Kullanıcı hesabı oluşturuldu, şu an oturum açtınız" @@ -9691,6 +9783,10 @@ msgstr "Hesapları yönet" msgid "App permissions" msgstr "Uygulama izinleri" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "Oturum açmak için ilerle" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9704,7 +9800,7 @@ msgstr "Parolayı Kaydet" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Kullanıcı Oluştur" @@ -9754,7 +9850,7 @@ msgid "Skip this step" msgstr "Bu adımı atla" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Kullanıcılar" @@ -9763,6 +9859,10 @@ msgstr "Kullanıcılar" msgid "Edit user %(username)s" msgstr "%(username)s kullanıcısını düzenle" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Oturum aç" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9805,30 +9905,34 @@ msgstr "Kullanıcı ve dosyaları sil" msgid "Cancel" msgstr "İptal" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Başarılı olarak oturumu kapatıldı." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "%(username)s kullanıcısı oluşturuldu." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "%(username)s kullanıcısı güncellendi." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Kullanıcıyı Düzenle" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "%(username)s kullanıcısı silindi." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Parolayı Değiştir" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Parola başarılı olarak değiştirildi." @@ -9861,25 +9965,36 @@ msgstr "" msgid "Invalid key." msgstr "Geçersiz anahtar." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Geçerli bir kullanıcı adı girin." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Ortak Anahtar" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" "Kişinin ortak anahtarı. Örnek: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Sunucunun uç noktası" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -9887,11 +10002,11 @@ msgstr "" "\"ip:b.noktası\" biçiminde etki alanı adı ve bağlantı noktası. Örnek: " "demo.wireguard.com:12912." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Sunucunun ortak anahtarı" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9899,24 +10014,31 @@ msgstr "" "Sunucu işleticisi tarafından sağlanan uzun bir karakter dizgisi. Örnek: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Sunucu tarafından sağlanan istemci IP adresi" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "Uç noktaya bağlandıktan sonra VPN'de bu makineye atanan IP adresi. Bu değer " "genellikle sunucu işleticisi tarafından verilir. Örnek: 192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Bu makinenin özel anahtarı" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9928,11 +10050,11 @@ msgstr "" "sunucu işleticileri bunu vermekte ısrar eder. Örnek: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Ön paylaşımlı anahtar" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -9942,11 +10064,11 @@ msgstr "" "sağlanan paylaşılan bir gizli anahtar. Sadece verildiyse doldurun. Örnek: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Tüm giden trafiği göndermek için bu bağlantıyı kullan" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "Genellikle tüm trafiğin gönderildiği bir VPN hizmeti için denetlenir." @@ -9958,71 +10080,107 @@ msgstr "VPN istemcisi" msgid "As a Server" msgstr "Bir Sunucu Olarak" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Endpoints for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Bu %(box_name)s için uç noktalar:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Uç nokta" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "%(box_name)s Bağlantı Noktalarına" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Bu sunucuya bağlanmasına izin verilen kişiler:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "İzin verilen IP'ler" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Son Bağlanma Zamanı" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" "Henüz bu %(box_name)s cihazına bağlanmak için yapılandırılmış kişiler yok." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Bu %(box_name)s için ortak anahtar:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Henüz yapılandırılmadı." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Yeni bir kişi ekle" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "İzin Verilen İstemci Ekle" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "WireGuard server started successfully." +msgid "WireGuard server not started yet." +msgstr "WireGuard sunucusu başarılı olarak başlatıldı." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "WireGuard Sunucusunu Başlat" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Bir İstemci Olarak" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "%(box_name)s cihazının bağlanacağı sunucular:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Uç nokta" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Henüz uzak sunuculara yapılandırılan bağlantılar yok." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Yeni bir sunucu ekleyin" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Sunucuya Bağlantı Ekle" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "Bu istemciye atanacak IP adresi" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "İstemci Ekle" @@ -10073,18 +10231,22 @@ msgstr "Sunucu uç noktaları:" msgid "Server public key:" msgstr "Sunucu ortak anahtarı:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Aktarılan veriler:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Alınan veriler:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "En son görüşme:" @@ -10111,62 +10273,74 @@ msgstr "Bu makinenin ortak anahtarı:" msgid "IP address of this machine:" msgstr "Bu makinenin IP adresi:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Yeni istemci eklendi." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Ortak anahtara sahip istemci zaten var" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "İzin Verilen İstemci" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "İstemci güncellendi." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "İstemciyi Değiştir" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "İzin Verilen İstemciyi Sil" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "İstemci silindi." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "İstemci bulunamadı" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Yeni sunucu eklendi." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Sunucuya Bağlantı" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Sunucu güncellendi." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Sunucuya Bağlantıyı Değiştir" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Sunucuya Bağlantıyı Sil" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Sunucu silindi." +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "WireGuard sunucusu başarılı olarak başlatıldı." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "WireGuard sunucusunu başlatma başarısız oldu: {}" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10358,6 +10532,24 @@ msgstr "yapılandırma dosyası: {file}" msgid "Timeout waiting for package manager" msgstr "Paket yöneticisini beklerken zaman aşımı oldu" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "adres isteniyor" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Uygulama yükleniyor" @@ -10525,35 +10717,35 @@ msgstr "" "sunucudur. Sunucu uygulamalarını kolaylıkla yüklemenizi ve yönetmenizi " "sağlayan özgür bir yazılımdır." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Giriş" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Uygulamalar" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistem" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Parolayı değiştir" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Kapat" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Oturumu kapat" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Dil seçin" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Oturum aç" @@ -10651,11 +10843,15 @@ msgid "" msgstr "" "Şu anda şu ağ arayüzleri dahili olarak yapılandırıldı: %(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Yoksay" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Bildirimler" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "%(time_since)s önce" @@ -10819,15 +11015,32 @@ msgstr "Burada" msgid "Setting unchanged" msgstr "Ayar değişmedi" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "{app_id} kaldırılmadan önce" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "SSH sunucusunun parolası.
SSH anahtar tabanlı kimlik doğrulaması " +#~ "henüz mümkün değildir." + +#~ msgid "Single Sign On" +#~ msgstr "Tek Oturum Açma" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Bu %(box_name)s için ortak anahtar:" + +#~ msgid "Not configured yet." +#~ msgstr "Henüz yapılandırılmadı." + #~ msgid "Minetest" #~ msgstr "Minetest" @@ -12440,9 +12653,6 @@ msgstr "Gujarati" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "Hiçbir etkin Özel Servisiniz yok" -#~ msgid "Standard Services" -#~ msgstr "Standart Servisler" - #, fuzzy #~| msgid "" #~| "When enabled, Syncthing's web interface will be available from \n" "Language-Team: Ukrainian " #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "Режим автентифікації" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Не вдалося автентифікуватися на віддаленому сервері." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "потрібна автентифікація" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "Вимкнути автентифікацію через пароль" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "пароль сервера SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "" -"Пароль для сервера SSH.
Автентифікація на основі SSH-ключа поки не " -"підтримується." +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "Вимкнути автентифікацію через пароль" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Вимкнути автентифікацію через пароль" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Віддалений репозиторій резервних копій уже існує." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Вибрати перевірений публічний ключ SSH" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Відновити" @@ -548,17 +582,17 @@ msgstr "Система резервного копіювання зайнята msgid "Not enough space left on the disk or remote location." msgstr "Недостатньо місця на диску або у віддаленому місці." -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Наявний репозиторій не зашифровано." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Сховище {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Створити нову резервну копію" @@ -594,7 +628,23 @@ msgstr "Додати розташування віддаленої резерв msgid "Existing Backups" msgstr "Наявні резервні копії" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -619,7 +669,7 @@ msgstr "Наявні резервні копії" msgid "Caution:" msgstr "Обережно:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -630,7 +680,7 @@ msgstr "" "
Щоб відновити резервну копію на новому %(box_name)s Вам потрібні " "облікові дані до SSH та, якщо вибрано, парольна фраза для шифрування." -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "Створити розташування" @@ -762,107 +812,109 @@ msgstr "" msgid "Verify Host" msgstr "Перевірити власника" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "Планування резервного копіювання оновлено." - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "Спланувати резервне копіювання" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "Архів створено." - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "Видалити архів" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "Архів видалено." - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "Вивантажити і відновити резервну копію" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "Завантаження успішне." - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "Не занйдено файлу резервної копії." - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "Відновити з вивантаженого файлу" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "Відновлені файли з резервної копії." - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "Нема доступних дисків для додавання репозиторію." - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "Створити репозиторій резервних копій" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "Додано новий репозиторій." - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "Створити віддалений репозиторій резервних копій" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "Додано новий віддалений SSH-репозиторій." - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "Перевірити ключ власника SSH" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "Власника SSH вже перевірено." - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "Власника SSH перевірено." - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "Публічний ключ власника SSH не можливо перевірити." -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "Не вдалося автентифікуватися на віддаленому сервері." -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "Помилка встановлення зʼєднання зі сервером: {}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "Планування резервного копіювання оновлено." + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "Спланувати резервне копіювання" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "Архів створено." + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "Видалити архів" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "Архів видалено." + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "Вивантажити і відновити резервну копію" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "Завантаження успішне." + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "Не занйдено файлу резервної копії." + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "Відновити з вивантаженого файлу" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "Відновлені файли з резервної копії." + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "Нема доступних дисків для додавання репозиторію." + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "Створити репозиторій резервних копій" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "Додано новий репозиторій." + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "Створити віддалений репозиторій резервних копій" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "Додано новий віддалений SSH-репозиторій." + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "Перевірити ключ власника SSH" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "Власника SSH вже перевірено." + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "Власника SSH перевірено." + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "Репозиторій вилучено." -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "Видалити репозиторій" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "Репозиторій вилучено. Резервні копії не видалено." -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "Не вдалося відмонтувати!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "Не вдалося змонтувати" @@ -943,7 +995,7 @@ msgstr "Дозволи для анонімних користувачів, що #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "Дозволи" @@ -1028,8 +1080,8 @@ msgstr "Показати" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "Видалити" @@ -1105,6 +1157,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "Сервер" @@ -1408,13 +1461,20 @@ msgid "Webserver Home Page" msgstr "Домашня сторінка вебсервера" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "Виберіть типову сторінку, яка має відображатися, коли хтось відвідує Ваш " "{box_name} в Інтернеті. Типовим використанням є встановлення Вашого блоґу " @@ -2022,7 +2082,7 @@ msgid "Invalid domain name" msgstr "Неправильна доменна назва" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "Ім’я користувача" @@ -2313,8 +2373,8 @@ msgstr "XMPP" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "Стан" @@ -2379,9 +2439,13 @@ msgstr "" "адміністратора." #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "
Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Застосунок Roundcube надає " "вебінтерфейс для доступу користувачів до ел. пошти." @@ -3298,8 +3362,8 @@ msgstr "Надіслати відгук" msgid "Contribute" msgstr "Співпрацювати" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "Про FreedomBox" @@ -3954,7 +4018,7 @@ msgstr "Веб-конференція" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Інформація про ліцензію JavaScript" @@ -5169,9 +5233,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "Зміни" @@ -5736,6 +5800,7 @@ msgstr "Видалити зʼєднання" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "Зʼєднання" @@ -5948,6 +6013,7 @@ msgid "Edit Connection" msgstr "Змінити зʼєднання" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "Помилка:" @@ -6155,11 +6221,17 @@ msgstr "" "він перенаправляв увесь отриманий трафік до сервісів, які надає %(box_name)s." #: plinth/modules/networks/templates/router_configuration_content.html:32 +#, fuzzy +#| msgid "" +#| "If you don't have control over your router, choose not to configure it. " +#| "To see options to overcome this limitation, choose 'I dont have a public " +#| "IP address' option in Internet connection type selection." msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" "Якщо Ви не контролюєте свій маршрутизатор, не налаштовуйте його. Щоб " "побачити способи обходу цього обмеження, оберіть параметр 'Я не маю " @@ -6564,6 +6636,40 @@ msgstr "Групова програма" msgid "Password update failed. Please choose a stronger password." msgstr "Не вдалося оновити пароль. Оберіть надійніший пароль." +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Action" +msgid "Application" +msgstr "Дія" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +#, fuzzy +#| msgid "Authorized SSH Keys" +msgid "Authorize App" +msgstr "Ключі SSH для авторизації" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, fuzzy, python-format +#| msgid "Authorized SSH Keys" +msgid "Authorize %(app)s" +msgstr "Ключі SSH для авторизації" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6896,8 +7002,8 @@ msgstr "Перезавантаження" msgid "Shutdown" msgstr "Вимкнення" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Перезапустити" @@ -7698,10 +7804,12 @@ msgid "N/A" msgstr "Н/Д" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "Так" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "Ні" @@ -7982,10 +8090,17 @@ msgstr "" "налаштувань нижче." #: plinth/modules/snapshot/__init__.py:25 +#, fuzzy +#| msgid "" +#| "Snapshots currently work on btrfs file systems only and on the root " +#| "partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +#| "partition. " msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" "Наразі зрізи працюють лише на файлових системах btrfs і розділі root. Зрізи " "не є заміною резервних копій, поки вони " @@ -8336,26 +8451,6 @@ msgstr "Алґоритм" msgid "Fingerprint" msgstr "Відбиток" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "Єдиний вхід" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "Введіть букви з зображення, щоб перейти на сторінку входу" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "Перейти до входу" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "Вхід" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "Вийшли успішно." - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -9254,13 +9349,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "Перейдіть до оновлення розповсюдження" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "Відхилити" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9531,37 +9619,41 @@ msgstr "" msgid "Users and Groups" msgstr "Користувачі і групи" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "Доступ до всіх сервісів і налаштувань системи" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Перевірка запису LDAP \"{search_item}\"" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Перевірте nslcd конфігурацію \"{key} {value}\"" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Перевірте nsswitch конфігурацію \"{database}\"" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "Введіть букви з зображення, щоб перейти на сторінку входу" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "Імʼя користувача зайняте або зарезервоване." -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" "Необов'язково. Використовується для надсилання імейлів для скидання пароля " "та важливих сповіщень." -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -9575,21 +9667,21 @@ msgstr "" "входити в усі сервіси. Вони також можуть входити в систему через SSH і мати " "адміністративні права (sudo)." -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "Уведіть коректне імʼя користувача." -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" "Обовʼязково. 150 знаків, не більше. Лише англійські букви, цифри і @/./-/_." -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "Пароль для авторизації" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." @@ -9597,25 +9689,25 @@ msgstr "" "Уведіть пароль для користувача \"{user}\", щоб авторизувати зміни облікового " "запису." -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "Неправильний пароль." -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "Не вдалося створити користувача LDAP: {error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "Не вдалося додати нового користувача до групи {group}: {error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "Ключі SSH для авторизації" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -9625,11 +9717,11 @@ msgstr "" "систему без використання пароля. Ви можете вказати декілька ключів, один на " "кожен рядок. Порожні рядки і рядки, що починаються на # іґноруються." -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "Видалити користувача" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." @@ -9638,40 +9730,40 @@ msgstr "" "пов’язаних із ним файлів. Видалення файлів можна уникнути, встановивши " "обліковий запис користувача як неактивний." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "Не вдалося видалити користувача." -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "Не вдалося перейменувати користувача LDAP." -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "Не вдалося вилучити користувача з групи." -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "Не вдалося додати користувача до групи." -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "Не можливо задати ключі SSH." -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "Не вдалося змінити стан користувача." -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "Не вдалося змінити пароль користувача LDAP." -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "Не вдалося додати нового користувача до адмінської групи: {error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "Обліковий запис користувача створено, Ви ввійшли в систему" @@ -9683,6 +9775,10 @@ msgstr "Керувати обліковими записами" msgid "App permissions" msgstr "Дозволи програми" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "Перейти до входу" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -9696,7 +9792,7 @@ msgstr "Зберегти пароль" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "Створити користувача" @@ -9747,7 +9843,7 @@ msgid "Skip this step" msgstr "Пропустити цей крок" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "Користувачі" @@ -9756,6 +9852,10 @@ msgstr "Користувачі" msgid "Edit user %(username)s" msgstr "Зміни користувача %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "Вхід" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9797,30 +9897,34 @@ msgstr "Видалити користувача та файли" msgid "Cancel" msgstr "Скасувати" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "Вийшли успішно." + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "Створено користувача %(username)s." -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "Користувача %(username)s оновлено." -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "Зміни користувача" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "Користувача %(username)s видалено." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "Зберегти пароль" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "Пароль змінено успішно." @@ -9852,36 +9956,47 @@ msgstr "" msgid "Invalid key." msgstr "Некоректний ключ." -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "Уведіть коректне імʼя користувача." + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Публічний ключ" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" "Публічний ключ вузла. Приклад: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "Кінцева точка сервера" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" "Назва домену або порт у формі «ip:port». Приклад: demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "Публічний ключ сервера" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -9889,25 +10004,32 @@ msgstr "" "Надається оператором сервера, довгий рядок символів. Приклад: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "Клієнтська IP-адреса надана сервером" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" "IP-адреса, присвоєна цьому комп'ютеру в VPN після під'єднання до кінцевої " "точки. Це значення зазвичай надається оператором сервера. Приклад: " "192.168.0.10." -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "Приватний ключ машини" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9919,11 +10041,11 @@ msgstr "" "спосіб. Однак деякі оператори серверів наполягають на його наданні. Приклад: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "Попередньо спільний ключ" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -9933,11 +10055,11 @@ msgstr "" "додаткового рівня безпеки. Заповнюйте тільки в тому випадку, якщо він " "надається. Приклад: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "Використовуйте це з’єднання для надсилання всього вихідного трафіку" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "Зазвичай перевіряється служба VPN, через яку надсилається весь трафік." @@ -9949,70 +10071,108 @@ msgstr "VPN клієнт" msgid "As a Server" msgstr "Як сервер" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, fuzzy, python-format +#| msgid "Public key for this %(box_name)s:" +msgid "Information for this %(box_name)s:" +msgstr "Публічний ключ для цього %(box_name)s:" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Endpoint" +msgid "Endpoint(s)" +msgstr "Кінцева точка" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "До портів %(box_name)s" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "Вузли дозволені для підʼєднання до сервера:" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "Дозволені IP-адреси" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "Час останнього зʼєднання" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Поки що немає однорангових під'єднань до цього %(box_name)s." -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "Публічний ключ для цього %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "Ще не сконфіґуровано." - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Додати новий вузол" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Додати дозволений клієнт" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server not started yet." +msgstr "Пароль змінено успішно." + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Як клієнт" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Сервери, які %(box_name)s приєднає до:" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Кінцева точка" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Ще не сконфіґуровано зʼєднань до віддалених серверів." -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Додати новий сервер" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Додати зʼєднання зі сервером" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +#, fuzzy +#| msgid "IP address to use for client:" +msgid "IP address that will be assigned to this client" +msgstr "IP-адреса для використання клієнтом:" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "Додати клієнта" @@ -10063,18 +10223,22 @@ msgstr "Кінцеві точки сервера:" msgid "Server public key:" msgstr "Публічний ключ сервера:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 msgid "Data transmitted:" msgstr "Передані дані:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 msgid "Data received:" msgstr "Отримані дані:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "Останнє рукостискання:" @@ -10101,62 +10265,76 @@ msgstr "Публічний ключ цієї машини:" msgid "IP address of this machine:" msgstr "IP-адреса цієї машини:" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "Додано нового клієнта." -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "Клієнт із публічним ключем вже існує" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "Дозволений клієнт" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "Оновлено клієнт." -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "Змінити клієнт" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "Видалити дозволений клієнт" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "Клієнт видалено." -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "Клієнта не знайдено" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "Додано новий сервер." -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "Зʼєднання з сервером" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "Оновлено сервер." -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "Змінити зʼєднання до сервера" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Видалити зʼєднання до сервера" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Сервер видалено." +#: plinth/modules/wireguard/views.py:287 +#, fuzzy +#| msgid "Password changed successfully." +msgid "WireGuard server started successfully." +msgstr "Пароль змінено успішно." + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -10349,6 +10527,24 @@ msgstr "файл конфіґурації: {file}" msgid "Timeout waiting for package manager" msgstr "Час очікування менеджера пакунків" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +#, fuzzy +#| msgid "requesting address" +msgid "View email address" +msgstr "запит адреси" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "Встановлення застосунку" @@ -10516,35 +10712,35 @@ msgstr "" "конфіденційності та володіння даними. Це безплатне програмне забезпечення, " "яке дозволяє легко встановлювати та керувати серверними програмами." -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Домівка" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Застосунки" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " Система" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Змінити пароль" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Вимкнути" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Вийти" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Вибрати мову" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Увійти" @@ -10643,11 +10839,15 @@ msgstr "" "Наразі наступні мережеві інтерфейси налаштовано як внутрішні: " "%(interface_list)s" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "Відхилити" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "Сповіщення" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "%(time_since)s тому" @@ -10809,15 +11009,32 @@ msgstr "тут" msgid "Setting unchanged" msgstr "Налаштування не змінено" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "перед видаленням {app_id}" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "Gujarati" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Пароль для сервера SSH.
Автентифікація на основі SSH-ключа поки не " +#~ "підтримується." + +#~ msgid "Single Sign On" +#~ msgstr "Єдиний вхід" + +#, python-format +#~ msgid "Public key for this %(box_name)s:" +#~ msgstr "Публічний ключ для цього %(box_name)s:" + +#~ msgid "Not configured yet." +#~ msgstr "Ще не сконфіґуровано." + #~ msgid "Minetest" #~ msgstr "Minetest" diff --git a/plinth/locale/vi/LC_MESSAGES/django.po b/plinth/locale/vi/LC_MESSAGES/django.po index c408510d9..75ee0a1da 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2021-07-28 08:34+0000\n" "Last-Translator: bruh \n" "Language-Team: Vietnamese " #: plinth/modules/backups/forms.py:255 +msgid "SSH Authentication Type" +msgstr "" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "Xác thực đến máy chủ trên mạng thất bại." + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "Use HTTP basic authentication" +msgid "Key-based Authentication" +msgstr "Sử dụng xác thực HTTP cơ bản" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "An error occurred during configuration." +msgid "Password-based Authentication" +msgstr "Đã xảy ra lỗi trong khi thiết lập." + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "Mật khẩu máy chủ SSH" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." msgstr "" -"Mật khẩu của máy chủ SSH.
Việc xác thực SSH dựa trên mã khoá là chưa thể " -"làm được." #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "Kho sao lưu trên mạng đã tồn tại." -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "Chọn mã khoá SSH công khai đã xác minh" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "Khôi phục" @@ -556,17 +584,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "Kho đang tồn tại không được mã hoá." -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "Kho lưu trữ {box_name}" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "Tạo một bản sao lưu mới" @@ -602,7 +630,23 @@ msgstr "Thêm vị trí sao lưu trên mạng" msgid "Existing Backups" msgstr "Bản sao lưu đang tồn tại" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -627,7 +671,7 @@ msgstr "Bản sao lưu đang tồn tại" msgid "Caution:" msgstr "Chú ý:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, fuzzy, python-format #| msgid "" #| "The credentials for this repository are stored on your %(box_name)s.
Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3316,8 +3370,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "" @@ -3865,7 +3919,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4960,9 +5014,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5448,6 +5502,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5651,6 +5706,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 #, fuzzy #| msgid "error" @@ -5835,8 +5891,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6214,6 +6270,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application installed." +msgid "Application" +msgstr "Ứng dụng đã được cài đặt." + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6504,8 +6591,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -7177,10 +7264,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7434,8 +7523,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7754,26 +7844,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8556,13 +8626,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8789,35 +8852,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8826,96 +8893,96 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete" msgid "Delete user" msgstr "Xoá" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8931,6 +8998,10 @@ msgstr "Quản lý mật khẩu" msgid "App permissions" msgstr "Quyền" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8944,7 +9015,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8986,7 +9057,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8995,6 +9066,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -9033,31 +9108,35 @@ msgstr "Xoá tệp" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "{name} deleted." msgid "User %(username)s deleted." msgstr "Đã xoá {name}." -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -9084,55 +9163,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9140,22 +9230,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9167,70 +9257,102 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Mount Point" +msgid "Endpoint(s)" +msgstr "Điểm gắn" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -9279,18 +9401,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9314,62 +9440,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9527,6 +9665,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9689,35 +9843,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9812,11 +9966,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9971,15 +10129,22 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "" +#~ "Mật khẩu của máy chủ SSH.
Việc xác thực SSH dựa trên mã khoá là chưa " +#~ "thể làm được." + #, fuzzy, python-brace-format #~| msgid "" #~| "It can be accessed by any user on {box_name} " diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po index 0c253f9bf..f50f4ed52 100644 --- a/plinth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hans/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Plinth\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-16 01:18+0000\n" -"PO-Revision-Date: 2025-12-21 10:00+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" +"PO-Revision-Date: 2026-02-04 06:01+0000\n" "Last-Translator: 大王叫我来巡山 " "\n" "Language-Team: Chinese (Simplified Han script) user@host:~/path/to/repo/" #: plinth/modules/backups/forms.py:255 +#, fuzzy +#| msgid "Authentication Mode" +msgid "SSH Authentication Type" +msgstr "身份验证模式" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "远程服务器认证失败。" + +#: plinth/modules/backups/forms.py:258 +#, fuzzy +#| msgid "needs authentication" +msgid "Key-based Authentication" +msgstr "需要身份验证" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Password-based Authentication" +msgstr "禁用密码验证" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH 服务器密码" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "SSH 服务器的密码。
基于 SSH 密钥的身份验证尚不可能。" +#: plinth/modules/backups/forms.py:262 +#, fuzzy +#| msgid "Disable password authentication" +msgid "Required for password-based authentication." +msgstr "禁用密码验证" #: plinth/modules/backups/forms.py:275 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "禁用密码验证" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "远程备份存储库已存在。" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "选择经过验证的 SSH 公钥" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "恢复" @@ -519,17 +555,17 @@ msgstr "" msgid "Not enough space left on the disk or remote location." msgstr "" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "现有存储库未加密。" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} 存储" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "创建新备份" @@ -565,7 +601,23 @@ msgstr "添加远程备份位置" msgid "Existing Backups" msgstr "现有的备份" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -590,7 +642,7 @@ msgstr "现有的备份" msgid "Caution:" msgstr "注意:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, python-format msgid "" "The credentials for this repository are stored on your %(box_name)s.
" @@ -600,7 +652,7 @@ msgstr "" "这个存储库的凭证存储在你的 %(box_name)s。
要在新的 %(box_name)s 上恢复备" "份,你需要这个 SSH 凭证,如果当时选择了加密,则也需要加密口令。" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "创建存储位置" @@ -726,107 +778,109 @@ msgstr "" msgid "Verify Host" msgstr "核实本地计算机" -#: plinth/modules/backups/views.py:68 -msgid "Backup schedule updated." -msgstr "备份计划已更新。" - -#: plinth/modules/backups/views.py:87 -msgid "Schedule Backups" -msgstr "计划备份" - -#: plinth/modules/backups/views.py:148 -msgid "Archive created." -msgstr "文档已创建。" - -#: plinth/modules/backups/views.py:160 -msgid "Delete Archive" -msgstr "删除文档" - -#: plinth/modules/backups/views.py:173 -msgid "Archive deleted." -msgstr "归档已删除。" - -#: plinth/modules/backups/views.py:187 -msgid "Upload and restore a backup" -msgstr "上传并且储存一个备份" - -#: plinth/modules/backups/views.py:216 -msgid "Upload successful." -msgstr "上传成功。" - -#: plinth/modules/backups/views.py:254 -msgid "No backup file found." -msgstr "没有找到备份文件。" - -#: plinth/modules/backups/views.py:262 -msgid "Restore from uploaded file" -msgstr "从已上传的文件中恢复" - -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 -msgid "Restored files from backup." -msgstr "从备份中恢复了文件。" - -#: plinth/modules/backups/views.py:327 -msgid "No additional disks available to add a repository." -msgstr "没有可增加到信息库的额外可用磁盘。" - -#: plinth/modules/backups/views.py:335 -msgid "Create backup repository" -msgstr "创建备份存储库" - -#: plinth/modules/backups/views.py:350 -msgid "Added new repository." -msgstr "添加新存储库。" - -#: plinth/modules/backups/views.py:364 -msgid "Create remote backup repository" -msgstr "创建远程备份存储库" - -#: plinth/modules/backups/views.py:386 -msgid "Added new remote SSH repository." -msgstr "已添加新的远程 SSH 存储库。" - -#: plinth/modules/backups/views.py:408 -msgid "Verify SSH hostkey" -msgstr "验证 SSH hostkey" - -#: plinth/modules/backups/views.py:434 -msgid "SSH host already verified." -msgstr "SSH 主机已经验证过了。" - -#: plinth/modules/backups/views.py:445 -msgid "SSH host verified." -msgstr "SSH 主机已验证。" - -#: plinth/modules/backups/views.py:461 +#: plinth/modules/backups/views.py:44 msgid "SSH host public key could not be verified." msgstr "SSH 主机的公钥无法被验证。" -#: plinth/modules/backups/views.py:463 +#: plinth/modules/backups/views.py:47 msgid "Authentication to remote server failed." msgstr "远程服务器认证失败。" -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" msgstr "启用到服务器的连接时错误:{}" -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:82 +msgid "Backup schedule updated." +msgstr "备份计划已更新。" + +#: plinth/modules/backups/views.py:101 +msgid "Schedule Backups" +msgstr "计划备份" + +#: plinth/modules/backups/views.py:162 +msgid "Archive created." +msgstr "文档已创建。" + +#: plinth/modules/backups/views.py:174 +msgid "Delete Archive" +msgstr "删除文档" + +#: plinth/modules/backups/views.py:187 +msgid "Archive deleted." +msgstr "归档已删除。" + +#: plinth/modules/backups/views.py:201 +msgid "Upload and restore a backup" +msgstr "上传并且储存一个备份" + +#: plinth/modules/backups/views.py:230 +msgid "Upload successful." +msgstr "上传成功。" + +#: plinth/modules/backups/views.py:268 +msgid "No backup file found." +msgstr "没有找到备份文件。" + +#: plinth/modules/backups/views.py:276 +msgid "Restore from uploaded file" +msgstr "从已上传的文件中恢复" + +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 +msgid "Restored files from backup." +msgstr "从备份中恢复了文件。" + +#: plinth/modules/backups/views.py:341 +msgid "No additional disks available to add a repository." +msgstr "没有可增加到信息库的额外可用磁盘。" + +#: plinth/modules/backups/views.py:349 +msgid "Create backup repository" +msgstr "创建备份存储库" + +#: plinth/modules/backups/views.py:364 +msgid "Added new repository." +msgstr "添加新存储库。" + +#: plinth/modules/backups/views.py:386 +msgid "Create remote backup repository" +msgstr "创建远程备份存储库" + +#: plinth/modules/backups/views.py:412 +msgid "Added new remote SSH repository." +msgstr "已添加新的远程 SSH 存储库。" + +#: plinth/modules/backups/views.py:434 +msgid "Verify SSH hostkey" +msgstr "验证 SSH hostkey" + +#: plinth/modules/backups/views.py:468 +msgid "SSH host already verified." +msgstr "SSH 主机已经验证过了。" + +#: plinth/modules/backups/views.py:475 +msgid "SSH host verified." +msgstr "SSH 主机已验证。" + +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "储存库被移除。" -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "移除存储" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "存储库被删除,备份并没有被删除。" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "卸载失败!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "安装失败" @@ -903,7 +957,7 @@ msgstr "未提供密码的匿名用户的权限。" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "许可" @@ -988,8 +1042,8 @@ msgstr "列表" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "删除" @@ -1063,6 +1117,7 @@ msgstr "DNS" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "服务器" @@ -1351,13 +1406,20 @@ msgid "Webserver Home Page" msgstr "Web 服务器首页" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "选择别人访问你的 {box_name} 时需要看到的默认页面。一个典型用法是,你可以选择" "你的博客或者 Wiki 来作为别人访问域名时的首页。请注意,一旦首页设置到了 " @@ -1928,7 +1990,7 @@ msgid "Invalid domain name" msgstr "无效的域名" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "用户名" @@ -2209,8 +2271,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "状态" @@ -2261,8 +2323,8 @@ msgstr "" #: plinth/modules/email/__init__.py:41 msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" #: plinth/modules/email/__init__.py:43 @@ -3097,8 +3159,8 @@ msgstr "" msgid "Contribute" msgstr "贡献" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "关于" @@ -3667,7 +3729,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4725,9 +4787,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "編輯" @@ -5209,6 +5271,7 @@ msgstr "删除连接" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "连接" @@ -5416,6 +5479,7 @@ msgid "Edit Connection" msgstr "编辑连接" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 msgid "Error:" msgstr "错误:" @@ -5598,8 +5662,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -5971,6 +6035,37 @@ msgstr "群组软件" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "应用程序" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6279,8 +6374,8 @@ msgstr "" msgid "Shutdown" msgstr "关闭" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "重新启动" @@ -6970,10 +7065,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "是" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7225,8 +7322,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7541,26 +7639,6 @@ msgstr "" msgid "Fingerprint" msgstr "指纹" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "登录" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "已成功退出登录。" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8002,7 +8080,7 @@ msgid "" "the Tor network. Do this if you have more than 2 megabits/s of upload and " "download bandwidth." msgstr "" -"启用后,你的 {box_name} 将运行 Tor 中继,并向 Tor 网络分配带宽。如果你的上传" +"启用后,你的 {box_name} 将运行 Tor 中继,并向 Tor 网络捐赠带宽。如果你的上传" "和下载带宽超过 2 MB/s,请执行此操作。" #: plinth/modules/tor/forms.py:101 @@ -8344,13 +8422,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "转到更新分发" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8575,35 +8646,39 @@ msgstr "" msgid "Users and Groups" msgstr "用户和组" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "请检查 LDAP 条目“{search_item}”" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "用户名已经占用或保留。" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8615,44 +8690,44 @@ msgstr "" "单点登录的服务。

管理员(admin)组中的用户将能够登录所有服务。他们还可" "以通过 SSH 登录到系统并具有管理权限(sudo)。" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "输入有效的用户名。" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "验证密码" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "密码无效。" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "创建 LDAP 用户失败:{error}" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "未能将新用户添加到 {group} 组:{error}" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " @@ -8661,50 +8736,50 @@ msgstr "" "设置 SSH 公钥将允许此用户安全地登录到系统不使用密码。你可以输入多个密钥,每行" "一个。将忽略空行和以 # 开头的行。" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 msgid "Delete user" msgstr "删除用户" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "删除用户失败。" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "重命名 LDAP 用户失败。" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "无法从组中删除用户。" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "无法将用户添加到组。" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "不能设置 SSH 密钥。" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "更改用户状态失败。" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "更改 LDAP 用户密码失败。" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "未能将新用户添加到管理员组:{error}" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "用户帐户已创建,你现在可以登录" @@ -8716,6 +8791,10 @@ msgstr "管理账户" msgid "App permissions" msgstr "应用权限" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8729,7 +8808,7 @@ msgstr "保存密码" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "创建用户" @@ -8773,7 +8852,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "用户" @@ -8782,6 +8861,10 @@ msgstr "用户" msgid "Edit user %(username)s" msgstr "编辑用户 %(username)s" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "登录" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8818,30 +8901,34 @@ msgstr "删除用户和文件" msgid "Cancel" msgstr "取消" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "已成功退出登录。" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "用户 %(username)s 已创建。" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "用户 %(username)s 已更新。" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "编辑用户" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." msgstr "用户 %(username)s 已被删除。" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "更改密码" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "已成功更改密码。" @@ -8868,55 +8955,68 @@ msgstr "" msgid "Invalid key." msgstr "无效的密钥。" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +#, fuzzy +#| msgid "Enter a valid username." +msgid "Enter a valid IPv4 address." +msgstr "输入有效的用户名。" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "公钥" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "服务器的公钥" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "服务器提供的客户端 IP 地址" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8924,22 +9024,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8951,70 +9051,105 @@ msgstr "VPN 客户端" msgid "As a Server" msgstr "作为服务器" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +#, fuzzy +#| msgid "Entry point" +msgid "Endpoint(s)" +msgstr "入口点" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, fuzzy, python-format +#| msgid "To %(box_name)s Ports" +msgid "%(box_name)s VPN IP for services" +msgstr "到 %(box_name)s 端口" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "上次连接时间" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +#, fuzzy +#| msgid "WireGuard server started successfully." +msgid "WireGuard server not started yet." +msgstr "WireGuard 服务器启动成功。" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "启动 WireGuard 服务器" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "作为客户端" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "尚未配置到远程服务器的连接。" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "添加到服务器的连接" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "添加客户端" @@ -9063,18 +9198,22 @@ msgstr "服务器端点:" msgid "Server public key:" msgstr "服务器公钥:" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9098,62 +9237,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "已存在有公钥的客户端" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "允许的客户端" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "已更新客户端。" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "更改客户端" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "删除允许的客户端" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "客户端已删除。" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "未找到客户端" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "添加新服务器。" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "连接到服务器" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "已更新服务器。" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "修改到服务器的连接" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "删除与服务器的连接" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "服务器已删除。" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "WireGuard 服务器启动成功。" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9310,6 +9461,22 @@ msgstr "配置文件:{file}" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "安装应用中" @@ -9469,35 +9636,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr " 主页" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " 应用程序" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr " 系统" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "更改密码" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "关闭" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "登出" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "选择语言" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "登录" @@ -9593,11 +9760,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "通知" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9745,15 +9916,20 @@ msgstr "" msgid "Setting unchanged" msgstr "设置未改变" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "古吉拉特语" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "SSH 服务器的密码。
基于 SSH 密钥的身份验证尚不可能。" + #~ msgid "" #~ "Tiny Tiny RSS is a news feed (RSS/Atom) reader and aggregator, designed " #~ "to allow reading news from any location, while feeling as close to a real " @@ -10832,9 +11008,6 @@ msgstr "古吉拉特语" #~ msgid "You don't have any Custom Services enabled" #~ msgstr "你没有启用任何自定义服务" -#~ msgid "Standard Services" -#~ msgstr "标准服务" - #~ msgid "Tor is running" #~ msgstr "Tor 正在运行" @@ -11218,9 +11391,6 @@ msgstr "古吉拉特语" #~ "BitTorrent\n" #~ "(Transmission)" -#~ msgid "Applications" -#~ msgstr "应用程序" - #~ msgid "" #~ "%(box_name)s setup is now complete. To make your %(box_name)s " #~ "functional, you need some applications. They will be installed the first " diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po index d2f596094..bcf85e324 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: 2025-12-16 01:18+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-02-07 12:01+0000\n" "Last-Translator: pesder \n" "Language-Team: Chinese (Traditional Han script) user@host:~/path/to/repo/" #: plinth/modules/backups/forms.py:255 +msgid "SSH Authentication Type" +msgstr "" + +#: plinth/modules/backups/forms.py:256 +#, fuzzy +#| msgid "Authentication to remote server failed." +msgid "Choose how to authenticate to the remote SSH server." +msgstr "俺端主機認證失敗。" + +#: plinth/modules/backups/forms.py:258 +msgid "Key-based Authentication" +msgstr "" + +#: plinth/modules/backups/forms.py:259 +#, fuzzy +#| msgid "An error occurred during configuration." +msgid "Password-based Authentication" +msgstr "設置過程中發生錯誤。" + +#: plinth/modules/backups/forms.py:261 msgid "SSH server password" msgstr "SSH 伺服器密碼" -#: plinth/modules/backups/forms.py:256 -msgid "" -"Password of the SSH Server.
SSH key-based authentication is not yet " -"possible." -msgstr "SSH 伺服器的密碼。
採金鑰的 SSH 認證機制目前無法使用。" +#: plinth/modules/backups/forms.py:262 +msgid "Required for password-based authentication." +msgstr "" #: plinth/modules/backups/forms.py:275 +msgid "SSH password is needed for password-based authentication." +msgstr "" + +#: plinth/modules/backups/forms.py:292 msgid "Remote backup repository already exists." msgstr "異地備份儲存庫已存在。" -#: plinth/modules/backups/forms.py:281 +#: plinth/modules/backups/forms.py:298 msgid "Select verified SSH public key" msgstr "選擇已認證的 SSH 公鑰" #: plinth/modules/backups/manifest.py:14 #: plinth/modules/backups/templates/backups_repository.html:92 #: plinth/modules/backups/templates/backups_restore.html:27 -#: plinth/modules/backups/views.py:238 plinth/modules/snapshot/manifest.py:14 +#: plinth/modules/backups/views.py:252 plinth/modules/snapshot/manifest.py:14 #: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 msgid "Restore" msgstr "備份還原" @@ -524,17 +552,17 @@ msgstr "備份系統正忙於其他操作。" msgid "Not enough space left on the disk or remote location." msgstr "磁碟或遠端位置上沒有足夠的空間。" -#: plinth/modules/backups/repository.py:93 +#: plinth/modules/backups/repository.py:95 msgid "Existing repository is not encrypted." msgstr "現有儲存庫未加密。" -#: plinth/modules/backups/repository.py:241 +#: plinth/modules/backups/repository.py:246 #, python-brace-format msgid "{box_name} storage" msgstr "{box_name} 儲存空間" #: plinth/modules/backups/templates/backups.html:17 -#: plinth/modules/backups/views.py:124 +#: plinth/modules/backups/views.py:138 msgid "Create a new backup" msgstr "建立一個新的備份檔" @@ -570,7 +598,23 @@ msgstr "新增異地備份檔路徑" msgid "Existing Backups" msgstr "現有的備份檔" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:21 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:69 +#, python-format +msgid "" +"The following SSH client public key must be added to the authorized keys " +"list on the remote machine for %(box_name)s to be able to connect to the " +"remote machine:" +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:86 +#, python-format +msgid "" +"%(box_name)s service will attempt to connect using the provided password. If " +"successful, then the public key will be automatically added to the " +"authorized keys list, so that future connections do not need the password." +msgstr "" + +#: plinth/modules/backups/templates/backups_add_remote_repository.html:131 #: plinth/modules/backups/templates/backups_upload.html:28 #: plinth/modules/backups/templates/verify_ssh_hostkey.html:27 #: plinth/modules/diagnostics/templates/diagnostics_full.html:102 @@ -595,7 +639,7 @@ msgstr "現有的備份檔" msgid "Caution:" msgstr "小心:" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:24 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:134 #, fuzzy, python-format #| msgid "" #| "The credentials for this repository are stored on your %(box_name)s.
如果要備份還原到新的 %(box_name)s 您需" "要 SSH 認證和(如果您有設定)加密密碼。" -#: plinth/modules/backups/templates/backups_add_remote_repository.html:34 +#: plinth/modules/backups/templates/backups_add_remote_repository.html:144 msgid "Create Location" msgstr "建立儲存路徑" @@ -745,111 +789,113 @@ msgstr "" msgid "Verify Host" msgstr "校驗主機" -#: plinth/modules/backups/views.py:68 +#: plinth/modules/backups/views.py:44 +msgid "SSH host public key could not be verified." +msgstr "SSH 主機公鑰無法被校驗。" + +#: plinth/modules/backups/views.py:47 +msgid "Authentication to remote server failed." +msgstr "俺端主機認證失敗。" + +#: plinth/modules/backups/views.py:50 +#, fuzzy +#| msgid "Error establishing connection to server: {}" +msgid "Error establishing connection to server: {} {} {}" +msgstr "建立連絡到伺服器時發生錯誤︰{}" + +#: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." msgstr "備份排程已更新。" -#: plinth/modules/backups/views.py:87 +#: plinth/modules/backups/views.py:101 msgid "Schedule Backups" msgstr "排程備份" -#: plinth/modules/backups/views.py:148 +#: plinth/modules/backups/views.py:162 msgid "Archive created." msgstr "封存已建立。" -#: plinth/modules/backups/views.py:160 +#: plinth/modules/backups/views.py:174 msgid "Delete Archive" msgstr "刪除封存" -#: plinth/modules/backups/views.py:173 +#: plinth/modules/backups/views.py:187 msgid "Archive deleted." msgstr "封存已刪除。" -#: plinth/modules/backups/views.py:187 +#: plinth/modules/backups/views.py:201 msgid "Upload and restore a backup" msgstr "上傳和恢復備份檔" -#: plinth/modules/backups/views.py:216 +#: plinth/modules/backups/views.py:230 #, fuzzy #| msgid "Upload file" msgid "Upload successful." msgstr "上傳檔案" -#: plinth/modules/backups/views.py:254 +#: plinth/modules/backups/views.py:268 msgid "No backup file found." msgstr "沒有找到備份檔。" -#: plinth/modules/backups/views.py:262 +#: plinth/modules/backups/views.py:276 msgid "Restore from uploaded file" msgstr "從上傳的檔案中恢復" -#: plinth/modules/backups/views.py:276 plinth/modules/backups/views.py:297 +#: plinth/modules/backups/views.py:290 plinth/modules/backups/views.py:311 msgid "Restored files from backup." msgstr "從備份中恢復檔案。" -#: plinth/modules/backups/views.py:327 +#: plinth/modules/backups/views.py:341 msgid "No additional disks available to add a repository." msgstr "無多餘的磁碟可取得用以新增資料庫。" -#: plinth/modules/backups/views.py:335 +#: plinth/modules/backups/views.py:349 msgid "Create backup repository" msgstr "建立備份資料庫" -#: plinth/modules/backups/views.py:350 +#: plinth/modules/backups/views.py:364 #, fuzzy #| msgid "Added new remote SSH repository." msgid "Added new repository." msgstr "新增遠端 SSH 資料庫。" -#: plinth/modules/backups/views.py:364 +#: plinth/modules/backups/views.py:386 msgid "Create remote backup repository" msgstr "建立遠端備份資料庫" -#: plinth/modules/backups/views.py:386 +#: plinth/modules/backups/views.py:412 msgid "Added new remote SSH repository." msgstr "新增遠端 SSH 資料庫。" -#: plinth/modules/backups/views.py:408 +#: plinth/modules/backups/views.py:434 msgid "Verify SSH hostkey" msgstr "校驗 SSH 主機密鑰" -#: plinth/modules/backups/views.py:434 +#: plinth/modules/backups/views.py:468 msgid "SSH host already verified." msgstr "SSH 主機已驗證。" -#: plinth/modules/backups/views.py:445 +#: plinth/modules/backups/views.py:475 msgid "SSH host verified." msgstr "SSH 主機較驗成功。" -#: plinth/modules/backups/views.py:461 -msgid "SSH host public key could not be verified." -msgstr "SSH 主機公鑰無法被校驗。" - -#: plinth/modules/backups/views.py:463 -msgid "Authentication to remote server failed." -msgstr "俺端主機認證失敗。" - -#: plinth/modules/backups/views.py:465 -msgid "Error establishing connection to server: {}" -msgstr "建立連絡到伺服器時發生錯誤︰{}" - -#: plinth/modules/backups/views.py:476 +#: plinth/modules/backups/views.py:490 msgid "Repository removed." msgstr "資料庫已移除。" -#: plinth/modules/backups/views.py:490 +#: plinth/modules/backups/views.py:504 msgid "Remove Repository" msgstr "移除資料庫" -#: plinth/modules/backups/views.py:500 +#: plinth/modules/backups/views.py:514 msgid "Repository removed. Backups were not deleted." msgstr "資料庫已移除。 備份並未被刪除。" -#: plinth/modules/backups/views.py:511 +#: plinth/modules/backups/views.py:525 msgid "Unmounting failed!" msgstr "取消掛載失敗!" -#: plinth/modules/backups/views.py:527 plinth/modules/backups/views.py:531 +#: plinth/modules/backups/views.py:542 plinth/modules/backups/views.py:546 msgid "Mounting failed" msgstr "掛載失敗" @@ -926,7 +972,7 @@ msgstr "匿名使用者的權限,不需提供密碼。" #: plinth/modules/bepasty/forms.py:27 #: plinth/modules/bepasty/templates/bepasty.html:30 -#: plinth/modules/users/forms.py:104 +#: plinth/modules/users/forms.py:125 msgid "Permissions" msgstr "權限" @@ -1013,8 +1059,8 @@ msgstr "清單" #: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:34 #: plinth/modules/wireguard/templates/wireguard_delete_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:35 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:77 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:78 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:81 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:89 msgid "Delete" msgstr "刪除" @@ -1090,6 +1136,7 @@ msgstr "啟用域名系統安全擴充 DNSSEC" #: plinth/modules/bind/manifest.py:17 plinth/modules/mumble/manifest.py:67 #: plinth/modules/radicale/manifest.py:91 #: plinth/modules/shadowsocks/forms.py:24 +#: plinth/modules/wireguard/templates/wireguard.html:13 msgid "Server" msgstr "" @@ -1391,13 +1438,20 @@ msgid "Webserver Home Page" msgstr "網頁伺服器首頁" #: plinth/modules/config/forms.py:37 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "" +#| "Choose the default page that must be served when someone visits your " +#| "{box_name} on the web. A typical use case is to set your blog or wiki as " +#| "the home page when someone visits the domain name. Note that once the " +#| "home page is set to something other than {box_name} Service (Plinth), " +#| "your users must explicitly type /plinth or /freedombox to reach " +#| "{box_name} Service (Plinth)." msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " "home page when someone visits the domain name. Note that once the home page " "is set to something other than {box_name} Service (Plinth), your users must " -"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." +"explicitly type /freedombox to reach {box_name} Service (Plinth)." msgstr "" "選擇別人參訪您的 {box_name} 時要提供的預設頁面。通常的用法是設定您的部落格或" "維基當作別人參訪此網域時的首頁。請注意一旦設定不是 {box_name} 的首頁,您的使" @@ -1988,7 +2042,7 @@ msgid "Invalid domain name" msgstr "無效的網域名稱" #: plinth/modules/dynamicdns/forms.py:82 plinth/modules/miniflux/forms.py:11 -#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:130 +#: plinth/modules/networks/forms.py:281 plinth/modules/users/forms.py:151 msgid "Username" msgstr "使用者名稱" @@ -2295,8 +2349,8 @@ msgstr "" #: plinth/modules/samba/templates/samba.html:67 #: plinth/modules/tor/templates/tor.html:24 #: plinth/modules/upgrades/templates/upgrades_configure.html:19 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:48 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:47 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:52 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:58 msgid "Status" msgstr "狀態" @@ -2341,9 +2395,13 @@ msgid "" msgstr "" #: plinth/modules/email/__init__.py:41 +#, fuzzy +#| msgid "" +#| "Roundcube app provides web " +#| "interface for users to access email." msgid "" -"Roundcube app provides web interface " -"for users to access email." +"Roundcube app provides web " +"interface for users to access email." msgstr "" "Roundcube 應用程式 提供使用者存取電子" "郵件的 Web 介面。" @@ -3215,8 +3273,8 @@ msgstr "" msgid "Contribute" msgstr "" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:221 -#: plinth/templates/base.html:224 plinth/templates/help-menu.html:46 +#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:223 +#: plinth/templates/base.html:226 plinth/templates/help-menu.html:46 #: plinth/templates/help-menu.html:47 plinth/templates/index.html:96 msgid "About" msgstr "關於" @@ -3764,7 +3822,7 @@ msgstr "" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:277 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -4854,9 +4912,9 @@ msgstr "" #: plinth/modules/names/templates/names.html:41 #: plinth/modules/networks/templates/connection_show.html:40 -#: plinth/modules/wireguard/templates/wireguard_show_client.html:72 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:73 -#: plinth/templates/base.html:171 plinth/templates/base.html:172 +#: plinth/modules/wireguard/templates/wireguard_show_client.html:76 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:84 +#: plinth/templates/base.html:173 plinth/templates/base.html:174 msgid "Edit" msgstr "" @@ -5344,6 +5402,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:22 #: plinth/modules/networks/templates/connections_diagram.html:51 #: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:17 msgid "Connection" msgstr "" @@ -5547,6 +5606,7 @@ msgid "Edit Connection" msgstr "" #: plinth/modules/networks/templates/connections_fields.html:13 +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:64 #: plinth/templates/messages.html:14 #, fuzzy #| msgid "error" @@ -5731,8 +5791,8 @@ msgstr "" msgid "" "If you don't have control over your router, choose not to configure it. To " "see options to overcome this limitation, choose 'I dont have a public IP " -"address' option in Internet connection type selection." +"address' option in Internet connection type selection." msgstr "" #: plinth/modules/networks/templates/router_configuration_content.html:39 @@ -6110,6 +6170,37 @@ msgstr "" msgid "Password update failed. Please choose a stronger password." msgstr "" +#: plinth/modules/oidc/__init__.py:56 +msgid "OpenID Connect Provider" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 +#, fuzzy +#| msgid "Application installed." +msgid "Application" +msgstr "應用已完成安裝。" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22 +msgid "Authorize App" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37 +#, python-format +msgid "" +"%(app)s wants to access your account %(username)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52 +#, python-format +msgid "Authorize %(app)s" +msgstr "" + +#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59 +#, python-format +msgid "Authorizing will redirect to %(url)s" +msgstr "" + #: plinth/modules/openvpn/__init__.py:20 #, python-brace-format msgid "" @@ -6400,8 +6491,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:186 -#: plinth/templates/base.html:187 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -7075,10 +7166,12 @@ msgid "N/A" msgstr "" #: plinth/modules/security/templates/security_report.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:48 msgid "Yes" msgstr "" #: plinth/modules/security/templates/security_report.html:62 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:50 msgid "No" msgstr "" @@ -7330,8 +7423,9 @@ msgstr "" #: plinth/modules/snapshot/__init__.py:25 msgid "" "Snapshots currently work on btrfs file systems only and on the root " -"partition only. Snapshots are not a replacement for backups since they can only be stored on the same partition. " +"partition only. Snapshots are not a replacement for backups since they can only be stored on the same " +"partition. " msgstr "" #: plinth/modules/snapshot/__init__.py:50 @@ -7654,26 +7748,6 @@ msgstr "" msgid "Fingerprint" msgstr "" -#: plinth/modules/sso/__init__.py:27 -msgid "Single Sign On" -msgstr "" - -#: plinth/modules/sso/forms.py:28 -msgid "Enter the letters in the image to proceed to the login page" -msgstr "" - -#: plinth/modules/sso/templates/captcha.html:20 -msgid "Proceed to Login" -msgstr "" - -#: plinth/modules/sso/templates/login.html:23 -msgid "Login" -msgstr "" - -#: plinth/modules/sso/views.py:86 -msgid "Logged out successfully." -msgstr "" - #: plinth/modules/storage/__init__.py:24 #, python-brace-format msgid "" @@ -8453,13 +8527,6 @@ msgstr "" msgid "Go to Distribution Update" msgstr "" -#: plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 -#: plinth/modules/upgrades/templates/upgrades-new-release.html:22 -#: plinth/templates/notifications.html:58 -#: plinth/templates/operation-notification.html:23 -msgid "Dismiss" -msgstr "" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -8686,35 +8753,39 @@ msgstr "" msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:86 +#: plinth/modules/users/__init__.py:90 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:139 +#: plinth/modules/users/__init__.py:143 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:154 +#: plinth/modules/users/__init__.py:158 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:184 +#: plinth/modules/users/__init__.py:188 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" -#: plinth/modules/users/forms.py:36 +#: plinth/modules/users/forms.py:46 +msgid "Enter the letters in the image to proceed to the login page" +msgstr "" + +#: plinth/modules/users/forms.py:57 msgid "Username is taken or is reserved." msgstr "" -#: plinth/modules/users/forms.py:71 +#: plinth/modules/users/forms.py:92 msgid "" "Optional. Used to send emails to reset password and important notifications." msgstr "" -#: plinth/modules/users/forms.py:107 +#: plinth/modules/users/forms.py:128 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " @@ -8723,96 +8794,96 @@ msgid "" "SSH and have administrative privileges (sudo)." msgstr "" -#: plinth/modules/users/forms.py:125 +#: plinth/modules/users/forms.py:146 msgid "Enter a valid username." msgstr "" -#: plinth/modules/users/forms.py:132 +#: plinth/modules/users/forms.py:153 msgid "" "Required. 150 characters or fewer. English letters, digits and @/./-/_ only." msgstr "" -#: plinth/modules/users/forms.py:141 +#: plinth/modules/users/forms.py:162 msgid "Authorization Password" msgstr "" -#: plinth/modules/users/forms.py:148 +#: plinth/modules/users/forms.py:169 #, python-brace-format msgid "" "Enter the password for user \"{user}\" to authorize account modifications." msgstr "" -#: plinth/modules/users/forms.py:157 +#: plinth/modules/users/forms.py:178 msgid "Invalid password." msgstr "" -#: plinth/modules/users/forms.py:213 plinth/modules/users/forms.py:439 +#: plinth/modules/users/forms.py:234 plinth/modules/users/forms.py:460 #, python-brace-format msgid "Creating LDAP user failed: {error}" msgstr "" -#: plinth/modules/users/forms.py:225 +#: plinth/modules/users/forms.py:246 #, python-brace-format msgid "Failed to add new user to {group} group: {error}" msgstr "" -#: plinth/modules/users/forms.py:241 +#: plinth/modules/users/forms.py:262 msgid "Authorized SSH Keys" msgstr "" -#: plinth/modules/users/forms.py:243 +#: plinth/modules/users/forms.py:264 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" -#: plinth/modules/users/forms.py:252 +#: plinth/modules/users/forms.py:273 #, fuzzy #| msgid "Delete" msgid "Delete user" msgstr "刪除" -#: plinth/modules/users/forms.py:254 +#: plinth/modules/users/forms.py:275 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." msgstr "" -#: plinth/modules/users/forms.py:320 +#: plinth/modules/users/forms.py:341 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:331 +#: plinth/modules/users/forms.py:352 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:341 +#: plinth/modules/users/forms.py:362 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:348 +#: plinth/modules/users/forms.py:369 msgid "Unable to set SSH keys." msgstr "" -#: plinth/modules/users/forms.py:361 +#: plinth/modules/users/forms.py:382 msgid "Failed to change user status." msgstr "" -#: plinth/modules/users/forms.py:402 +#: plinth/modules/users/forms.py:423 msgid "Changing LDAP user password failed." msgstr "" -#: plinth/modules/users/forms.py:447 +#: plinth/modules/users/forms.py:468 #, python-brace-format msgid "Failed to add new user to admin group: {error}" msgstr "" -#: plinth/modules/users/forms.py:470 +#: plinth/modules/users/forms.py:491 msgid "User account created, you are now logged in" msgstr "" @@ -8828,6 +8899,10 @@ msgstr "管理密碼" msgid "App permissions" msgstr "權限" +#: plinth/modules/users/templates/users_captcha.html:20 +msgid "Proceed to Login" +msgstr "" + #: plinth/modules/users/templates/users_change_password.html:11 #, python-format msgid "Change Password for %(username)s" @@ -8841,7 +8916,7 @@ msgstr "" #: plinth/modules/users/templates/users_create.html:19 #: plinth/modules/users/templates/users_list.html:15 #: plinth/modules/users/templates/users_list.html:17 -#: plinth/modules/users/views.py:43 +#: plinth/modules/users/views.py:109 msgid "Create User" msgstr "" @@ -8883,7 +8958,7 @@ msgid "Skip this step" msgstr "" #: plinth/modules/users/templates/users_list.html:11 -#: plinth/modules/users/views.py:61 +#: plinth/modules/users/views.py:127 msgid "Users" msgstr "" @@ -8892,6 +8967,10 @@ msgstr "" msgid "Edit user %(username)s" msgstr "" +#: plinth/modules/users/templates/users_login.html:23 +msgid "Login" +msgstr "" + #: plinth/modules/users/templates/users_update.html:17 #, python-format msgid "Edit User %(username)s" @@ -8930,31 +9009,35 @@ msgstr "刪除檔案" msgid "Cancel" msgstr "" -#: plinth/modules/users/views.py:41 +#: plinth/modules/users/views.py:87 +msgid "Logged out successfully." +msgstr "" + +#: plinth/modules/users/views.py:107 #, python-format msgid "User %(username)s created." msgstr "" -#: plinth/modules/users/views.py:72 +#: plinth/modules/users/views.py:138 #, python-format msgid "User %(username)s updated." msgstr "" -#: plinth/modules/users/views.py:73 +#: plinth/modules/users/views.py:139 msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:111 +#: plinth/modules/users/views.py:177 #, fuzzy, python-format #| msgid "{name} deleted." msgid "User %(username)s deleted." msgstr "{name} 已刪除。" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:196 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:131 +#: plinth/modules/users/views.py:197 msgid "Password changed successfully." msgstr "" @@ -8981,55 +9064,66 @@ msgstr "" msgid "Invalid key." msgstr "" -#: plinth/modules/wireguard/forms.py:61 -#: plinth/modules/wireguard/templates/wireguard.html:17 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: plinth/modules/wireguard/forms.py:63 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: plinth/modules/wireguard/forms.py:65 +msgid "Enter a valid network prefix or net mask." +msgstr "" + +#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/templates/wireguard.html:28 +#: plinth/modules/wireguard/templates/wireguard.html:56 +#: plinth/modules/wireguard/templates/wireguard.html:118 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:62 +#: plinth/modules/wireguard/forms.py:72 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:70 +#: plinth/modules/wireguard/forms.py:80 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:81 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:76 +#: plinth/modules/wireguard/forms.py:86 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:77 +#: plinth/modules/wireguard/forms.py:87 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:82 +#: plinth/modules/wireguard/forms.py:92 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:83 +#: plinth/modules/wireguard/forms.py:94 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10." +"192.168.0.10. You can also specify the network. This will allow reaching " +"machines in the network. Examples: 10.68.12.43/24 or " +"10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:89 +#: plinth/modules/wireguard/forms.py:102 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:90 +#: plinth/modules/wireguard/forms.py:103 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9037,22 +9131,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:98 +#: plinth/modules/wireguard/forms.py:111 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:99 +#: plinth/modules/wireguard/forms.py:112 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:105 +#: plinth/modules/wireguard/forms.py:118 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:107 +#: plinth/modules/wireguard/forms.py:120 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9064,70 +9158,100 @@ msgstr "" msgid "As a Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:12 +#: plinth/modules/wireguard/templates/wireguard.html:16 +#, python-format +msgid "Information for this %(box_name)s:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:24 +msgid "Property" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:25 +msgid "Value" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:32 +msgid "Endpoint(s)" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:40 +#, python-format +msgid "%(box_name)s VPN IP for services" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:49 +msgid "Peers" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:51 msgid "Peers allowed to connect to this server:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:18 +#: plinth/modules/wireguard/templates/wireguard.html:57 msgid "Allowed IPs" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:19 -#: plinth/modules/wireguard/templates/wireguard.html:78 +#: plinth/modules/wireguard/templates/wireguard.html:58 +#: plinth/modules/wireguard/templates/wireguard.html:119 msgid "Last Connected Time" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:38 +#: plinth/modules/wireguard/templates/wireguard.html:77 #, python-format msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:48 -#, python-format -msgid "Public key for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:54 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:63 -#: plinth/modules/wireguard/views.py:48 +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:67 +#: plinth/modules/wireguard/templates/wireguard.html:96 +msgid "WireGuard server not started yet." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:102 +msgid "Start WireGuard Server" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:69 +#: plinth/modules/wireguard/templates/wireguard.html:110 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:76 +#: plinth/modules/wireguard/templates/wireguard.html:117 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:100 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:110 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:114 -#: plinth/modules/wireguard/views.py:157 +#: plinth/modules/wireguard/templates/wireguard.html:155 +#: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_add_client.html:19 +#: plinth/modules/wireguard/templates/wireguard_add_client.html:21 +msgid "IP address that will be assigned to this client" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_add_client.html:31 msgid "Add Client" msgstr "" @@ -9176,18 +9300,22 @@ msgstr "" msgid "Server public key:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard_show_client.html:53 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:52 -msgid "Data transmitted:" +#: plinth/modules/wireguard/templates/wireguard_show_client.html:45 +msgid "Server VPN IP address for services:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:57 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:56 -msgid "Data received:" +#: plinth/modules/wireguard/templates/wireguard_show_server.html:63 +msgid "Data transmitted:" msgstr "" #: plinth/modules/wireguard/templates/wireguard_show_client.html:61 -#: plinth/modules/wireguard/templates/wireguard_show_server.html:60 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:67 +msgid "Data received:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_show_client.html:65 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:71 msgid "Latest handshake:" msgstr "" @@ -9211,62 +9339,74 @@ msgstr "" msgid "IP address of this machine:" msgstr "" -#: plinth/modules/wireguard/views.py:43 +#: plinth/modules/wireguard/templates/wireguard_show_server.html:45 +msgid "All outgoing traffic is sent using this connection:" +msgstr "" + +#: plinth/modules/wireguard/views.py:54 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:58 plinth/modules/wireguard/views.py:117 +#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:71 +#: plinth/modules/wireguard/views.py:92 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:93 +#: plinth/modules/wireguard/views.py:114 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:98 +#: plinth/modules/wireguard/views.py:119 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:131 +#: plinth/modules/wireguard/views.py:152 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:140 +#: plinth/modules/wireguard/views.py:161 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:142 +#: plinth/modules/wireguard/views.py:163 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:173 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:194 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:191 +#: plinth/modules/wireguard/views.py:212 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:196 +#: plinth/modules/wireguard/views.py:217 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:233 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:253 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" +#: plinth/modules/wireguard/views.py:287 +msgid "WireGuard server started successfully." +msgstr "" + +#: plinth/modules/wireguard/views.py:291 +msgid "Failed to start WireGuard server: {}" +msgstr "" + #: plinth/modules/wordpress/__init__.py:20 msgid "" "WordPress is a popular way to create and manage websites and blogs. Content " @@ -9424,6 +9564,22 @@ msgstr "" msgid "Timeout waiting for package manager" msgstr "" +#: plinth/settings.py:181 +msgid "Uniquely identify your user account with username" +msgstr "" + +#: plinth/settings.py:183 +msgid "View email address" +msgstr "" + +#: plinth/settings.py:185 +msgid "View basic profile information (such as name and email)" +msgstr "" + +#: plinth/settings.py:187 +msgid "View permissions that account has" +msgstr "" + #: plinth/setup.py:44 msgid "Installing app" msgstr "" @@ -9586,35 +9742,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:120 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:128 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:137 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:178 plinth/templates/base.html:179 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:192 plinth/templates/base.html:193 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:203 plinth/templates/base.html:241 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:212 plinth/templates/base.html:215 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:230 plinth/templates/base.html:232 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9707,11 +9863,15 @@ msgid "" "%(interface_list)s" msgstr "" +#: plinth/templates/notifications-dismiss-button.html:11 +msgid "Dismiss" +msgstr "" + #: plinth/templates/notifications-dropdown.html:11 msgid "Notifications" msgstr "" -#: plinth/templates/notifications.html:18 +#: plinth/templates/notifications.html:19 #, python-format msgid "%(time_since)s ago" msgstr "" @@ -9869,15 +10029,20 @@ msgstr "" msgid "Setting unchanged" msgstr "" -#: plinth/views.py:658 +#: plinth/views.py:654 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" +#~ msgid "" +#~ "Password of the SSH Server.
SSH key-based authentication is not yet " +#~ "possible." +#~ msgstr "SSH 伺服器的密碼。
採金鑰的 SSH 認證機制目前無法使用。" + #, fuzzy, python-brace-format #~| msgid "" #~| "It can be accessed by any user on {box_name} " diff --git a/plinth/middleware.py b/plinth/middleware.py index 13e39d7e9..aeee61853 100644 --- a/plinth/middleware.py +++ b/plinth/middleware.py @@ -4,6 +4,7 @@ Common Django middleware. """ import logging +import re from django import urls from django.conf import settings @@ -58,7 +59,9 @@ class SetupMiddleware(MiddlewareMixin): except urls.Resolver404: return - if not resolver_match.namespaces or not len(resolver_match.namespaces): + non_app_namespaces = {'oauth2_provider'} + if (not resolver_match.namespaces or not len(resolver_match.namespaces) + or (set(resolver_match.namespaces) & non_app_namespaces)): # Requested URL does not belong to any application return @@ -99,10 +102,17 @@ class AdminRequiredMiddleware(MiddlewareMixin): hasattr(view_func, 'IS_NON_ADMIN'): return - if not is_user_admin(request): - if not AdminRequiredMiddleware.check_user_group( - view_func, request): - raise PermissionDenied + public_urls = settings.STRONGHOLD_PUBLIC_URLS + if any(re.match(url, request.path_info) for url in public_urls): + return + + if is_user_admin(request): + return + + if AdminRequiredMiddleware.check_user_group(view_func, request): + return + + raise PermissionDenied class FirstSetupMiddleware(MiddlewareMixin): diff --git a/plinth/modules/apache/__init__.py b/plinth/modules/apache/__init__.py index a73483c76..c64793f21 100644 --- a/plinth/modules/apache/__init__.py +++ b/plinth/modules/apache/__init__.py @@ -1,16 +1,79 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -"""FreedomBox app for Apache server.""" +"""FreedomBox app for Apache server. +This module implements a mechanism for protecting various URL paths using +FreedomBox's OpenID Connect implementation as Identity Provider and +mod_auth_oidc as Relying Party. The following is a simplified description of +how the flow works: + +- User accesses the URL /foo using a browser. /foo is a URL path which is + protected by this module's OpenID Connect SSO (using AuthType + openid-connect). + +- mod_auth_opendic seizes control and checks for authorization. Since this is + the first visit, it starts the authentication/authorization process. It first + redirects the browser to provider discovery URL + /freedombox/apache/discover-idp/. + +- This URL selects and Identity Provider based on incoming URL's host header. + It will select https://mydomain.example/freedombox/o as IDP if the original + URL is https://mydomain.example/foo. Or https://freedombox.local/freedombox/o + if the original URL is https://freedombox.local/foo. After selection it will + redirect the browser back to /apache/oidc/callback with the selected IDP in + the GET parameters. + +- /apache/oidc/callback is controlled by mod_auth_openidc which receives the + IDP selection. It will then query the IDP for further information such as + authorization URL, token URL, supported scopes and claims. This is done using + a backend call to /freedombox/o/.well-known/openid-configuration. + +- After determining the authorization end point (/freedombox/o/authorize/) from + the metadata, mod_auth_openidc will start the authentication/authorization + process by redirecting the browser to the URL. + +- FreedomBox shows login page if the user is not already logged in. User logs + in. + +- FreedomBox will show a page asking the user to authorize the application to + access information such as name and email. In case of Apache's + mod_auth_openidc, this is skipped. + +- FreedomBox will redirect back to /apache/oidc/callback after various checks. + This request will contain authorization grant token and OIDC claims in + parameters. + +- mod_auth_openidc connects using back channel HTTP call to token endpoint + (/freedombox/o/token/) with the authorization grant token and then obtains + access token and refresh token. OIDC claims are checked using client_secret + known only to FreedomBox IDP and mod_auth_openidc. + +- The OIDC claims contains username as part of 'sub' claim. This is exported as + REMOTE_USER header. 'freedombox_groups' contains the list of groups that + FreedomBox account is part of. These, along with 'Require claim' Apache + configuration directives, are used to determine if the user should get access + to /foo path or not. + +- The application providing /foo will have access to information such username + and groups as part of REMOTE_USER and other OIDC_* environment variables. + +- mod_auth_openidc also sets cookies that ensure that the whole process is not + repeated when a second request for the path /foo is received. +""" + +import ipaddress import os from django.utils.translation import gettext_lazy as _ +from plinth import action_utils from plinth import app as app_module from plinth import cfg from plinth.config import DropinConfigs from plinth.daemon import Daemon, RelatedDaemon +from plinth.modules import names from plinth.modules.firewall.components import Firewall from plinth.modules.letsencrypt.components import LetsEncrypt +from plinth.modules.oidc.components import OpenIDConnect from plinth.package import Packages from plinth.signals import domain_added, domain_removed from plinth.utils import format_lazy, is_valid_user_name @@ -23,7 +86,7 @@ class ApacheApp(app_module.App): app_id = 'apache' - _version = 14 + _version = 15 def __init__(self) -> None: """Create components for the app.""" @@ -34,11 +97,13 @@ class ApacheApp(app_module.App): self.add(info) packages = Packages('packages-apache', [ - 'apache2', 'php-fpm', 'ssl-cert', 'uwsgi', 'uwsgi-plugin-python3' + 'apache2', 'php-fpm', 'ssl-cert', 'uwsgi', 'uwsgi-plugin-python3', + 'libapache2-mod-auth-openidc' ]) self.add(packages) dropin_configs = DropinConfigs('dropin-configs-apache', [ + '/etc/apache2/conf-available/10-freedombox.conf', '/etc/apache2/conf-available/php-fpm-freedombox.conf', '/etc/fail2ban/jail.d/apache-auth-freedombox.conf', ]) @@ -59,6 +124,13 @@ class ApacheApp(app_module.App): daemons=['apache2'], reload_daemons=True) self.add(letsencrypt) + openidconnect = OpenIDConnect( + 'openidconnect-apache', 'apache', + _('Web app protected by FreedomBox'), + redirect_uris=['https://{domain}/apache/oidc/callback'], + skip_authorization=True) + self.add(openidconnect) + daemon = Daemon('daemon-apache', 'apache2') self.add(daemon) @@ -78,6 +150,43 @@ class ApacheApp(app_module.App): self.enable() +def validate_host(hostname: str): + """Check whether we are allowed to be called by a given name. + + This is to prevent DNS rebinding attacks and other poor consequences in the + OpenID Connect protoctol. + """ + if hostname in ('localhost', 'ip6-localhost', 'ip6-loopback'): + return + + if hostname == action_utils.get_hostname(): + return + + if hostname in names.components.DomainName.list_names(): + return + + try: + ipaddress.ip_address(hostname) + return + except ValueError: + pass + + raise ValueError(f'Server not configured to be called as {hostname}') + + +def setup_oidc_client(netloc: str, hostname: str): + """Setup OpenID Connect client configuration. + + netloc is hostname or IP address along with port as parsed by + urllib.parse.urlparse() method from a URL. + """ + validate_host(hostname) + + oidc = app_module.App.get('apache').get_component('openidconnect-apache') + privileged.setup_oidc_client(netloc, oidc.client_id, + oidc.get_client_secret()) + + def _on_domain_added(sender, domain_type, name='', description='', services=None, **kwargs): """Add site specific configuration for a domain.""" diff --git a/plinth/modules/apache/components.py b/plinth/modules/apache/components.py index 64df03437..e9149add2 100644 --- a/plinth/modules/apache/components.py +++ b/plinth/modules/apache/components.py @@ -301,7 +301,19 @@ def check_url(url: str, kind: str | None = None, wrapper: str | None = None, expected_output: str | None = None) -> bool: """Check whether a URL is accessible.""" - command = ['curl', '--location', '-f', '-w', '%{response_code}'] + # When testing a URL with cURL, following any redirections with --location. + # During those follows, store cookies that have been set and use them for + # later requests. mod_auth_openidc will set a cookie 'x_csrf' to prevent + # CSRF attacks and expect this cookie to sent back to it in later requests. + # If this cookie is not present, it will refuse to perform OIDC Discovery + # process resulting 404 errors and diagnostic failures for domains that + # have not been visited by a user recently. --cookie '' means the cURL will + # use an in-process cookie-jar for storing and retrieving cookies without + # writing to a file on the disk. + command = [ + 'curl', '--location', '--cookie', '', '--fail', '--write-out', + '%{response_code}' + ] if kind == '6': # extract zone index diff --git a/plinth/modules/apache/data/usr/share/freedombox/etc/apache2/conf-available/10-freedombox.conf b/plinth/modules/apache/data/usr/share/freedombox/etc/apache2/conf-available/10-freedombox.conf new file mode 100644 index 000000000..33e8f03c8 --- /dev/null +++ b/plinth/modules/apache/data/usr/share/freedombox/etc/apache2/conf-available/10-freedombox.conf @@ -0,0 +1,28 @@ +## SPDX-License-Identifier: AGPL-3.0-or-later +## +## DO NOT EDIT. If you do, FreedomBox will not automatically upgrade. +## +## Apache configuration managed by FreedomBox. If customization is needed, +## create a new configuration file with higher priority and override directives. +## + +## +## Macro to protect directories or locations (potentially backed by application +## proxies) with OpenID Connect. To use the macro add 'Use AuthOpenIDConnect'. +## By default, the visitor will need to be part of the 'admin' group to be able +## to access the resource. Add additional groups using 'Use RequireGroup +## '. To debug OpenID Connect related communication add 'LogLevel +## auth_openidc:debug'. +## + + + AuthType openid-connect + Require claim freedombox_groups:admin + + + + + + Require claim freedombox_groups:$group + + diff --git a/plinth/modules/apache/privileged.py b/plinth/modules/apache/privileged.py index f58a0e791..880757d89 100644 --- a/plinth/modules/apache/privileged.py +++ b/plinth/modules/apache/privileged.py @@ -2,12 +2,22 @@ """Configure Apache web server.""" import glob +import json import os import pathlib import re +import shutil +import urllib.parse -from plinth import action_utils -from plinth.actions import privileged +import augeas + +from plinth import action_utils, utils +from plinth.actions import privileged, secret_str + +openidc_config_path = pathlib.Path( + '/etc/apache2/conf-available/freedombox-openidc.conf') +metadata_dir_path = pathlib.Path( + '/var/cache/apache2/mod_auth_openidc/metadata/') def _get_sort_key_of_version(version): @@ -70,6 +80,8 @@ def setup(old_version: int): action_utils.run(['make-ssl-cert', 'generate-default-snakeoil'], check=True) + _setup_oidc_config() + with action_utils.WebserverChange() as webserver: # Disable mod_php as we have switched to mod_fcgi + php-fpm. Disable # before switching away from mpm_prefork otherwise switching fails due @@ -114,6 +126,7 @@ def setup(old_version: int): webserver.enable('headers', kind='module') # Various modules for authentication/authorization + webserver.enable('auth_openidc', kind='module') webserver.enable('authnz_ldap', kind='module') webserver.enable('auth_pubtkt', kind='module') @@ -135,9 +148,11 @@ def setup(old_version: int): webserver.enable('dav', kind='module') webserver.enable('dav_fs', kind='module') - # setup freedombox site + # setup freedombox configuration + webserver.enable('10-freedombox', kind='config') webserver.enable('freedombox', kind='config') webserver.enable('freedombox-tls', kind='config') + webserver.enable('freedombox-openidc.conf', kind='config') # enable serving Debian javascript libraries webserver.enable('javascript-common', kind='config') @@ -151,6 +166,119 @@ def setup(old_version: int): webserver.enable('freedombox-default', kind='site') +def _load_augeas(): + """Initialize augeas for this app's configuration file.""" + aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + + augeas.Augeas.NO_MODL_AUTOLOAD) + aug.transform('Httpd', str(openidc_config_path)) + aug.set('/augeas/context', '/files' + str(openidc_config_path)) + aug.load() + + return aug + + +def _get_mod_openidc_passphrase() -> str: + """Read existing mod-auth-openidc passphase. + + Instead of generating a new passphrase every time, use existing one. If the + passphrase changes, all the existing sessions will be logged out and users + will have login to apps again. + """ + aug = _load_augeas() + for directive in aug.match('*/directive'): + if aug.get(directive) == 'OIDCCryptoPassphrase': + return aug.get(directive + '/arg') + + # Does not exist already, generate new + return utils.generate_password(size=64) + + +@privileged +def setup_oidc_client(netloc: str, client_id: str, client_secret: secret_str): + """Setup client ID and secret for provided domain. + + netloc is hostname or IP address along with port as parsed by + urllib.parse.urlparse() method from a URL. + """ + issuer = f'{netloc}/freedombox/o' + issuer_quoted = urllib.parse.quote_plus(issuer) + client_path = metadata_dir_path / f'{issuer_quoted}.client' + if client_path.exists(): + try: + current_data = json.loads(client_path.read_text()) + if (current_data['client_id'] == client_id + and current_data['client_secret'] == client_secret): + return + except Exception: + pass + + client_configuration = { + 'client_id': client_id, + 'client_secret': client_secret + } + previous_umask = os.umask(0o077) + try: + client_path.write_text(json.dumps(client_configuration)) + finally: + os.umask(previous_umask) + + shutil.chown(client_path, 'www-data', 'www-data') + + +def _setup_oidc_config(): + """Setup Apache as a OpenID Connect Relying Party. + + Ensure that auth_openidc module's metadata directory is created. It will be + used to store provider-specific configuration. Since FreedomBox will be + configured with multiple domains and some of them may not be accessible due + to the access method, we need to configure a separate IDP for each domain. + This is also because auth_openidc does not allow IDP configuration with + relative URLs. + + Keep the metadata directory and configuration file unreadable by non-admin + users since they contain module's crypto secret and OIDC client secret. + """ + metadata_dir_path.parent.mkdir(mode=0o700, parents=True, exist_ok=True) + metadata_dir_path.mkdir(mode=0o700, exist_ok=True) + shutil.chown(metadata_dir_path.parent, 'www-data', 'www-data') + shutil.chown(metadata_dir_path, 'www-data', 'www-data') + + # XXX: Default cache type is 'shm' or shared memory. This is lost when + # Apache is restarted and users/apps will have to reauthenticate. Improve + # this by using file (in tmpfs), redis, or memache caches. + + passphrase = _get_mod_openidc_passphrase() + configuration = f'''## +## OpenID Connect related configuration +## + + OIDCCryptoPassphrase {passphrase} + OIDCMetadataDir {str(metadata_dir_path)} + # Use relative URL to redirect to the same origin as the resource + OIDCDiscoverURL /freedombox/apache/discover-idp/ + OIDCSSLValidateServer Off + OIDCProviderMetadataRefreshInterval 86400 + + # Use relative URL to return to the original domain + OIDCRedirectURI /apache/oidc/callback + OIDCRemoteUserClaim sub + + # The redirect URI must always be under a location protected by + # mod_openidc. + + AuthType openid-connect + # Checking audience is not necessary, but we need to check some claim. + Require claim aud:apache + + +''' + previous_umask = os.umask(0o077) + try: + openidc_config_path.write_text(configuration) + finally: + os.umask(previous_umask) + + # TODO: Check that the (name, kind) is a managed by FreedomBox before # performing operation. @privileged diff --git a/plinth/modules/apache/tests/test_components.py b/plinth/modules/apache/tests/test_components.py index e0fd862e0..da59247cb 100644 --- a/plinth/modules/apache/tests/test_components.py +++ b/plinth/modules/apache/tests/test_components.py @@ -473,7 +473,8 @@ def test_diagnose_url(get_addresses, check): def test_check_url(run): """Test checking whether a URL is accessible.""" url = 'http://localhost/test' - basic_command = ['curl', '--location', '-f', '-w', '%{response_code}'] + basic_command = ['curl', '--location', '--cookie', '', '--fail', + '--write-out', '%{response_code}'] extra_args = {'env': None, 'check': True, 'stdout': -1, 'stderr': -1} # Basic diff --git a/plinth/modules/apache/urls.py b/plinth/modules/apache/urls.py index 5bf690c8c..d09d2ee70 100644 --- a/plinth/modules/apache/urls.py +++ b/plinth/modules/apache/urls.py @@ -1,6 +1,12 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -""" -URLs for the Apache module. -""" +"""URLs for the Apache module.""" -urlpatterns: list = [] +from django.urls import re_path +from stronghold.decorators import public + +from .views import DiscoverIDPView + +urlpatterns = [ + re_path(r'^apache/discover-idp/$', public(DiscoverIDPView.as_view()), + name='discover-idp'), +] diff --git a/plinth/modules/apache/views.py b/plinth/modules/apache/views.py new file mode 100644 index 000000000..1a65925b9 --- /dev/null +++ b/plinth/modules/apache/views.py @@ -0,0 +1,71 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Views for the Apache app.""" + +from urllib.parse import urlencode, urlparse + +from django.http import (HttpResponseBadRequest, HttpResponseRedirect, + HttpResponseServerError) +from django.views import View + +from . import setup_oidc_client, validate_host + +# By default 'openid' scope already included by mod_auth_openidc +OIDC_SCOPES = 'email freedombox_groups' + + +class DiscoverIDPView(View): + """A view called by auth_openidc Apache module to find the IDP. + + According to documentation for auth_openidc: an Issuer selection can be + passed back to the callback URL as in: + ?iss=[${issuer}|${domain}|${e-mail-style-account-name}] + [parameters][&login_hint=][&scopes=] + [&auth_request_params=] + + where the parameter contains the URL-encoded issuer value of the + selected Provider (or...), [parameters] contains the additional parameters + that were passed in on the discovery request (e.g. + target_link_uri=&x_csrf=&method=&scopes=) + """ + + def get(self, request): + """Redirect back to auth_openidc module after selecting a IDP.""" + target_link_uri = request.GET.get('target_link_uri', '') + method = request.GET.get('method', 'get') + x_csrf = request.GET.get('x_csrf', '') + oidc_callback = request.GET.get('oidc_callback') + + if method != 'get': + return HttpResponseBadRequest(f'Cannot handle "{method}" method') + + oidc_callback_parts = urlparse(oidc_callback) + request_host = request.META['HTTP_HOST'] + if request_host != oidc_callback_parts.netloc: + return HttpResponseBadRequest( + f'Cannot redirect from {request_host} to a different host ' + f'{oidc_callback_parts.netloc}') + + try: + validate_host(oidc_callback_parts.hostname) + except ValueError: + return HttpResponseBadRequest( + f'Accessed using unknown domain {request_host}. Please add ' + 'the domain to list of configured domains.') + + try: + setup_oidc_client(oidc_callback_parts.netloc, + oidc_callback_parts.hostname) + except ValueError: + return HttpResponseServerError( + f'Server not configured to called as {request_host}') + + url = '/apache/oidc/callback' + params = { + 'iss': f'https://{request_host}/freedombox/o', + 'target_link_uri': target_link_uri, + 'method': method, + 'x_csrf': x_csrf, + 'scopes': OIDC_SCOPES, + } + params = urlencode(params) + return HttpResponseRedirect(f'{url}?{params}') diff --git a/plinth/modules/backups/__init__.py b/plinth/modules/backups/__init__.py index bd2d617bc..2704e0bdb 100644 --- a/plinth/modules/backups/__init__.py +++ b/plinth/modules/backups/__init__.py @@ -1,12 +1,14 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """FreedomBox app to manage backup archives.""" +import collections.abc +import contextlib import json import logging import os -import pathlib import re import subprocess +from pathlib import Path from django.utils.text import get_valid_filename from django.utils.translation import gettext_lazy as _ @@ -14,9 +16,10 @@ from django.utils.translation import gettext_noop from plinth import app as app_module from plinth import cfg, glib, menu +from plinth.modules.names.components import DomainName from plinth.package import Packages -from . import api, manifest, privileged +from . import api, errors, manifest, privileged logger = logging.getLogger(__name__) @@ -132,9 +135,77 @@ def restore_from_upload(path, app_ids=None): create_subvolume=False, backup_file=path) -def get_known_hosts_path(): +def get_known_hosts_path() -> Path: """Return the path to the known hosts file.""" - return pathlib.Path(cfg.data_dir) / '.ssh' / 'known_hosts' + return Path(cfg.data_dir) / '.ssh' / 'known_hosts' + + +def get_ssh_client_auth_key_paths() -> tuple[Path, Path]: + """Return the paths to the SSH client public key and private key.""" + key_path = Path(cfg.data_dir) / '.ssh' / 'id_ed25519' + pubkey_path = key_path.with_suffix('.pub') + return pubkey_path, key_path + + +def generate_ssh_client_auth_key(): + """Generate SSH client authentication keypair, if needed.""" + _, key_path = get_ssh_client_auth_key_paths() + key_path.parent.mkdir(parents=True, exist_ok=True) + if key_path.exists(): + logger.info('SSH client key %s for FreedomBox service already exists', + key_path) + return + + domain_name = DomainName.list_names()[0] + logger.info('Generating SSH client key %s for FreedomBox service', + key_path) + subprocess.run([ + 'ssh-keygen', '-t', 'ed25519', '-N', '', '-C', + f'freedombox@{domain_name}', '-f', + str(key_path) + ], stdout=subprocess.DEVNULL, check=True) + + +def get_ssh_client_public_key() -> str: + """Get SSH client public key for FreedomBox service.""" + pubkey_path, _ = get_ssh_client_auth_key_paths() + with pubkey_path.open('r') as pubkey_file: + pubkey = pubkey_file.read() + + return pubkey + + +def copy_ssh_client_public_key(pubkey_path: str, hostname: str, username: str, + password: str): + """Copy the SSH client public key to the remote server. + + Returns whether the copy was successful, and any error message. + """ + env = os.environ.copy() + env['SSHPASS'] = str(password) + with raise_ssh_error(): + try: + subprocess.run([ + 'sshpass', '-e', 'ssh-copy-id', '-i', pubkey_path, + f'{username}@{hostname}' + ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True, + env=env) + logger.info("Copied SSH client public key to remote host's " + "authorized keys.") + except subprocess.CalledProcessError as exception: + logger.warning('Failed to copy SSH client public key: %s', + exception.stderr) + raise + + +@contextlib.contextmanager +def raise_ssh_error() -> collections.abc.Generator[None]: + """Convert subprocess error to SshError.""" + try: + yield + except subprocess.CalledProcessError as exception: + raise errors.SshError(exception.returncode, exception.cmd, + exception.output, exception.stderr) def is_ssh_hostkey_verified(hostname): diff --git a/plinth/modules/backups/errors.py b/plinth/modules/backups/errors.py index 2792f6741..d2cd56358 100644 --- a/plinth/modules/backups/errors.py +++ b/plinth/modules/backups/errors.py @@ -1,18 +1,24 @@ # SPDX-License-Identifier: AGPL-3.0-or-later +import subprocess + from plinth.errors import PlinthError class BorgError(PlinthError): - """Generic borg errors""" + """Generic borg errors.""" class BorgRepositoryDoesNotExistError(BorgError): - """Borg access to a repository works but the repository does not exist""" + """Borg access to a repository works but the repository does not exist.""" + + +class SshError(subprocess.CalledProcessError): + """Error when running an SSH command.""" class SshfsError(PlinthError): - """Generic sshfs errors""" + """Generic sshfs errors.""" class BorgRepositoryExists(BorgError): diff --git a/plinth/modules/backups/forms.py b/plinth/modules/backups/forms.py index 5e037bb8b..faf5e0e2e 100644 --- a/plinth/modules/backups/forms.py +++ b/plinth/modules/backups/forms.py @@ -184,7 +184,7 @@ class EncryptedBackupsMixin(forms.Form): choices=[('repokey', _('Key in Repository')), ('none', _('None'))]) encryption_passphrase = forms.CharField( label=_('Passphrase'), - help_text=_('Passphrase; Only needed when using encryption.'), + help_text=_('Only needed when using encryption.'), widget=forms.PasswordInput(), required=False) confirm_encryption_passphrase = forms.CharField( label=_('Confirm Passphrase'), help_text=_('Repeat the passphrase.'), @@ -251,13 +251,30 @@ class AddRemoteRepositoryForm(EncryptedBackupsMixin, forms.Form): help_text=_('Path of a new or existing repository. Example: ' 'user@host:~/path/to/repo/'), validators=[repository_validator]) + ssh_auth_type = forms.ChoiceField( + label=_('SSH Authentication Type'), + help_text=_('Choose how to authenticate to the remote SSH server.'), + widget=forms.RadioSelect(), + choices=[('key_auth', _('Key-based Authentication')), + ('password_auth', _('Password-based Authentication'))]) ssh_password = forms.CharField( - label=_('SSH server password'), strip=True, - help_text=_('Password of the SSH Server.
' - 'SSH key-based authentication is not yet possible.'), - widget=forms.PasswordInput(), required=False) + label=_('SSH server password'), widget=forms.PasswordInput(), + strip=True, help_text=_('Required for password-based authentication.'), + required=False) - field_order = ['repository', 'ssh_password'] + encryption_fields + field_order = ['repository', 'ssh_auth_type', 'ssh_password' + ] + encryption_fields + + def clean(self): + """Perform additional checks on form data.""" + super().clean() + ssh_password = self.cleaned_data.get('ssh_password') + if self.cleaned_data.get( + 'ssh_auth_type') == 'password_auth' and not ssh_password: + raise forms.ValidationError( + _('SSH password is needed for password-based authentication.')) + + return self.cleaned_data def clean_repository(self): """Validate repository form field.""" diff --git a/plinth/modules/backups/privileged.py b/plinth/modules/backups/privileged.py index 78d49223b..234ab8dcc 100644 --- a/plinth/modules/backups/privileged.py +++ b/plinth/modules/backups/privileged.py @@ -49,7 +49,7 @@ KNOWN_ERRORS = [ 'raise_as': errors.BorgRepositoryDoesNotExistError, }, { - 'errors': ['passphrase supplied in .* is incorrect'], + 'errors': ['[Pp]assphrase supplied in .* is incorrect'], 'message': _('Incorrect encryption passphrase'), 'raise_as': errors.BorgError, }, @@ -131,8 +131,7 @@ def _reraise_known_errors(err): @reraise_known_errors @privileged -def mount(mountpoint: str, remote_path: str, ssh_keyfile: str | None = None, - password: secret_str | None = None, +def mount(mountpoint: str, remote_path: str, ssh_keyfile: str, user_known_hosts_file: str = '/dev/null'): """Mount a remote ssh path via sshfs.""" try: @@ -156,16 +155,9 @@ def mount(mountpoint: str, remote_path: str, ssh_keyfile: str | None = None, 'sshfs', remote_path, mountpoint, '-o', f'UserKnownHostsFile={user_known_hosts_file}', '-o', 'StrictHostKeyChecking=yes', '-o', 'reconnect', '-o', - 'ServerAliveInterval=15', '-o', 'ServerAliveCountMax=3' + 'ServerAliveInterval=15', '-o', 'ServerAliveCountMax=3', '-o', + 'IdentityFile=' + ssh_keyfile ] - if ssh_keyfile: - cmd += ['-o', 'IdentityFile=' + ssh_keyfile] - else: - if not password: - raise ValueError('mount requires either a password or ssh_keyfile') - cmd += ['-o', 'password_stdin'] - input_ = password.encode() - action_utils.run(cmd, check=True, timeout=TIMEOUT, input=input_) diff --git a/plinth/modules/backups/repository.py b/plinth/modules/backups/repository.py index ec40a3ed1..89b64b26d 100644 --- a/plinth/modules/backups/repository.py +++ b/plinth/modules/backups/repository.py @@ -13,7 +13,9 @@ from django.utils.translation import gettext_lazy as _ from plinth import cfg from plinth.utils import format_lazy -from . import (_backup_handler, api, errors, get_known_hosts_path, privileged, +from . import (_backup_handler, api, copy_ssh_client_public_key, errors, + generate_ssh_client_auth_key, get_known_hosts_path, + get_ssh_client_auth_key_paths, privileged, raise_ssh_error, restore_archive_handler, split_path, store) from .schedule import Schedule @@ -143,6 +145,9 @@ class BaseBorgRepository(abc.ABC): privileged.delete_archive(archive_path, self._get_encryption_passpharse()) + def migrate_credentials(self) -> None: + """Migrate any credentials.""" + def initialize(self): """Initialize / create a borg repository.""" encryption = 'none' @@ -315,11 +320,27 @@ class SshBorgRepository(BaseBorgRepository): self._umount_ignore_errors() @property - def hostname(self): + def hostname(self) -> str: """Return hostname from the remote path.""" _, hostname, _ = split_path(self._path) return hostname.split('%')[0] # XXX: Likely incorrect to split + @property + def username(self) -> str: + """Return username from the remote path.""" + username, _, _ = split_path(self._path) + return username + + @property + def ssh_password(self) -> str | None: + """Return SSH password if it is stored, otherwise None.""" + return self.credentials.get('ssh_password') + + @property + def ssh_keyfile(self) -> str | None: + """Return path to SSH client key if stored, otherwise None.""" + return self.credentials.get('ssh_keyfile') + @property def _mountpoint(self): """Return the local mount point where repository is to be mounted.""" @@ -330,8 +351,22 @@ class SshBorgRepository(BaseBorgRepository): """Return whether remote path is mounted locally.""" return privileged.is_mounted(self._mountpoint) + def migrate_credentials(self) -> None: + """Add SSH keyfile credential and delete stored password.""" + if not self.ssh_password: + return + + pubkey_path, keyfile_path = get_ssh_client_auth_key_paths() + generate_ssh_client_auth_key() + copy_ssh_client_public_key(str(pubkey_path), self.hostname, + self.username, self.ssh_password) + self.credentials['ssh_keyfile'] = str(keyfile_path) + self.credentials.pop('ssh_password', None) + self.save() + def initialize(self): """Initialize the repository after mounting the target directory.""" + self.migrate_credentials() self._ensure_remote_directory() self.mount() super().initialize() @@ -341,17 +376,11 @@ class SshBorgRepository(BaseBorgRepository): if self.is_mounted: return + self.migrate_credentials() known_hosts_path = get_known_hosts_path() - kwargs = {'user_known_hosts_file': str(known_hosts_path)} - if 'ssh_password' in self.credentials and self.credentials[ - 'ssh_password']: - kwargs['password'] = self.credentials['ssh_password'] - - if 'ssh_keyfile' in self.credentials and self.credentials[ - 'ssh_keyfile']: - kwargs['ssh_keyfile'] = self.credentials['ssh_keyfile'] - - privileged.mount(self._mountpoint, self._path, **kwargs) + privileged.mount(self._mountpoint, self._path, + ssh_keyfile=self.credentials['ssh_keyfile'], + user_known_hosts_file=str(known_hosts_path)) def umount(self): """Unmount the remote path that was mounted locally using sshfs.""" @@ -391,16 +420,16 @@ class SshBorgRepository(BaseBorgRepository): if dir_path[0] == '~': dir_path = '.' + dir_path[1:] - password = self.credentials['ssh_password'] - # Ensure remote directory exists, check contents - env = {'SSHPASS': password} known_hosts_path = str(get_known_hosts_path()) - subprocess.run([ - 'sshpass', '-e', 'ssh', '-o', - f'UserKnownHostsFile={known_hosts_path}', f'{username}@{hostname}', - 'mkdir', '-p', dir_path - ], check=True, env=env) + with raise_ssh_error(): + subprocess.run([ + 'ssh', '-i', + str(self.ssh_keyfile), '-o', + f'UserKnownHostsFile={known_hosts_path}', '-o', + 'BatchMode=yes', f'{username}@{hostname}', 'mkdir', '-p', + dir_path + ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True) def get_repositories(): diff --git a/plinth/modules/backups/static/backups_add_remote_repository.js b/plinth/modules/backups/static/backups_add_remote_repository.js new file mode 100644 index 000000000..b1ab34317 --- /dev/null +++ b/plinth/modules/backups/static/backups_add_remote_repository.js @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later +/** + * @licstart The following is the entire license notice for the JavaScript + * code in this page. + * + * This file is part of FreedomBox. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + * @licend The above is the entire license notice for the JavaScript code + * in this page. + */ + +document.addEventListener('DOMContentLoaded', () => { + const keyAuth = document.getElementById('id_ssh_auth_type_0'); + const passwordAuth = document.getElementById('id_ssh_auth_type_1'); + const sshPasswordField = document.getElementById('id_ssh_password'); + const encryptionType = document.getElementById('id_encryption'); + const encryptionPassphraseField = document.getElementById('id_encryption_passphrase'); + const encryptionConfirmPassphraseField = document.getElementById('id_confirm_encryption_passphrase'); + + function handleAuthTypeChange() { + if (passwordAuth.checked) { + sshPasswordField.parentElement.parentElement.style.display = 'block'; + } else { + sshPasswordField.parentElement.parentElement.style.display = 'none'; + } + } + + function handleEncryptionTypeChange() { + let display = 'none'; + if (encryptionType.value === "repokey") { + display = 'block'; + } + + encryptionPassphraseField.parentElement.parentElement.style.display = display; + encryptionConfirmPassphraseField.parentElement.parentElement.style.display = display; + } + + keyAuth.addEventListener('change', handleAuthTypeChange); + passwordAuth.addEventListener('change', handleAuthTypeChange); + encryptionType.addEventListener('change', handleEncryptionTypeChange); + + handleAuthTypeChange(); + handleEncryptionTypeChange(); +}); diff --git a/plinth/modules/backups/templates/backups_add_remote_repository.html b/plinth/modules/backups/templates/backups_add_remote_repository.html index f2c0eacab..60bcb87f6 100644 --- a/plinth/modules/backups/templates/backups_add_remote_repository.html +++ b/plinth/modules/backups/templates/backups_add_remote_repository.html @@ -5,15 +5,125 @@ {% load bootstrap %} {% load i18n %} +{% load static %} + +{% block page_js %} + +{% endblock %} {% block content %}

{{ title }}

-
+ + {% if form.non_field_errors %} +
+ × + {% for non_field_error in form.non_field_errors %} + {{ non_field_error }} + {% endfor %} +
+ {% endif %} + {% csrf_token %} - {{ form|bootstrap }} +
+ +
+ + {% for error in form.repository.errors %} + {{ error }} + {% endfor %} +

+ {{ form.repository.help_text|safe }} +

+
+
+ +
+ +

+ {{ form.ssh_auth_type.help_text|safe }} +

+ {% for error in form.ssh_auth_type.errors %} + {{ error }} + {% endfor %} + +
+ +
+ +
+

+ {% blocktrans trimmed %} + The following SSH client public key must be added to the + authorized keys list on the remote machine for {{ box_name }} to + be able to connect to the remote machine: + {% endblocktrans %} +

+
{{ ssh_client_public_key }}
+
+ +
+ +
+ +

+ {% blocktrans trimmed %} + {{ box_name }} service will attempt to connect using the provided + password. If successful, then the public key will be automatically + added to the authorized keys list, so that future connections do + not need the password. + {% endblocktrans %} +

+ + {% with _=form.ssh_password|add_input_classes %} + {% include "bootstrapform/field.html" with field=form.ssh_password %} + {% endwith %} +
+ +
+
+ +
+ + {% for error in form.encryption.errors %} + {{ error }} + {% endfor %} +

+ {{ form.encryption.help_text|safe }} +

+
+
+ + {% with _=form.encryption_passphrase|add_input_classes %} + {% include "bootstrapform/field.html" with field=form.encryption_passphrase %} + {% endwith %} + + {% with _=form.confirm_encryption_passphrase|add_input_classes %} + {% include "bootstrapform/field.html" with field=form.confirm_encryption_passphrase %} + {% endwith %} +
diff --git a/plinth/modules/backups/templates/backups_repository.html b/plinth/modules/backups/templates/backups_repository.html index b9df64ce9..19f9c92d7 100644 --- a/plinth/modules/backups/templates/backups_repository.html +++ b/plinth/modules/backups/templates/backups_repository.html @@ -4,8 +4,8 @@ {% load i18n %} -
- +
+
+ + + + + + + + + + + +
@@ -23,7 +23,7 @@ {% endif %} - {{ repository.name }} + {{ repository.name }}
diff --git a/plinth/modules/backups/templates/backups_repository_remove.html b/plinth/modules/backups/templates/backups_repository_remove.html index 637dfac34..dad03ffeb 100644 --- a/plinth/modules/backups/templates/backups_repository_remove.html +++ b/plinth/modules/backups/templates/backups_repository_remove.html @@ -24,7 +24,7 @@

- + {% csrf_token %} {% endblock %} - diff --git a/plinth/modules/backups/templates/verify_ssh_hostkey.html b/plinth/modules/backups/templates/verify_ssh_hostkey.html index 70f93db6c..a822997a8 100644 --- a/plinth/modules/backups/templates/verify_ssh_hostkey.html +++ b/plinth/modules/backups/templates/verify_ssh_hostkey.html @@ -10,7 +10,7 @@

{{ title }}

- + {% csrf_token %} {% if form.ssh_public_key|length == 0 %} diff --git a/plinth/modules/backups/tests/test_functional.py b/plinth/modules/backups/tests/test_functional.py index 9032534ee..0377239b2 100644 --- a/plinth/modules/backups/tests/test_functional.py +++ b/plinth/modules/backups/tests/test_functional.py @@ -15,6 +15,8 @@ from plinth.tests import functional pytestmark = [pytest.mark.system, pytest.mark.backups] +REMOTE_PATH = 'tester@localhost:~/backups' + @pytest.fixture(scope='module', autouse=True) def fixture_background(session_browser): @@ -66,8 +68,25 @@ def test_set_schedule(session_browser): monthly=30, run_at=15, without_app='firewall') +def test_remote_backup_location(session_browser): + """Test remote backup location operations.""" + _add_remote_backup_location(session_browser) + assert _has_remote_backup_location(session_browser) + + _remove_remote_backup_location(session_browser) + assert not _has_remote_backup_location(session_browser) + + # Add it again without providing SSH password. + _add_remote_backup_location(session_browser, False) + assert _has_remote_backup_location(session_browser) + + _remove_remote_backup_location(session_browser) + assert not _has_remote_backup_location(session_browser) + + def _assert_main_page_is_shown(session_browser): - assert (session_browser.url.endswith('/plinth/')) + assert (session_browser.url.endswith('/freedombox/') + or session_browser.url.endswith('/plinth/')) def _backup_download(session_browser, downloaded_file_info, archive_name): @@ -108,7 +127,7 @@ def _backup_schedule_get(browser): functional.nav_to_module(browser, 'backups') with functional.wait_for_page_update(browser): browser.links.find_by_href( - '/plinth/sys/backups/root/schedule/').first.click() + '/freedombox/sys/backups/root/schedule/').first.click() without_apps = [] elements = browser.find_by_name('backups_schedule-selected_apps') @@ -140,7 +159,7 @@ def _backup_schedule_set(browser, enable, daily, weekly, monthly, run_at, functional.nav_to_module(browser, 'backups') with functional.wait_for_page_update(browser): browser.links.find_by_href( - '/plinth/sys/backups/root/schedule/').first.click() + '/freedombox/sys/backups/root/schedule/').first.click() if enable: browser.find_by_name('backups_schedule-enabled').check() @@ -172,28 +191,81 @@ def _download_file_logged_in(browser, url, suffix=''): def _download(browser, archive_name=None): + """Download a backup archive to a temporary file on disk.""" functional.nav_to_module(browser, 'backups') - href = f'/plinth/sys/backups/root/download/{archive_name}/' + href = f'/freedombox/sys/backups/root/download/{archive_name}/' url = functional.base_url + href file_path = _download_file_logged_in(browser, url, suffix='.tar.gz') return file_path def _open_main_page(browser): + """Open the FreedomBox interface main page.""" with functional.wait_for_page_update(browser): - browser.links.find_by_href('/plinth/').first.click() + browser.links.find_by_href('/freedombox/').first.click() def _upload_and_restore(browser, app_name, downloaded_file_path): + """Upload a backup archive from the disk and perform restore operation.""" functional.nav_to_module(browser, 'backups') with functional.wait_for_page_update(browser): - browser.links.find_by_href('/plinth/sys/backups/upload/').first.click() + browser.links.find_by_href( + '/freedombox/sys/backups/upload/').first.click() fileinput = browser.find_by_id('id_backups-file') fileinput.fill(downloaded_file_path) # submit upload form functional.submit(browser, form_class='form-upload') # submit restore form - with functional.wait_for_page_update(browser, - expected_url='/plinth/sys/backups/'): + with functional.wait_for_page_update( + browser, expected_url='/freedombox/sys/backups/'): functional.submit(browser, form_class='form-restore') + + +def _has_remote_backup_location(browser) -> bool: + """Return whether atleast one remote backup location is configured.""" + functional.nav_to_module(browser, 'backups') + return browser.is_element_present_by_css( + f'.repository[data-repository-name="{REMOTE_PATH}"]') + + +def _add_remote_backup_location(browser, ssh_use_password=True): + """Add a remote backup location.""" + if _has_remote_backup_location(browser): + _remove_remote_backup_location(browser) + + browser.links.find_by_href( + '/freedombox/sys/backups/repositories/add-remote/').first.click() + browser.find_by_name('repository').fill(REMOTE_PATH) + password = functional.get_password( + functional.config['DEFAULT']['username']) + if ssh_use_password: + browser.find_by_id('id_ssh_auth_type_1').check() + browser.find_by_name('ssh_password').fill(password) + else: + browser.find_by_id('id_ssh_auth_type_0').check() + + browser.choose('id_encryption', 'repokey') + browser.find_by_name('encryption_passphrase').fill(password) + browser.find_by_name('confirm_encryption_passphrase').fill(password) + functional.submit(browser, form_class='form-add-remote-repository') + + assert browser.is_text_present('Added new remote SSH repository.') + + if 'ssh-verify' in browser.url: + _verify_host_key(browser) + + +def _remove_remote_backup_location(browser): + """Remove the remote backup location with known remote path.""" + repository = browser.find_by_css( + f'.repository[data-repository-name="{REMOTE_PATH}"]').first + repository.find_by_css('.repository-remove').first.click() + functional.submit(browser, form_class='form-remove-location') + + +def _verify_host_key(browser): + """Verify the remote location's SSH host key.""" + browser.find_by_name('ssh_public_key').first.click() + functional.submit(browser, form_class='form-verify-ssh-hostkey') + assert browser.is_text_present('SSH host verified.') diff --git a/plinth/modules/backups/views.py b/plinth/modules/backups/views.py index 56d8968c3..36accb365 100644 --- a/plinth/modules/backups/views.py +++ b/plinth/modules/backups/views.py @@ -6,7 +6,6 @@ Views for the backups app. import contextlib import logging import os -import subprocess from urllib.parse import unquote from django.contrib import messages @@ -24,7 +23,9 @@ from plinth.errors import PlinthError from plinth.modules import backups, storage from plinth.views import AppView -from . import (SESSION_PATH_VARIABLE, api, errors, forms, get_known_hosts_path, +from . import (SESSION_PATH_VARIABLE, api, errors, forms, + generate_ssh_client_auth_key, get_known_hosts_path, + get_ssh_client_auth_key_paths, get_ssh_client_public_key, is_ssh_hostkey_verified, privileged) from .decorators import delete_tmp_backup_file from .repository import (BorgRepository, SshBorgRepository, get_instance, @@ -38,6 +39,19 @@ def handle_common_errors(request: HttpRequest): """If any known Borg exceptions occur, show proper error messages.""" try: yield + except errors.SshError as exception: + if exception.returncode in (6, 7): + message = _('SSH host public key could not be verified.') + elif (exception.returncode == 5 + or 'Permission denied' in exception.stderr.decode()): + message = _('Authentication to remote server failed.') + else: + message = _( + 'Error establishing connection to server: {} {} {}').format( + str(exception), exception.stdout.decode(), + exception.stderr.decode()) + + messages.error(request, message) except errors.BorgError as exception: messages.error(request, exception.args[0]) @@ -344,11 +358,11 @@ class AddRepositoryView(FormView): encryption_passphrase = None credentials = {'encryption_passphrase': encryption_passphrase} + repository = BorgRepository(path, credentials) with handle_common_errors(self.request): - repository = BorgRepository(path, credentials) - if _save_repository(self.request, repository): - messages.success(self.request, _('Added new repository.')) - return super().form_valid(form) + _save_repository(self.request, repository) + messages.success(self.request, _('Added new repository.')) + return super().form_valid(form) return redirect(reverse_lazy('backups:add-repository')) @@ -358,10 +372,19 @@ class AddRemoteRepositoryView(FormView): form_class = forms.AddRemoteRepositoryForm template_name = 'backups_add_remote_repository.html' + def get(self, *args, **kwargs): + """Handle GET requests. + + Generate SSH client authentication key if necessary. + """ + generate_ssh_client_auth_key() + return super().get(*args, kwargs) + def get_context_data(self, **kwargs): """Return additional context for rendering the template.""" context = super().get_context_data(**kwargs) context['title'] = _('Create remote backup repository') + context['ssh_client_public_key'] = get_ssh_client_public_key() return context def form_valid(self, form): @@ -374,10 +397,13 @@ class AddRemoteRepositoryView(FormView): if form.cleaned_data.get('encryption') == 'none': encryption_passphrase = None - credentials = { - 'ssh_password': form.cleaned_data.get('ssh_password'), - 'encryption_passphrase': encryption_passphrase - } + credentials = {'encryption_passphrase': encryption_passphrase} + if form.cleaned_data.get('ssh_auth_type') == 'password_auth': + credentials['ssh_password'] = form.cleaned_data.get('ssh_password') + else: + _pubkey_path, key_path = get_ssh_client_auth_key_paths() + credentials['ssh_keyfile'] = str(key_path) + with handle_common_errors(self.request): repository = SshBorgRepository(path, credentials) repository.verfied = False @@ -426,27 +452,28 @@ class VerifySshHostkeyView(FormView): with known_hosts_path.open('a', encoding='utf-8') as known_hosts_file: known_hosts_file.write(ssh_public_key + '\n') + def _save_repository_and_redirect(self): + """Save the repository and redirect according to the result.""" + with handle_common_errors(self.request): + _save_repository(self.request, self._get_repository()) + return redirect(reverse_lazy('backups:index')) + + return redirect(reverse_lazy('backups:add-remote-repository')) + def get(self, *args, **kwargs): """Skip this view if host is already verified.""" if not is_ssh_hostkey_verified(self._get_repository().hostname): return super().get(*args, **kwargs) messages.success(self.request, _('SSH host already verified.')) - if _save_repository(self.request, self._get_repository()): - return redirect(reverse_lazy('backups:index')) - - return redirect(reverse_lazy('backups:add-remote-repository')) + return self._save_repository_and_redirect() def form_valid(self, form): """Create and store the repository.""" ssh_public_key = form.cleaned_data['ssh_public_key'] - with handle_common_errors(self.request): - self._add_ssh_hostkey(ssh_public_key) - messages.success(self.request, _('SSH host verified.')) - if _save_repository(self.request, self._get_repository()): - return redirect(reverse_lazy('backups:index')) - - return redirect(reverse_lazy('backups:add-remote-repository')) + self._add_ssh_hostkey(ssh_public_key) + messages.success(self.request, _('SSH host verified.')) + return self._save_repository_and_redirect() def _save_repository(request, repository): @@ -455,29 +482,16 @@ def _save_repository(request, repository): repository.initialize() repository.verified = True repository.save() - return True - except subprocess.CalledProcessError as exception: - if exception.returncode in (6, 7): - message = _('SSH host public key could not be verified.') - elif exception.returncode == 5: - message = _('Authentication to remote server failed.') - else: - message = _('Error establishing connection to server: {}').format( - str(exception)) - except Exception as exception: - message = str(exception) - logger.exception('Error adding repository: %s', exception) + except Exception: + # Remove the repository so that the user can have another go at + # creating it. + try: + repository.remove() + messages.error(request, _('Repository removed.')) + except KeyError: + pass - messages.error(request, message) - # Remove the repository so that the user can have another go at - # creating it. - try: - repository.remove() - messages.error(request, _('Repository removed.')) - except KeyError: - pass - - return False + raise class RemoveRepositoryView(TemplateView): @@ -522,7 +536,8 @@ def mount_repository(request, uuid): repository = SshBorgRepository.load(uuid) try: - repository.mount() + with handle_common_errors(request): + repository.mount() except Exception as err: msg = "%s: %s" % (_('Mounting failed'), str(err)) messages.error(request, msg) diff --git a/plinth/modules/bepasty/static/icons/bepasty.svg b/plinth/modules/bepasty/static/icons/bepasty.svg index eec946b8f..99d8ee210 100644 --- a/plinth/modules/bepasty/static/icons/bepasty.svg +++ b/plinth/modules/bepasty/static/icons/bepasty.svg @@ -15,7 +15,7 @@ version="1.1" inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="bepasty.svg" - inkscape:export-filename="/media/Volume/Dokumente/Inkscape/bepasty.png" + inkscape:export-filename="bepasty.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> ProxyPass http://localhost:8844/calibre - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "admin" "calibre" - + Use AuthOpenIDConnect + Use RequireGroup calibre + + # Calibre has a bug where an empty value for a HTTP header is treated as + # invalid. OIDC_CLAIM_email can be empty and this causes Calibre to error + # out. So, try to pass all the OpenID Connect user information and claims as + # headers that can't have an empty value. + OIDCPassIDTokenAs "serialized" + OIDCPassUserInfoAs "json" diff --git a/plinth/modules/calibre/tests/test_functional.py b/plinth/modules/calibre/tests/test_functional.py index d658ceecf..6e52d026a 100644 --- a/plinth/modules/calibre/tests/test_functional.py +++ b/plinth/modules/calibre/tests/test_functional.py @@ -60,7 +60,7 @@ def _add_library(browser, name): return browser.links.find_by_href( - '/plinth/apps/calibre/library/create/').first.click() + '/freedombox/apps/calibre/library/create/').first.click() browser.find_by_id('id_calibre-name').fill(name) functional.submit(browser, form_class='form-calibre') @@ -69,7 +69,7 @@ def _delete_library(browser, name, ignore_missing=False): """Delete a library.""" functional.nav_to_module(browser, 'calibre') link = browser.links.find_by_href( - f'/plinth/apps/calibre/library/{name}/delete/') + f'/freedombox/apps/calibre/library/{name}/delete/') if not link: if ignore_missing: return @@ -84,7 +84,7 @@ def _is_library_available(browser, name): """Return whether a library is present in the list of libraries.""" functional.nav_to_module(browser, 'calibre') link = browser.links.find_by_href( - f'/plinth/apps/calibre/library/{name}/delete/') + f'/freedombox/apps/calibre/library/{name}/delete/') return bool(link) diff --git a/plinth/modules/config/__init__.py b/plinth/modules/config/__init__.py index c0b82f459..3981a25e5 100644 --- a/plinth/modules/config/__init__.py +++ b/plinth/modules/config/__init__.py @@ -94,7 +94,7 @@ def home_page_url2scid(url: str | None): if url in ('/plinth/', '/plinth', 'plinth', '/freedombox/', '/freedombox', 'freedombox'): - return 'plinth' + return 'freedombox' if url and url.startswith('/~'): return 'uws-{}'.format(user_of_uws_url(url)) @@ -109,8 +109,8 @@ def home_page_url2scid(url: str | None): def _home_page_scid2url(shortcut_id: str) -> str | None: """Return the url for the given home page shortcut ID.""" - url: str | None = '/plinth/' - if shortcut_id == 'plinth': + url: str | None = '/freedombox/' + if shortcut_id == 'freedombox': pass elif shortcut_id == 'apache-default': url = None @@ -134,7 +134,7 @@ def _get_home_page_url() -> str | None: """Get the default application for the domain.""" conf_file = privileged.APACHE_HOMEPAGE_CONFIG if not pathlib.Path(conf_file).exists(): - return '/plinth/' + return '/freedombox/' aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + augeas.Augeas.NO_MODL_AUTOLOAD) diff --git a/plinth/modules/config/forms.py b/plinth/modules/config/forms.py index e79d9aa11..107905652 100644 --- a/plinth/modules/config/forms.py +++ b/plinth/modules/config/forms.py @@ -24,8 +24,8 @@ def get_homepage_choices(): format_lazy(gettext_lazy("{user}'s website"), user=user)) for user, url in get_users_with_website().items()] apache_default = ('apache-default', _('Apache Default')) - plinth = ('plinth', _('FreedomBox Service (Plinth)')) - return [apache_default, plinth] + uws_choices + shortcut_choices + freedombox = ('freedombox', _('FreedomBox Service (Plinth)')) + return [apache_default, freedombox] + uws_choices + shortcut_choices class ConfigurationForm(forms.Form): @@ -39,8 +39,8 @@ class ConfigurationForm(forms.Form): 'case is to set your blog or wiki as the home page when ' 'someone visits the domain name. Note that once the home ' 'page is set to something other than {box_name} Service ' - '(Plinth), your users must explicitly type /plinth or ' - '/freedombox to reach {box_name} Service (Plinth).'), + '(Plinth), your users must explicitly type /freedombox to ' + 'reach {box_name} Service (Plinth).'), box_name=gettext_lazy(cfg.box_name)), required=False, choices=get_homepage_choices) diff --git a/plinth/modules/config/tests/test_config.py b/plinth/modules/config/tests/test_config.py index 5453fed1a..0d576e3f3 100644 --- a/plinth/modules/config/tests/test_config.py +++ b/plinth/modules/config/tests/test_config.py @@ -21,15 +21,18 @@ def test_homepage_mapping(): func = home_page_url2scid assert func(None) == 'apache-default' assert func('/unknown/url') is None - assert func('/plinth/') == 'plinth' - assert func('/plinth') == 'plinth' - assert func('plinth') == 'plinth' + assert func('/plinth/') == 'freedombox' + assert func('/plinth') == 'freedombox' + assert func('plinth') == 'freedombox' + assert func('/freedombox/') == 'freedombox' + assert func('/freedombox') == 'freedombox' + assert func('freedombox') == 'freedombox' assert func('/index.html') == 'apache-default' assert func('/~user') == 'uws-user' assert func('/~user/whatever/else') == 'uws-user' func = _home_page_scid2url - assert func('plinth') == '/plinth/' + assert func('freedombox') == '/freedombox/' assert func('apache-default') is None @@ -63,7 +66,7 @@ def test_homepage_mapping_skip_ci(): # AC: Return None if it doesn't: os.rmdir(uws_directory) - assert _home_page_scid2url(uws_scid) == '/plinth/' + assert _home_page_scid2url(uws_scid) == '/freedombox/' @patch( @@ -102,7 +105,7 @@ def test_homepage_field(): uws_url = uws_url_of_user(user) uws_scid = home_page_url2scid(uws_url) - default_home_page = 'plinth' + default_home_page = 'freedombox' original_home_page = get_home_page() or default_home_page change_home_page(default_home_page) # Set to known value explicitly @@ -113,7 +116,7 @@ def test_homepage_field(): # AC: valid changes actually happen: pathlib.Path(uws_directory).mkdir(parents=True) - for scid in ('b', 'a', uws_scid, 'apache-default', 'plinth'): + for scid in ('b', 'a', uws_scid, 'apache-default', 'freedombox'): change_home_page(scid) assert get_home_page() == scid diff --git a/plinth/modules/config/tests/test_functional.py b/plinth/modules/config/tests/test_functional.py index 241858386..3296b4c87 100644 --- a/plinth/modules/config/tests/test_functional.py +++ b/plinth/modules/config/tests/test_functional.py @@ -22,12 +22,12 @@ def test_change_home_page(session_browser): functional.app_enable(session_browser, 'syncthing') _set_home_page(session_browser, 'syncthing') - _set_home_page(session_browser, 'plinth') - assert _check_home_page_redirect(session_browser, 'plinth') + _set_home_page(session_browser, 'freedombox') + assert _check_home_page_redirect(session_browser, 'freedombox') def _set_home_page(browser, home_page): - if 'plinth' not in home_page and 'apache' not in home_page: + if 'freedombox' not in home_page and 'apache' not in home_page: home_page = 'shortcut-' + home_page functional.nav_to_module(browser, 'config') @@ -39,4 +39,4 @@ def _set_home_page(browser, home_page): def _check_home_page_redirect(browser, app_name): functional.visit(browser, '/') return browser.find_by_xpath( - "//a[contains(@href, '/plinth/') and @title='FreedomBox']") + "//a[contains(@href, '/freedombox/') and @title='FreedomBox']") diff --git a/plinth/modules/coturn/static/icons/coturn.svg b/plinth/modules/coturn/static/icons/coturn.svg index 66cf8022c..42bcc9452 100644 --- a/plinth/modules/coturn/static/icons/coturn.svg +++ b/plinth/modules/coturn/static/icons/coturn.svg @@ -16,7 +16,7 @@ width="512" height="512" inkscape:version="0.92.4 (5da689c313, 2019-01-14)" - inkscape:export-filename="/home/bunny/work/freedombox/plinth/static/themes/default/icons/coturn.png" + inkscape:export-filename="coturn.png" inkscape:export-xdpi="48" inkscape:export-ydpi="48"> ProxyPass http://localhost:8112 - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "admin" "bit-torrent" - + Use AuthOpenIDConnect + Use RequireGroup bit-torrent ## Send the scheme from user's request to enable Deluge to redirect URLs, ## set cookies, set absolute URLs (if any) properly. RequestHeader set X-Forwarded-Proto 'https' env=HTTPS diff --git a/plinth/modules/deluge/static/icons/deluge.svg b/plinth/modules/deluge/static/icons/deluge.svg index 15f2248aa..b93416d87 100644 --- a/plinth/modules/deluge/static/icons/deluge.svg +++ b/plinth/modules/deluge/static/icons/deluge.svg @@ -16,7 +16,7 @@ sodipodi:version="0.32" inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="Deluge-Logo.svg" - inkscape:export-filename="/home/zach/deluge.png" + inkscape:export-filename="deluge.png" inkscape:export-xdpi="480" inkscape:export-ydpi="480" inkscape:output_extension="org.inkscape.output.svg.inkscape" diff --git a/plinth/modules/diagnostics/__init__.py b/plinth/modules/diagnostics/__init__.py index 0b3d21d65..21248f58d 100644 --- a/plinth/modules/diagnostics/__init__.py +++ b/plinth/modules/diagnostics/__init__.py @@ -100,7 +100,7 @@ class DiagnosticsApp(app_module.App): results = super().diagnose() results.append(diagnose_port_listening(8000, 'tcp4')) results.extend( - diagnose_url_on_all('http://{host}/plinth/', + diagnose_url_on_all('http://{host}/freedombox/', check_certificate=False)) return results diff --git a/plinth/modules/dynamicdns/tests/test_functional.py b/plinth/modules/dynamicdns/tests/test_functional.py index 10df62575..b91a0e6b2 100644 --- a/plinth/modules/dynamicdns/tests/test_functional.py +++ b/plinth/modules/dynamicdns/tests/test_functional.py @@ -112,7 +112,7 @@ def _configure(browser, config): functional.nav_to_module(browser, 'dynamicdns') functional.click_link_by_href(browser, - '/plinth/sys/dynamicdns/domain/add/') + '/freedombox/sys/dynamicdns/domain/add/') for key, value in config.items(): field_id = f'id_domain-{key}' if key == 'service_type': @@ -130,7 +130,7 @@ def _configure(browser, config): def _assert_has_config(browser, config): functional.nav_to_module(browser, 'dynamicdns') - link = f'/plinth/sys/dynamicdns/domain/{config["domain"]}/edit/' + link = f'/freedombox/sys/dynamicdns/domain/{config["domain"]}/edit/' functional.click_link_by_href(browser, link) for key, value in config.items(): if key == 'password': @@ -153,6 +153,6 @@ def _get_domains(browser): def _delete_domain(browser, domain): """Delete a given domain.""" functional.nav_to_module(browser, 'dynamicdns') - link = f'/plinth/sys/dynamicdns/domain/{domain}/delete/' + link = f'/freedombox/sys/dynamicdns/domain/{domain}/delete/' functional.click_link_by_href(browser, link) functional.submit(browser, form_class='form-delete') diff --git a/plinth/modules/ejabberd/__init__.py b/plinth/modules/ejabberd/__init__.py index 7e25752ce..9e846ab06 100644 --- a/plinth/modules/ejabberd/__init__.py +++ b/plinth/modules/ejabberd/__init__.py @@ -50,7 +50,7 @@ class EjabberdApp(app_module.App): app_id = 'ejabberd' - _version = 9 + _version = 10 def __init__(self) -> None: """Create components for the app.""" @@ -98,8 +98,10 @@ class EjabberdApp(app_module.App): urls=['http://{host}/bosh/']) self.add(webserver) + # Always setup certificates for all domains to keep configuration + # simple. letsencrypt = LetsEncrypt( - 'letsencrypt-ejabberd', domains=get_domains, daemons=['ejabberd'], + 'letsencrypt-ejabberd', domains='*', daemons=['ejabberd'], should_copy_certificates=True, private_key_path='/etc/ejabberd/letsencrypt/{domain}/ejabberd.pem', certificate_path='/etc/ejabberd/letsencrypt/{domain}/ejabberd.pem', @@ -140,11 +142,10 @@ class EjabberdApp(app_module.App): logger.info('ejabberd service domain name - %s', domain_name) privileged.pre_install(domain_name) - # XXX: Configure all other domain names super().setup(old_version) - self.get_component('letsencrypt-ejabberd').setup_certificates( - [domain_name]) - privileged.setup(domain_name) + # Setup certificates for all domains to keep configuration simple + self.get_component('letsencrypt-ejabberd').setup_certificates() + privileged.setup() if not old_version: self.enable() diff --git a/plinth/modules/ejabberd/privileged.py b/plinth/modules/ejabberd/privileged.py index 85810d4cf..24b6321bf 100644 --- a/plinth/modules/ejabberd/privileged.py +++ b/plinth/modules/ejabberd/privileged.py @@ -45,7 +45,7 @@ def pre_install(domain_name: str): @privileged -def setup(domain_name: str): +def setup() -> None: """Enable LDAP authentication.""" with open(EJABBERD_CONFIG, 'r', encoding='utf-8') as file_handle: conf = yaml.load(file_handle) @@ -83,10 +83,16 @@ def setup(domain_name: str): conf['ldap_base'] = scalarstring.DoubleQuotedScalarString( 'ou=users,dc=thisbox') + # Read all available certificates + conf['certfiles'].append( + scalarstring.DoubleQuotedScalarString( + '/etc/ejabberd/letsencrypt/*/ejabberd.pem')) + conf['certfiles'] = list(set(conf['certfiles'])) + with open(EJABBERD_CONFIG, 'w', encoding='utf-8') as file_handle: yaml.dump(conf, file_handle) - _upgrade_config(domain_name) + _upgrade_config() try: action_utils.run(['ejabberdctl', 'restart'], check=True) @@ -95,7 +101,7 @@ def setup(domain_name: str): err) -def _upgrade_config(domain): +def _upgrade_config() -> None: """Fix the config file by removing deprecated settings.""" current_version = _get_version() if not current_version: @@ -125,13 +131,9 @@ def _upgrade_config(domain): if listen_port['port'] == 5280: listen_port['port'] = 5443 - cert_dir = Path('/etc/ejabberd/letsencrypt') / domain - cert_file = str(cert_dir / 'ejabberd.pem') - cert_file = scalarstring.DoubleQuotedScalarString(cert_file) - conf['s2s_certfile'] = cert_file - for listen_port in conf['listen']: - if 'certfile' in listen_port: - listen_port['certfile'] = cert_file + # s2s_certfile is deprecated in favor of certfiles + if 's2s_certfile' in conf: + conf.pop('s2s_certfile') # Write changes back to the file with open(EJABBERD_CONFIG, 'w', encoding='utf-8') as file_handle: diff --git a/plinth/modules/ejabberd/tests/test_functional.py b/plinth/modules/ejabberd/tests/test_functional.py index 101146c89..edd0e387b 100644 --- a/plinth/modules/ejabberd/tests/test_functional.py +++ b/plinth/modules/ejabberd/tests/test_functional.py @@ -118,7 +118,7 @@ def _jsxc_login(browser): """Login to JSXC.""" username = functional.config['DEFAULT']['username'] password = functional.config['DEFAULT']['password'] - functional.visit(browser, '/plinth/apps/jsxc/jsxc/') + functional.visit(browser, '/freedombox/apps/jsxc/jsxc/') assert functional.eventually(browser.find_by_text, ['BOSH Server reachable.']) if browser.find_by_text('relogin'): diff --git a/plinth/modules/email/__init__.py b/plinth/modules/email/__init__.py index b8de9b7a7..0bc6763a1 100644 --- a/plinth/modules/email/__init__.py +++ b/plinth/modules/email/__init__.py @@ -38,7 +38,7 @@ _description = [ 'they can add aliases to their email address. Necessary aliases ' 'such as "postmaster" are automatically created pointing to the ' 'first admin user.'), box_name=_(cfg.box_name)), - _('Roundcube app provides web ' + _('Roundcube app provides web ' 'interface for users to access email.'), _('During installation, any other email servers in the system will be ' 'uninstalled.') diff --git a/plinth/modules/email/data/usr/share/freedombox/etc/apache2/conf-available/email-freedombox.conf b/plinth/modules/email/data/usr/share/freedombox/etc/apache2/conf-available/email-freedombox.conf index f402a3cb3..88c8d49d8 100644 --- a/plinth/modules/email/data/usr/share/freedombox/etc/apache2/conf-available/email-freedombox.conf +++ b/plinth/modules/email/data/usr/share/freedombox/etc/apache2/conf-available/email-freedombox.conf @@ -14,10 +14,7 @@ ProxyAddHeaders off # Require SSO - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "admin" - + Use AuthOpenIDConnect # Automatic configuration for clients like Thunderbird: @@ -25,12 +22,12 @@ RewriteEngine On - RewriteRule ^ /plinth/apps/email/config.xml [PT] + RewriteRule ^ /freedombox/apps/email/config.xml [PT] # If Roundcube is not yet installed and the user clicks on 'Launch web client', # redirect to the installation page instead of Apache's Not Found page. - ErrorDocument 404 /plinth/apps/roundcube/ + ErrorDocument 404 /freedombox/apps/roundcube/ diff --git a/plinth/modules/featherwiki/data/usr/share/freedombox/etc/apache2/conf-available/featherwiki-freedombox.conf b/plinth/modules/featherwiki/data/usr/share/freedombox/etc/apache2/conf-available/featherwiki-freedombox.conf index b7a04be87..c272c93c1 100644 --- a/plinth/modules/featherwiki/data/usr/share/freedombox/etc/apache2/conf-available/featherwiki-freedombox.conf +++ b/plinth/modules/featherwiki/data/usr/share/freedombox/etc/apache2/conf-available/featherwiki-freedombox.conf @@ -5,10 +5,8 @@ Alias /featherwiki /var/lib/featherwiki - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "admin" "wiki" - + Use AuthOpenIDConnect + Use RequireGroup wiki # Disable caching diff --git a/plinth/modules/featherwiki/tests/test_functional.py b/plinth/modules/featherwiki/tests/test_functional.py index 812c54e97..4bc7dfb9a 100644 --- a/plinth/modules/featherwiki/tests/test_functional.py +++ b/plinth/modules/featherwiki/tests/test_functional.py @@ -27,7 +27,7 @@ class TestFeatherWikiApp(functional.BaseAppTests): return session_browser.links.find_by_href( - '/plinth/apps/featherwiki/create/').first.click() + '/freedombox/apps/featherwiki/create/').first.click() session_browser.find_by_id('id_featherwiki-name').fill(course_1) functional.submit(session_browser, form_class='form-featherwiki') @@ -73,7 +73,7 @@ class TestFeatherWikiApp(functional.BaseAppTests): new_course = 'A Midsummer Night\'s Dream' new_file_name = 'A_Midsummer_Nights_Dream.html' self._get_links_in_app_page( - session_browser, '/plinth/apps/featherwiki/' + file_name_1 + + session_browser, '/freedombox/apps/featherwiki/' + file_name_1 + '/rename/').first.click() session_browser.find_by_id('id_featherwiki-new_name').fill(new_course) functional.submit(session_browser, form_class='form-featherwiki') @@ -87,7 +87,7 @@ class TestFeatherWikiApp(functional.BaseAppTests): test_wiki_file = str(_test_data_dir / 'dummy_wiki.html') session_browser.links.find_by_href( - '/plinth/apps/featherwiki/upload/').first.click() + '/freedombox/apps/featherwiki/upload/').first.click() session_browser.attach_file('featherwiki-file', test_wiki_file) functional.submit(session_browser, form_class='form-featherwiki') @@ -98,7 +98,7 @@ class TestFeatherWikiApp(functional.BaseAppTests): self._create_wiki_file(session_browser) self._get_links_in_app_page( - session_browser, '/plinth/apps/featherwiki/' + file_name_1 + + session_browser, '/freedombox/apps/featherwiki/' + file_name_1 + '/delete/').first.click() functional.submit(session_browser, form_class='form-delete') diff --git a/plinth/modules/gitweb/__init__.py b/plinth/modules/gitweb/__init__.py index 5412ed193..2ebd419d8 100644 --- a/plinth/modules/gitweb/__init__.py +++ b/plinth/modules/gitweb/__init__.py @@ -145,6 +145,17 @@ class GitwebWebserverAuth(Webserver): if not have_public_repos(repos): super().enable() + def set_enabled(self, enabled): + """Update the internal enabled state of the component. + + Actually do nothing. This method is called when is_leader = False to + notify the enabled/disabled state of the app. Enabled/disabled state of + this component is actually decided by the webserver configuration. It + is expected that is_enabled is not called on this component to + determine if app is enabled or not. + """ + pass + class GitwebBackupRestore(BackupRestore): """Component to handle backup/restore for Gitweb.""" diff --git a/plinth/modules/gitweb/data/usr/share/freedombox/etc/apache2/conf-available/gitweb-freedombox-auth.conf b/plinth/modules/gitweb/data/usr/share/freedombox/etc/apache2/conf-available/gitweb-freedombox-auth.conf index 4bf4bef7e..953c8802d 100644 --- a/plinth/modules/gitweb/data/usr/share/freedombox/etc/apache2/conf-available/gitweb-freedombox-auth.conf +++ b/plinth/modules/gitweb/data/usr/share/freedombox/etc/apache2/conf-available/gitweb-freedombox-auth.conf @@ -4,8 +4,6 @@ ## is to be enabled when there are no public git projects. ## - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "git-access" "admin" - + Use AuthOpenIDConnect + Use RequireGroup git-access diff --git a/plinth/modules/gitweb/data/usr/share/freedombox/etc/apache2/conf-available/gitweb-freedombox.conf b/plinth/modules/gitweb/data/usr/share/freedombox/etc/apache2/conf-available/gitweb-freedombox.conf index 21bdd2469..334937986 100644 --- a/plinth/modules/gitweb/data/usr/share/freedombox/etc/apache2/conf-available/gitweb-freedombox.conf +++ b/plinth/modules/gitweb/data/usr/share/freedombox/etc/apache2/conf-available/gitweb-freedombox.conf @@ -24,11 +24,10 @@ Alias /gitweb /usr/share/gitweb # Make gitweb work with custom FreedomBox configuration. SetEnv GITWEB_CONFIG /etc/gitweb-freedombox.conf - - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "git-access" "admin" - + # Authentication is required for any operation if repository is private. + + Use AuthOpenIDConnect + Use RequireGroup git-access # Allow index.cgi symlink to gitweb.cgi to work. Treat gitweb.cgi as CGI diff --git a/plinth/modules/gitweb/data/usr/share/freedombox/etc/gitweb-freedombox.conf b/plinth/modules/gitweb/data/usr/share/freedombox/etc/gitweb-freedombox.conf index 9bed257f1..1bf2fb64a 100644 --- a/plinth/modules/gitweb/data/usr/share/freedombox/etc/gitweb-freedombox.conf +++ b/plinth/modules/gitweb/data/usr/share/freedombox/etc/gitweb-freedombox.conf @@ -52,7 +52,7 @@ our $project_maxdepth = 1; # export private repos only if authorized our $per_request_config = sub { - if(defined $ENV{'REMOTE_USER_TOKENS'}){ + if(defined $ENV{'REMOTE_USER'}){ our $export_auth_hook = sub { return 1; }; } else { diff --git a/plinth/modules/gitweb/tests/test_functional.py b/plinth/modules/gitweb/tests/test_functional.py index 5f8a67ee7..96147cc6f 100644 --- a/plinth/modules/gitweb/tests/test_functional.py +++ b/plinth/modules/gitweb/tests/test_functional.py @@ -144,7 +144,8 @@ def _create_repo(browser, repo, access=None, ok_if_exists=False): """Create repository.""" if not _repo_exists(browser, repo, access): _delete_repo(browser, repo, ignore_missing=True) - browser.links.find_by_href('/plinth/apps/gitweb/create/').first.click() + browser.links.find_by_href( + '/freedombox/apps/gitweb/create/').first.click() browser.find_by_id('id_gitweb-name').fill(repo) if access == 'private': browser.find_by_id('id_gitweb-is_private').check() @@ -182,7 +183,7 @@ def _delete_repo(browser, repo, ignore_missing=False): if repo.endswith('.git'): repo = repo[:-4] delete_link = browser.links.find_by_href( - '/plinth/apps/gitweb/{}/delete/'.format(repo)) + '/freedombox/apps/gitweb/{}/delete/'.format(repo)) if delete_link or not ignore_missing: delete_link.first.click() functional.submit(browser, form_class='form-delete') @@ -192,7 +193,7 @@ def _edit_repo_metadata(browser, repo, metadata): """Set repository metadata.""" functional.nav_to_module(browser, 'gitweb') browser.links.find_by_href( - '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click() + '/freedombox/apps/gitweb/{}/edit/'.format(repo)).first.click() browser.find_by_id('id_gitweb-name').fill(metadata['name']) browser.find_by_id('id_gitweb-description').fill(metadata['description']) browser.find_by_id('id_gitweb-owner').fill(metadata['owner']) @@ -214,7 +215,7 @@ def _get_repo_metadata(browser, repo): """Get repository metadata.""" functional.nav_to_module(browser, 'gitweb') browser.links.find_by_href( - '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click() + '/freedombox/apps/gitweb/{}/edit/'.format(repo)).first.click() metadata = {} for item in ['name', 'description', 'owner']: metadata[item] = browser.find_by_id('id_gitweb-' + item).value @@ -318,7 +319,7 @@ def _set_default_branch(browser, repo, branch): """Set default branch of the repository.""" functional.nav_to_module(browser, 'gitweb') browser.links.find_by_href( - '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click() + '/freedombox/apps/gitweb/{}/edit/'.format(repo)).first.click() browser.find_by_id('id_gitweb-default_branch').select(branch) functional.submit(browser, form_class='form-gitweb') @@ -327,7 +328,7 @@ def _set_repo_access(browser, repo, access): """Set repository as public or private.""" functional.nav_to_module(browser, 'gitweb') browser.links.find_by_href( - '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click() + '/freedombox/apps/gitweb/{}/edit/'.format(repo)).first.click() if access == 'private': browser.find_by_id('id_gitweb-is_private').check() else: diff --git a/plinth/modules/ikiwiki/tests/test_functional.py b/plinth/modules/ikiwiki/tests/test_functional.py index 183ceae07..dc5908fe1 100644 --- a/plinth/modules/ikiwiki/tests/test_functional.py +++ b/plinth/modules/ikiwiki/tests/test_functional.py @@ -34,7 +34,7 @@ def _create_wiki_if_needed(browser): wiki = browser.links.find_by_href('/ikiwiki/wiki') if not wiki: browser.links.find_by_href( - '/plinth/apps/ikiwiki/create/').first.click() + '/freedombox/apps/ikiwiki/create/').first.click() browser.find_by_id('id_ikiwiki-name').fill('wiki') browser.find_by_id('id_ikiwiki-admin_name').fill( functional.config['DEFAULT']['username']) @@ -47,7 +47,7 @@ def _delete_wiki(browser): """Delete wiki.""" functional.nav_to_module(browser, 'ikiwiki') browser.links.find_by_href( - '/plinth/apps/ikiwiki/wiki/delete/').first.click() + '/freedombox/apps/ikiwiki/wiki/delete/').first.click() functional.submit(browser, form_class='form-delete') diff --git a/plinth/modules/infinoted/static/icons/infinoted.svg b/plinth/modules/infinoted/static/icons/infinoted.svg index 21f5912bf..aa60bd9ab 100644 --- a/plinth/modules/infinoted/static/icons/infinoted.svg +++ b/plinth/modules/infinoted/static/icons/infinoted.svg @@ -547,10 +547,7 @@ transform="matrix(7.9999996,0,0,7.9999996,-6.2675384e-7,-454.9681)"> + transform="matrix(2.5383408,0,0,2.6577021,7.1241854,-114.1627)"> + transform="matrix(1.397125,0,0,1.544141,-15.4571,-35.73674)"> + transform="matrix(1.323582,0,0,1.43107,-44.38565,-15.30513)"> @@ -1184,9 +1142,6 @@ rx="0.96423656" cy="37.660271" cx="40.176521" - inkscape:export-ydpi="402.75018" - inkscape:export-xdpi="402.75018" - inkscape:export-filename="/home/tom/public_html/g16607.png" transform="rotate(37.0046,39.971478,37.125377)" id="path12413" style="opacity:0.55555558;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.61000001;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" /> diff --git a/plinth/modules/kiwix/tests/test_functional.py b/plinth/modules/kiwix/tests/test_functional.py index c23644b5d..5912c4622 100644 --- a/plinth/modules/kiwix/tests/test_functional.py +++ b/plinth/modules/kiwix/tests/test_functional.py @@ -74,7 +74,8 @@ class TestKiwixApp(functional.BaseAppTests): def _add_package(browser, file_name): """Add a package by uploading the ZIM file in kiwix app page.""" - browser.links.find_by_href('/plinth/apps/kiwix/package/add/').first.click() + browser.links.find_by_href( + '/freedombox/apps/kiwix/package/add/').first.click() browser.attach_file('kiwix-file', file_name) functional.submit(browser, form_class='form-kiwix') @@ -98,7 +99,7 @@ def _delete_package(browser, zim_id): """Delete a content package from the kiwix app page.""" functional.nav_to_module(browser, 'kiwix') link = browser.links.find_by_href( - f'/plinth/apps/kiwix/package/{zim_id}/delete/') + f'/freedombox/apps/kiwix/package/{zim_id}/delete/') if not link: raise ValueError('ZIM file missing!') @@ -114,6 +115,6 @@ def _is_anonymous_read_allowed(browser) -> bool: def _shortcut_exists(browser) -> bool: """Check that the Kiwix shortcut exists on the front page.""" - browser.visit(_default_url) + browser.visit(_default_url + '/freedombox/') links_found = browser.links.find_by_href('/kiwix') return len(links_found) == 1 diff --git a/plinth/modules/letsencrypt/privileged.py b/plinth/modules/letsencrypt/privileged.py index f96184cf2..6c673f2f8 100644 --- a/plinth/modules/letsencrypt/privileged.py +++ b/plinth/modules/letsencrypt/privileged.py @@ -160,21 +160,19 @@ def copy_certificate(managing_app: str, source_private_key: str, certificate_path.parent.mkdir(mode=0o755, parents=True, exist_ok=True) # Private key is only accessible to the user owner - old_mask = os.umask(0o177) - shutil.copyfile(source_private_key_path, private_key_path) + with action_utils.umask(0o177): + shutil.copyfile(source_private_key_path, private_key_path) - if certificate_path != private_key_path: - # Certificate is only writable by the user owner - os.umask(0o133) - shutil.copyfile(source_certificate_path, certificate_path) - else: - # If private key and certificate are the same file, append one after - # the other. - source_certificate_bytes = source_certificate_path.read_bytes() - with private_key_path.open(mode='a+b') as file_handle: - file_handle.write(source_certificate_bytes) - - os.umask(old_mask) + if certificate_path != private_key_path: + # Certificate is only writable by the user owner + with action_utils.umask(0o133): + shutil.copyfile(source_certificate_path, certificate_path) + else: + # If private key and certificate are the same file, append one + # after the other. + source_certificate_bytes = source_certificate_path.read_bytes() + with private_key_path.open(mode='a+b') as file_handle: + file_handle.write(source_certificate_bytes) shutil.chown(certificate_path, user=user_owner, group=group_owner) shutil.chown(private_key_path, user=user_owner, group=group_owner) diff --git a/plinth/modules/matrixsynapse/data/usr/share/freedombox/etc/apache2/conf-available/matrix-synapse-plinth.conf b/plinth/modules/matrixsynapse/data/usr/share/freedombox/etc/apache2/conf-available/matrix-synapse-plinth.conf index de4b878b5..4852e71bf 100644 --- a/plinth/modules/matrixsynapse/data/usr/share/freedombox/etc/apache2/conf-available/matrix-synapse-plinth.conf +++ b/plinth/modules/matrixsynapse/data/usr/share/freedombox/etc/apache2/conf-available/matrix-synapse-plinth.conf @@ -1,9 +1,24 @@ ## -## On all sites, provide Matrix Synapse on a default path: /_matrix. This is -## only useful for clients to login without specifying a server port. This is -## not useful for federation which requires SRV record or listening on port -## 8448. Further, federation requires same TLS public key to be provided to -## Apache and Matrix Synapse server. +## On all sites, provide Matrix API on a default path: /_matrix and Synapse +## Client API on path: /_synapse/client. This configuration as recommended at +## https://element-hq.github.io/synapse/latest/reverse_proxy.html . This is +## useful for clients to login without specifying a server port. This is not +## useful for federation which requires SRV record or listening on port 8448. +## Further, federation requires same TLS public key to be provided to Apache and +## Matrix Synapse server. ## -ProxyPass /_matrix http://localhost:8008/_matrix nocanon -ProxyPassReverse /_matrix http://localhost:8008/_matrix +AllowEncodedSlashes NoDecode + + + RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} + ProxyPreserveHost on + ProxyPass http://127.0.0.1:8008/_matrix nocanon + ProxyPassReverse http://127.0.0.1:8008/_matrix + + + + RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} + ProxyPreserveHost on + ProxyPass http://127.0.0.1:8008/_synapse/client nocanon + ProxyPassReverse http://127.0.0.1:8008/_synapse/client + diff --git a/plinth/modules/mediawiki/static/icons/mediawiki.svg b/plinth/modules/mediawiki/static/icons/mediawiki.svg index 8bc9feee4..4a9b11d6f 100644 --- a/plinth/modules/mediawiki/static/icons/mediawiki.svg +++ b/plinth/modules/mediawiki/static/icons/mediawiki.svg @@ -15,7 +15,7 @@ id="svg62" sodipodi:docname="mediawiki.svg" inkscape:version="1.0.2 (e86c870879, 2021-01-15)" - inkscape:export-filename="/home/bunny/work/freedombox/freedombox/static/themes/default/icons/mediawiki.png" + inkscape:export-filename="mediawiki.png" inkscape:export-xdpi="48" inkscape:export-ydpi="48"> Tuple[str, dict]: """Fill interactive terminal prompt for username and password.""" @@ -132,28 +116,16 @@ def uninstall(): ]) -def _get_database_config(): - """Retrieve database credentials.""" - db_connection_string = pathlib.Path(DATABASE_FILE).read_text().strip() - parsed_url = urlparse(db_connection_string) - return { - 'user': parsed_url.username, - 'password': parsed_url.password, - 'database': parsed_url.path.lstrip('/'), - 'host': parsed_url.hostname, - } - - @privileged def dump_database(): """Dump database to file.""" - config = _get_database_config() + config = dbconfig.get_credentials(DBCONFIG_PATH) postgres.dump_database(DB_BACKUP_FILE, config['database']) @privileged def restore_database(): """Restore database from file.""" - config = _get_database_config() + config = dbconfig.get_credentials(DBCONFIG_PATH) postgres.restore_database(DB_BACKUP_FILE, config['database'], config['user'], config['password']) diff --git a/plinth/modules/miniflux/tests/test_functional.py b/plinth/modules/miniflux/tests/test_functional.py index ffca4fca5..f3e5e685f 100644 --- a/plinth/modules/miniflux/tests/test_functional.py +++ b/plinth/modules/miniflux/tests/test_functional.py @@ -59,7 +59,8 @@ class TestMinifluxApp(functional.BaseAppTests): def _fill_credentials_form(browser, href): """Fill the user credentials form in Miniflux app.""" functional.nav_to_module(browser, 'miniflux') - functional.click_link_by_href(browser, f'/plinth/apps/miniflux/{href}/') + functional.click_link_by_href(browser, + f'/freedombox/apps/miniflux/{href}/') browser.fill('miniflux-username', CREDENTIALS['username']) browser.fill('miniflux-password', CREDENTIALS['password']) diff --git a/plinth/modules/mumble/manifest.py b/plinth/modules/mumble/manifest.py index b51c1d3e9..bd987690a 100644 --- a/plinth/modules/mumble/manifest.py +++ b/plinth/modules/mumble/manifest.py @@ -56,7 +56,7 @@ clients = [{ backup = { 'config': { - 'files': ['/etc/mumble-server.ini'] + 'files': ['/etc/mumble/mumble-server.ini'] }, 'data': { 'directories': ['/var/lib/mumble-server'] diff --git a/plinth/modules/mumble/privileged.py b/plinth/modules/mumble/privileged.py index f602087e1..ff51d111f 100644 --- a/plinth/modules/mumble/privileged.py +++ b/plinth/modules/mumble/privileged.py @@ -35,8 +35,8 @@ def check_setup() -> bool: @privileged def set_super_user_password(password: secret_str): - """Set the superuser password with murmurd command.""" - action_utils.run(['murmurd', '-readsupw'], input=password.encode(), + """Set the superuser password with mumble-server command.""" + action_utils.run(['mumble-server', '-readsupw'], input=password.encode(), check=False) diff --git a/plinth/modules/names/__init__.py b/plinth/modules/names/__init__.py index 2a80fa3b8..8e1e309ba 100644 --- a/plinth/modules/names/__init__.py +++ b/plinth/modules/names/__init__.py @@ -251,6 +251,15 @@ def on_domain_added(sender: str, domain_type: str, name: str = '', logger.info('Added domain %s of type %s with services %s', name, domain_type, str(services)) + # HACK: Call from here to here ensure that the on_domain_added can perform + # DomainName.list() iteration and get an updated list of domains. This + # won't happen if in the signal calling order, oidc module get notified + # first. A proper fix is being worked on as a complete overhaul to domain + # change notification mechanism. + from plinth.modules import oidc + oidc.on_domain_added(sender, domain_type, name, description, services, + **kwargs) + def on_domain_removed(sender: str, domain_type: str, name: str = '', **kwargs): """Remove domain from global list.""" @@ -258,6 +267,14 @@ def on_domain_removed(sender: str, domain_type: str, name: str = '', **kwargs): component_id = 'domain-' + sender + '-' + name components.DomainName.get(component_id).remove() logger.info('Removed domain %s of type %s', name, domain_type) + + # HACK: Call from here to here ensure that the on_domain_remove can + # perform DomainName.list() iteration and get an updated list of + # domains. This won't happen if in the signal calling order, oidc + # module get notified first. A proper fix is being worked on as a + # complete overhaul to domain change notification mechanism. + from plinth.modules import oidc + oidc.on_domain_removed(sender, domain_type, name, **kwargs) else: for domain_name in components.DomainName.list(): if domain_name.domain_type.component_id == domain_type: diff --git a/plinth/modules/names/tests/test_functional.py b/plinth/modules/names/tests/test_functional.py index 4e14d92da..c5d0b09c4 100644 --- a/plinth/modules/names/tests/test_functional.py +++ b/plinth/modules/names/tests/test_functional.py @@ -24,7 +24,7 @@ def test_change_hostname(session_browser): def _get_hostname(browser): - functional.visit(browser, '/plinth/sys/names/hostname/') + functional.visit(browser, '/freedombox/sys/names/hostname/') return browser.find_by_id('id_hostname-hostname').value diff --git a/plinth/modules/networks/templates/router_configuration_content.html b/plinth/modules/networks/templates/router_configuration_content.html index af407ded0..25cd3dc8d 100644 --- a/plinth/modules/networks/templates/router_configuration_content.html +++ b/plinth/modules/networks/templates/router_configuration_content.html @@ -32,7 +32,7 @@ {% blocktrans trimmed %} If you don't have control over your router, choose not to configure it. To see options to overcome this limitation, choose 'I dont have a public IP address' option - in Internet connection type selection. + in Internet connection type selection. {% endblocktrans %}

diff --git a/plinth/modules/oidc/__init__.py b/plinth/modules/oidc/__init__.py new file mode 100644 index 000000000..5c593cd0d --- /dev/null +++ b/plinth/modules/oidc/__init__.py @@ -0,0 +1,79 @@ +"""FreedomBox app for implementing a OpenID Connect Provider. + +With this app, FreedomBox implements a full OpenID Connect Provider along with +OpenID Discovery. Only authorization code grant type is currently supported but +can be easily extended to support other grant types if necessary. See this code +comment for quick understand of the flow works: +https://github.com/oauthlib/oauthlib/blob/master/oauthlib/oauth2/rfc6749/grant_types/authorization_code.py#L64 + +In the list of OpenID Connect claims provided to Relying Party, we override +django-oauth-toolkit's default 'sub' claim from being the user ID to username. +Additionally, we also provide basic profile information and 'freedombox_groups' +with list of all group names that the user account is part of. + +"Clients" or "Applications": must be registered before they can be used with +the Identity Provider. Dynamic Client Registration is not supported yet. The +OpenIDConnect FreedomBox component will help with this registration. + +Redirect URLs: After authorization is provided by the user, the URL of the +application to redirect to must be verified by the Identity Provider. This is +usually provided at the time of client registration. However, in FreedomBox, +since list of allowed domains keeps changing, the list of allowed redirect URLs +must keep changing as well. The OpenIDConnect component will also help with +that. Finally, there is overridden verification logic that ensures that +accessing protected applications using IP addresses or localhost domain names +in URLs is allowed. + +The implement is done by implementing all the URLs in /freedombox/o. Most of +the implementation for these views and models is provided by +django-oauth-toolkit. +""" + +import logging + +from django.utils.translation import gettext_lazy as _ + +from plinth import app as app_module + +from . import components + +logger = logging.getLogger(__name__) + + +class OIDCApp(app_module.App): + """FreedomBox app for OpenID Connect Provider.""" + + app_id = 'oidc' + + _version = 1 + + def __init__(self) -> None: + """Create components for the app.""" + super().__init__() + + info = app_module.Info(app_id=self.app_id, version=self._version, + is_essential=True, + name=_('OpenID Connect Provider')) + self.add(info) + + +def on_domain_added(sender: str, domain_type: str, name: str = '', + description: str = '', + services: str | list[str] | None = None, **kwargs): + """Add domain to global list.""" + if not domain_type or not name: + return + + logger.info('Updating all OpenID Connect components for domain add - %s', + name) + components.OpenIDConnect.update_domains_for_all() + + +def on_domain_removed(sender: str, domain_type: str, name: str = '', **kwargs): + """Remove domain from global list.""" + if not domain_type or not name: + return + + logger.info( + 'Updating all OpenID Connect components for domain remove - %s', name) + components.OpenIDConnect.update_domains_for_all() diff --git a/plinth/modules/oidc/components.py b/plinth/modules/oidc/components.py new file mode 100644 index 000000000..8449e960f --- /dev/null +++ b/plinth/modules/oidc/components.py @@ -0,0 +1,169 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""App component for other apps to authenticate with OpenID Connect.""" + +from plinth import app as app_module + + +class OpenIDConnect(app_module.FollowerComponent): + """Component to authentication with OpenID Connection.""" + + def __init__(self, component_id: str, client_id: str, name: str, + redirect_uris: list[str], skip_authorization: bool = False): + """Initialize the OpenID Connect component. + + name is a description name for the client that is only used for record + keeping. + + client_id is ID to use when registring the app as client (relying + party) with FreedomBox's OpenID Connect Provider. + + redirect_uris is list of string containing URIs that the user's agent + may be redirected to after successful authentication. If the URIs + contain {domain} in their string, it will be expanded to the list of + all domains configured in FreedomBox. + """ + super().__init__(component_id) + + self.client_id = client_id + self.name = name + self.redirect_uris = redirect_uris + self.post_logout_redirect_uris = '' # None is not allowed + self._client_type = None + self._authorization_grant_type = None + self._algorithm = None + self.hash_client_secret = False + self.skip_authorization = skip_authorization + + @property + def client_type(self): + """Return the client type. + + This is a property instead of a simple attribute to avoid importing + Application model during component.__init__(). This would require + Django to be configured. + """ + from oauth2_provider.models import Application + return self._client_type or Application.CLIENT_CONFIDENTIAL + + @client_type.setter + def client_type(self, value): + """Set the client type.""" + self._client_type = value + + @property + def authorization_grant_type(self): + """Return the authorization grant type. + + This is a property instead of a simple attribute to avoid importing + Application model during component.__init__(). This would require + Django to be configured. + """ + from oauth2_provider.models import Application + return (self._authorization_grant_type + or Application.GRANT_AUTHORIZATION_CODE) + + @authorization_grant_type.setter + def authorization_grant_type(self, value): + """Set the authorization grant type.""" + self._authorization_grant_type = value + + @property + def algorithm(self): + """Return the algorithm. + + This is a property instead of a simple attribute to avoid importing + Application model during component.__init__(). This would require + Django to be configured. + """ + from oauth2_provider.models import Application + return self._algorithm or Application.HS256_ALGORITHM + + @algorithm.setter + def algorithm(self, value): + """Set the algorithm.""" + self._algorithm = value + + def get_client_secret(self): + """Return the client secret stored for the application.""" + from oauth2_provider.models import Application + return Application.objects.get_by_natural_key( + self.client_id).client_secret + + def setup(self, old_version: int) -> None: + """Register the app as client.""" + self._create_or_update_application() + + @staticmethod + def update_domains_for_all(): + """For all app components, update redirect URIs and allowed origins.""" + for app in app_module.App.list(): + for component in app.components.values(): + if isinstance(component, OpenIDConnect): + component._create_or_update_application() + + def _create_or_update_application(self) -> None: + """Register the app as client.""" + from oauth2_provider.models import Application + try: + application = Application.objects.get_by_natural_key( + self.client_id) + self._update_application(application) + except Application.DoesNotExist: + self._create_application() + + def _create_application(self) -> None: + """Create a new application object.""" + from oauth2_provider import generators + from oauth2_provider.models import Application + client_secret = generators.generate_client_secret() + Application.objects.create( + client_id=self.client_id, client_secret=client_secret, user=None, + redirect_uris=self._get_redirect_uris(), + post_logout_redirect_uris=self.post_logout_redirect_uris, + client_type=self.client_type, + authorization_grant_type=self.authorization_grant_type, + hash_client_secret=self.hash_client_secret, name=str(self.name), + algorithm=self.algorithm, + allowed_origins=self._get_allowed_origins(), + skip_authorization=self.skip_authorization) + + def _update_application(self, application) -> None: + """Update configuration for an existing application.""" + application.user = None + application.redirect_uris = self._get_redirect_uris() + application.post_logout_redirect_uris = self.post_logout_redirect_uris + application.client_type = self.client_type + application.authorization_grant_type = self.authorization_grant_type + application.hash_client_secret = self.hash_client_secret + application.name = str(self.name) + application.algorithm = self.algorithm + application.allowed_origins = self._get_allowed_origins() + application.skip_authorization = self.skip_authorization + application.save() + + def _get_redirect_uris(self) -> str: + """Return an expanded list of redirect URIs.""" + from plinth.modules.names.components import DomainName + final_uris = [] + # redirect_uris list can't be empty. Otherwise, validations for + # 'localhost' and IP addresses won't work. + domains = set(DomainName.list_names()) | {'localhost'} + for uri in self.redirect_uris: + if '{domain}' in uri: + for domain in domains: + final_uris.append(uri.format(domain=domain)) + else: + final_uris.append(uri) + + return ' '.join(final_uris) + + def _get_allowed_origins(self) -> str: + """Return a list of all allowed origins for CORS header.""" + from plinth.modules.names.components import DomainName + + # redirect_uris list can't be empty. Otherwise, validations for + # 'localhost' and IP addresses won't work. Keep origins in line with + # redirect_uris. + domains = set(DomainName.list_names()) | {'localhost'} + origins = [f'https://{domain_name}' for domain_name in domains] + return ' '.join(origins) diff --git a/plinth/modules/oidc/data/usr/share/freedombox/modules-enabled/oidc b/plinth/modules/oidc/data/usr/share/freedombox/modules-enabled/oidc new file mode 100644 index 000000000..2060a32b2 --- /dev/null +++ b/plinth/modules/oidc/data/usr/share/freedombox/modules-enabled/oidc @@ -0,0 +1 @@ +plinth.modules.oidc diff --git a/plinth/modules/oidc/templates/oauth2_provider/authorize.html b/plinth/modules/oidc/templates/oauth2_provider/authorize.html new file mode 100644 index 000000000..60d689d84 --- /dev/null +++ b/plinth/modules/oidc/templates/oauth2_provider/authorize.html @@ -0,0 +1,69 @@ +{% extends "base.html" %} +{% comment %} +# SPDX-License-Identifier: AGPL-3.0-or-later +{% endcomment %} + +{% load i18n %} +{% load static %} +{% load bootstrap %} + +{% block wrapper %} +
+
+ {% trans + {% trans + {{ box_name }} +
+ +

{% trans "Authorize App" %}

+ + {% if not error %} + + {% csrf_token %} + + {% for field in form %} + {% if field.is_hidden %} + {{ field }} + {% endif %} + {% endfor %} + +
    +
  • + {% trans application.name as app %} + {% blocktrans trimmed with username=request.user.username %} + {{ app }} wants to access your account + {{ username }} + {% endblocktrans %} +
  • + {% for scope in scopes_descriptions %} +
  • {% trans scope %}
  • + {% endfor %} +
+ + {{ form.errors }} + {{ form.non_field_errors }} + +
+ +
+ + +

+ {% blocktrans trimmed with url=form.redirect_uri.value %} + Authorizing will redirect to {{ url }} + {% endblocktrans %} +

+ {% else %} +

{% trans "Error:" %} {{ error.error }}

+

{{ error.description }}

+ {% endif %} + +
+{% endblock %} diff --git a/plinth/modules/sso/tests/__init__.py b/plinth/modules/oidc/tests/__init__.py similarity index 100% rename from plinth/modules/sso/tests/__init__.py rename to plinth/modules/oidc/tests/__init__.py diff --git a/plinth/modules/oidc/tests/test_components.py b/plinth/modules/oidc/tests/test_components.py new file mode 100644 index 000000000..4c8349a3b --- /dev/null +++ b/plinth/modules/oidc/tests/test_components.py @@ -0,0 +1,104 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Test the components provides by oidc app.""" + +from unittest.mock import patch + +import pytest +from oauth2_provider.models import Application + +from ..components import OpenIDConnect + + +@pytest.fixture(name='openid_connect') +def fixture_openid_connect(): + """Return an OpenIDConnect object.""" + return OpenIDConnect( + 'test-openidconnect', 'test-client', 'Test Client', + ['https://testdomain.example/a', 'https://{domain}/b']) + + +def test_openidconnect_init(): + """Test initialization of openidconnect object.""" + component = OpenIDConnect('test-openidconnect', 'test-client', + 'Test Client', ['https://testdomain.example/a']) + assert component.component_id == 'test-openidconnect' + assert component.client_id == 'test-client' + assert component.name == 'Test Client' + assert component.redirect_uris == ['https://testdomain.example/a'] + assert component.post_logout_redirect_uris == '' + assert component.client_type == Application.CLIENT_CONFIDENTIAL + assert component.authorization_grant_type == \ + Application.GRANT_AUTHORIZATION_CODE + assert component.algorithm == Application.HS256_ALGORITHM + assert not component.hash_client_secret + assert not component.skip_authorization + + component = OpenIDConnect('test-openidconnect', 'test-client', + 'Test Client', ['https://testdomain.example/a'], + skip_authorization=True) + assert component.skip_authorization + + +@pytest.mark.django_db +def test_get_client_secret(openid_connect): + """Test retrieving client secret.""" + with pytest.raises(Application.DoesNotExist): + openid_connect.get_client_secret() + + openid_connect.setup(old_version=0) + assert len(openid_connect.get_client_secret()) == 128 + + +@pytest.mark.django_db +@patch('plinth.modules.names.components.DomainName.list_names') +def test_setup(list_names, openid_connect): + """Test creating a DB object.""" + list_names.return_value = ('a.example', 'b.example') + expected_redirect_uris = [ + 'https://testdomain.example/a', 'https://a.example/b', + 'https://b.example/b', 'https://localhost/b' + ] + expected_origins = [ + 'https://a.example', 'https://b.example', 'https://localhost' + ] + + # Test creating fresh DB entry + openid_connect.setup(old_version=0) + obj = Application.objects.get(client_id=openid_connect.client_id) + assert obj.client_id == openid_connect.client_id + assert len(obj.client_secret) == 128 + assert not obj.user + assert set(obj.redirect_uris.split(' ')) == set(expected_redirect_uris) + assert obj.post_logout_redirect_uris == '' + assert obj.client_type == Application.CLIENT_CONFIDENTIAL + assert obj.authorization_grant_type == Application.GRANT_AUTHORIZATION_CODE + assert not obj.hash_client_secret + assert obj.name == 'Test Client' + assert obj.algorithm == Application.HS256_ALGORITHM + assert set(obj.allowed_origins.split(' ')) == set(expected_origins) + assert not obj.skip_authorization + + # Test updating existing DB entry + list_names.return_value = ('c.example', ) + expected_redirect_uris = ['https://c.example/c', 'https://localhost/c'] + expected_origins = ['https://c.example', 'https://localhost'] + openid_connect.redirect_uris = ['https://{domain}/c'] + openid_connect.allowed_origins = expected_origins + openid_connect.post_logout_redirect_uris = 'a b' + openid_connect.client_type = Application.CLIENT_PUBLIC + openid_connect.authorization_grant_type = Application.GRANT_IMPLICIT + openid_connect.hash_client_secret = True + openid_connect.name = 'New name' + openid_connect.algorithm = Application.RS256_ALGORITHM + openid_connect.skip_authorization = True + openid_connect.setup(old_version=0) + obj = Application.objects.get(client_id=openid_connect.client_id) + assert set(obj.redirect_uris.split(' ')) == set(expected_redirect_uris) + assert set(obj.allowed_origins.split(' ')) == set(expected_origins) + assert obj.post_logout_redirect_uris == 'a b' + assert obj.client_type == Application.CLIENT_PUBLIC + assert obj.authorization_grant_type == Application.GRANT_IMPLICIT + assert obj.hash_client_secret + assert obj.name == 'New name' + assert obj.algorithm == Application.RS256_ALGORITHM + assert obj.skip_authorization diff --git a/plinth/modules/oidc/urls.py b/plinth/modules/oidc/urls.py new file mode 100644 index 000000000..d82ec98ca --- /dev/null +++ b/plinth/modules/oidc/urls.py @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""URLs for the OpenID Connect module. + +All the '/freedombox/o' URLs are implemented in this module by including them +from django-oauth-toolkit. However, they are included in plinth/urls.py instead +of here because FreedomBox module loading logic automatically namespaces the +URL names. This causes problems when metadata view tries to resolve URLs. + +/.well-known/openid-configuration is proxied to +/freedombox/o/.well-known/openid-configuration by Apache2. Similarly, +/.well-known/jwks.json is proxied to /freedombox/o/.well-known/jwks.json. + +Important URLs: + +- /freedombox/o is the primary URL for identity provider. + +- /freedombox/o/.well-known/openid-configuration is the way to discover +additional URLs (such as ./authorize and ./token) needed for OIDC to work. + +- /freedombox/o/authorize is used to start the authorization process and get an +authorization code grant. + +- /freedombox/o/token is used to get access token and refresh token using the +authorization code. It is also used to get a new access token using the refresh +token. + +- /freedombox/o/userinfo provides the claims such as 'sub', 'email', +'freedombox_groups' using an access token. +""" + +urlpatterns: list = [] diff --git a/plinth/modules/oidc/validators.py b/plinth/modules/oidc/validators.py new file mode 100644 index 000000000..0003539c4 --- /dev/null +++ b/plinth/modules/oidc/validators.py @@ -0,0 +1,124 @@ +"""Custom OpenID Connect validators.""" + +import ipaddress +import urllib.parse + +from oauth2_provider import oauth2_validators + +from plinth import action_utils + + +class OAuth2Validator(oauth2_validators.OAuth2Validator): + """Add/override claims into Discovery and ID token. + + Ensure that basic profile information is available to the clients. Make the + value of the 'sub' claim, as defined in OpenID Connect, to be the username + of the account instead of the Django account ID. The username is unique in + FreedomBox. + + We wish for the applications using the Identity Provider to also + provide/deny resources based on the groups that the user is part of. For + this, we add an additional scope "freedombox_groups" and additional claim + "freedombox_groups". To define custom scopes and claims, we need to ensure + that the keys used are unique and will not clash with other + implementations. 'freedombox_' prefix seems reasonable. The value of this + claim is a list of all groups that the user account is part of. + """ + + # Add a scope, as recommended in the oauth-toolkit documentation. + oidc_claim_scope = oauth2_validators.OAuth2Validator.oidc_claim_scope + oidc_claim_scope.update({'freedombox_groups': 'freedombox_groups'}) + + def get_additional_claims(self): + """Override value of 'sub' claim and add other claims. + + Only the 'sub' claim is filled by default by django-oauth-toolkit. The + rest, as needed, must be filled by us. + + Use the 'second' form of get_additional_claims override as + documentation suggests so that the base code and automatically add the + list of claims returned here to list of supported claims. + """ + + def _get_user_groups(request): + return list(request.user.groups.values_list('name', flat=True)) + + return { + 'sub': lambda request: request.user.username, + 'email': lambda request: request.user.email, + 'preferred_username': lambda request: request.user.username, + 'freedombox_groups': _get_user_groups, + } + + def validate_redirect_uri(self, client_id, redirect_uri, request, *args, + **kwargs): + """Additionally allow redirection to this server's IPs and domains.""" + allowed_redirect_uris = request.client.redirect_uris.split() + if _validate_local_domains_and_ips(redirect_uri, request, + allowed_redirect_uris): + return True + + return super().validate_redirect_uri(client_id, redirect_uri, request, + *args, **kwargs) + + +def _validate_local_domains_and_ips(redirect_uri, request, + allowed_redirect_uris): + """Allow redirect to local domains and IPs. + + See models.py:redirect_to_uri_allowed() in django-oauth-toolkit for + reference. + + Path and query part of the redirect URL must always match with one of the + configured redirect URLs for this application. The query in the redirect + URI is allowed to be a subset of the allowed query. + + Localhost domains (localhost, ip6-localhost, and ip6-loopback) are allowed + in redirect URLs. Scheme and port are not checked. + + An IP address based redirect URL is accepted as long as it is to the same + IP address with which the FreedomBox's Identity Provider is being accessed. + Scheme is not checked. Changing IP address during OpenID Connect flow is + not allowed. + """ + request_host = request.headers.get('HTTP_HOST') + + parsed_redirect_uri = urllib.parse.urlparse(redirect_uri) + + redirect_uri_query_set = set( + urllib.parse.parse_qs(parsed_redirect_uri.query)) + try: + ipaddress.ip_address(parsed_redirect_uri.hostname) + redirect_uri_is_ip = True + except ValueError: + redirect_uri_is_ip = False + + redirect_uri_is_localhost = parsed_redirect_uri.hostname in ( + 'localhost', 'ip6-localhost', 'ip6-loopback', + action_utils.get_hostname()) + + for allowed_uri in allowed_redirect_uris: + parsed_allowed_uri = urllib.parse.urlparse(allowed_uri) + + # Path must match one of the allowed paths + if parsed_redirect_uri.path != parsed_allowed_uri.path: + continue + + # Query must be a subset of allowed query + allowed_query_set = set(urllib.parse.parse_qs( + parsed_allowed_uri.query)) + if not allowed_query_set.issubset(redirect_uri_query_set): + continue + + # If the redirect is to an IP address, it is only allowed if the IDP + # itself is being accessed with that IP address. + if (redirect_uri_is_ip and request_host + and parsed_redirect_uri.netloc == request_host): + return True + + # If the redirect is to a 'localhost' like address, a port mismatch is + # allowed. + if redirect_uri_is_localhost: + return True + + return False # Special criteria didn't match, do usual checks. diff --git a/plinth/modules/openvpn/tests/test_functional.py b/plinth/modules/openvpn/tests/test_functional.py index 4c8aeda47..dd901c5e1 100644 --- a/plinth/modules/openvpn/tests/test_functional.py +++ b/plinth/modules/openvpn/tests/test_functional.py @@ -4,6 +4,7 @@ Functional, browser based tests for openvpn app. """ import pytest + from plinth.tests import functional pytestmark = [pytest.mark.apps, pytest.mark.openvpn] @@ -30,10 +31,12 @@ class TestOpenvpnApp(functional.BaseAppTests): if not functional.user_exists(session_browser, 'nonvpnuser'): functional.create_user(session_browser, 'nonvpnuser', groups=[]) - functional.login_with_account(session_browser, base_url, 'vpnuser') + functional.login_with_account(session_browser, + base_url + '/freedombox/', 'vpnuser') _download_profile(session_browser) - functional.login_with_account(session_browser, base_url, 'nonvpnuser') + functional.login_with_account(session_browser, + base_url + '/freedombox/', 'nonvpnuser') _not_on_front_page(session_browser) functional.login(session_browser) @@ -64,5 +67,5 @@ def _download_profile(browser): """Return the content of the current user's OpenVPN profile.""" browser.visit(base_url) browser.links.find_by_href(shortcut_href).click() - profile_url = f'{base_url}/plinth/apps/openvpn/profile/' + profile_url = f'{base_url}/freedombox/apps/openvpn/profile/' return functional.download_file(browser, profile_url) diff --git a/plinth/modules/quassel/privileged.py b/plinth/modules/quassel/privileged.py index bab66e9dd..c5b4e29e3 100644 --- a/plinth/modules/quassel/privileged.py +++ b/plinth/modules/quassel/privileged.py @@ -11,3 +11,5 @@ def set_domain(domain_name: str): """Write a file containing domain name.""" domain_file = pathlib.Path('/var/lib/quassel/domain-freedombox') domain_file.write_text(domain_name, encoding='utf-8') + # Ensure that that file is readable by non-privileged process. + domain_file.chmod(0o644) diff --git a/plinth/modules/rssbridge/data/usr/share/freedombox/etc/apache2/conf-available/rss-bridge.conf b/plinth/modules/rssbridge/data/usr/share/freedombox/etc/apache2/conf-available/rss-bridge.conf index 2c7e892ca..ee8cced26 100644 --- a/plinth/modules/rssbridge/data/usr/share/freedombox/etc/apache2/conf-available/rss-bridge.conf +++ b/plinth/modules/rssbridge/data/usr/share/freedombox/etc/apache2/conf-available/rss-bridge.conf @@ -15,10 +15,8 @@ Alias /rss-bridge /usr/share/rss-bridge
# Formats: Html and all other pages - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "feed-reader" "admin" - + Use AuthOpenIDConnect + Use RequireGroup feed-reader diff --git a/plinth/modules/searx/data/usr/share/freedombox/etc/apache2/conf-available/searx-freedombox-auth.conf b/plinth/modules/searx/data/usr/share/freedombox/etc/apache2/conf-available/searx-freedombox-auth.conf index 86c4e727b..b65db00ba 100644 --- a/plinth/modules/searx/data/usr/share/freedombox/etc/apache2/conf-available/searx-freedombox-auth.conf +++ b/plinth/modules/searx/data/usr/share/freedombox/etc/apache2/conf-available/searx-freedombox-auth.conf @@ -1,9 +1,5 @@ - Include includes/freedombox-single-sign-on.conf - - - TKTAuthToken "web-search" "admin" - - ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/ + Use AuthOpenIDConnect + Use RequireGroup web-search diff --git a/plinth/modules/searx/static/icons/searx.svg b/plinth/modules/searx/static/icons/searx.svg index d28226f0d..e8a045304 100644 --- a/plinth/modules/searx/static/icons/searx.svg +++ b/plinth/modules/searx/static/icons/searx.svg @@ -16,7 +16,7 @@ version="1.1" inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="searx.svg" - inkscape:export-filename="/home/a/magnif.png" + inkscape:export-filename="magnif.png" inkscape:export-xdpi="203.1774" inkscape:export-ydpi="203.1774"> None: """Create components for the app.""" diff --git a/plinth/modules/sharing/privileged.py b/plinth/modules/sharing/privileged.py index 683e6f2a4..1a9462199 100644 --- a/plinth/modules/sharing/privileged.py +++ b/plinth/modules/sharing/privileged.py @@ -20,6 +20,26 @@ def setup(): if not path.exists(): path.touch() + _migrate_old_style_auth() + + +def _migrate_old_style_auth(): + """Migration from auth_pubtkt to auth_openidc.""" + aug = load_augeas() + if not aug.match('$conf//directive["TKTAuthToken"]'): + return + + shares = _list(aug) + for share in shares: + _remove(aug, share['name']) + + for share in shares: + _add(aug, share['name'], share['path'], share['groups'], + share['is_public']) + + aug.save() + action_utils.service_reload('apache2') + def load_augeas(): """Initialize augeas for this app's configuration file.""" @@ -37,8 +57,6 @@ def load_augeas(): @privileged def add(name: str, path: str, groups: list[str], is_public: bool): """Add a share to Apache configuration.""" - path = '"' + path.replace('"', r'\"') + '"' - url = '/share/' + name if not os.path.exists(APACHE_CONFIGURATION): pathlib.Path(APACHE_CONFIGURATION).touch() @@ -48,6 +66,18 @@ def add(name: str, path: str, groups: list[str], is_public: bool): if any([share for share in shares if share['name'] == name]): raise Exception('Share already present') + _add(aug, name, path, groups, is_public) + aug.save() + + with action_utils.WebserverChange() as webserver_change: + webserver_change.enable('sharing-freedombox') + + +def _add(aug, name: str, path: str, groups: list[str], is_public: bool): + """Insert a share using augeas.""" + path = '"' + path.replace('"', r'\"') + '"' + url = '/share/' + name + aug.set('$conf/directive[last() + 1]', 'Alias') aug.set('$conf/directive[last()]/arg[1]', url) aug.set('$conf/directive[last()]/arg[2]', path) @@ -59,34 +89,36 @@ def add(name: str, path: str, groups: list[str], is_public: bool): 'includes/freedombox-sharing.conf') if not is_public: - aug.set('$conf/Location[last()]/directive[last() + 1]', 'Include') - aug.set('$conf/Location[last()]/directive[last()]/arg', - 'includes/freedombox-single-sign-on.conf') + aug.set('$conf/Location[last()]/directive[last() + 1]', 'Use') + aug.set('$conf/Location[last()]/directive[last()]/arg[1]', + 'AuthOpenIDConnect') - aug.set('$conf/Location[last()]/IfModule/arg', 'mod_auth_pubtkt.c') - aug.set('$conf/Location[last()]/IfModule/directive[1]', 'TKTAuthToken') for group_name in groups: - aug.set( - '$conf/Location[last()]/IfModule/directive[1]/arg[last() + 1]', - group_name) + aug.set('$conf/Location[last()]/directive[last() + 1]', 'Use') + aug.set('$conf/Location[last()]/directive[last()]/arg[1]', + 'RequireGroup') + aug.set('$conf/Location[last()]/directive[last()]/arg[2]', + group_name) else: aug.set('$conf/Location[last()]/directive[last() + 1]', 'Require') aug.set('$conf/Location[last()]/directive[last()]/arg[1]', 'all') aug.set('$conf/Location[last()]/directive[last()]/arg[2]', 'granted') + +@privileged +def remove(name: str): + """Remove a share from Apache configuration.""" + aug = load_augeas() + _remove(aug, name) aug.save() with action_utils.WebserverChange() as webserver_change: webserver_change.enable('sharing-freedombox') -@privileged -def remove(name: str): - """Remove a share from Apache configuration.""" +def _remove(aug, name: str): + """Remove from configuration using augeas lens.""" url_to_remove = '/share/' + name - - aug = load_augeas() - for directive in aug.match('$conf/directive'): if aug.get(directive) != 'Alias': continue @@ -100,11 +132,6 @@ def remove(name: str): if url == url_to_remove: aug.remove(location) - aug.save() - - with action_utils.WebserverChange() as webserver_change: - webserver_change.enable('sharing-freedombox') - def _get_name_from_url(url): """Return the name of the share given the URL for it.""" @@ -150,9 +177,16 @@ def _list(aug=None): continue groups = [] + # Old style pubtkt configuration for group in aug.match(location + '//directive["TKTAuthToken"]/arg'): groups.append(aug.get(group)) + # New style OpenID Connect configuration + for require_group in aug.match( + location + '//directive["Use" and arg[1] = "RequireGroup"]'): + group = aug.get(require_group + '/arg[2]') + groups.append(group) + def _is_public(): """Must contain the line 'Require all granted'.""" require = location + '//directive["Require"]' diff --git a/plinth/modules/sharing/tests/test_functional.py b/plinth/modules/sharing/tests/test_functional.py index 1dc238af2..77aab943b 100644 --- a/plinth/modules/sharing/tests/test_functional.py +++ b/plinth/modules/sharing/tests/test_functional.py @@ -80,7 +80,7 @@ def _remove_share(browser, name): def _add_share(browser, name, path, group): """Add a share in sharing app.""" - functional.visit(browser, '/plinth/apps/sharing/add/') + functional.visit(browser, '/freedombox/apps/sharing/add/') browser.fill('sharing-name', name) browser.fill('sharing-path', path) browser.find_by_css( @@ -102,7 +102,7 @@ def _edit_share(browser, old_name, new_name, path, group): def _get_share(browser, name): """Return the row for a given share.""" - functional.visit(browser, '/plinth/apps/sharing/') + functional.visit(browser, '/freedombox/apps/sharing/') return browser.find_by_id('share-{}'.format(name))[0] @@ -148,4 +148,4 @@ def _verify_nonexistant_share(browser, name): def _verify_inaccessible_share(browser, name): """Verify that given URL for a given share name denies permission.""" functional.visit(browser, f'/share/{name}') - functional.eventually(lambda: '/plinth' in browser.url, args=[]) + functional.eventually(lambda: '/freedombox' in browser.url, args=[]) diff --git a/plinth/modules/snapshot/__init__.py b/plinth/modules/snapshot/__init__.py index 6b211c938..7dca6336a 100644 --- a/plinth/modules/snapshot/__init__.py +++ b/plinth/modules/snapshot/__init__.py @@ -24,7 +24,7 @@ _description = [ 'automatically cleaned up according to the settings below.'), _('Snapshots currently work on btrfs file systems only and on the root ' 'partition only. Snapshots are not a replacement for ' - 'backups since ' + 'backups since ' 'they can only be stored on the same partition. ') ] diff --git a/plinth/modules/snapshot/tests/test_functional.py b/plinth/modules/snapshot/tests/test_functional.py index fb39aa58b..88664a3b8 100644 --- a/plinth/modules/snapshot/tests/test_functional.py +++ b/plinth/modules/snapshot/tests/test_functional.py @@ -61,7 +61,7 @@ def _empty_snapshots_list(browser): def _delete_all(browser): - functional.visit(browser, '/plinth/sys/snapshot/manage/') + functional.visit(browser, '/freedombox/sys/snapshot/manage/') delete_button = browser.find_by_name('delete_selected').first if not delete_button['disabled']: browser.find_by_id('select-all').check() @@ -73,13 +73,13 @@ def _delete_all(browser): def _create_snapshot(browser): - functional.visit(browser, '/plinth/sys/snapshot/manage/') + functional.visit(browser, '/freedombox/sys/snapshot/manage/') create_button = browser.find_by_name('create').first functional.submit(browser, element=create_button) def _get_count(browser): - functional.visit(browser, '/plinth/sys/snapshot/manage/') + functional.visit(browser, '/freedombox/sys/snapshot/manage/') # Subtract 1 for table header return len(browser.find_by_xpath('//tr')) - 1 diff --git a/plinth/modules/sso/__init__.py b/plinth/modules/sso/__init__.py deleted file mode 100644 index a649c2be2..000000000 --- a/plinth/modules/sso/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -"""FreedomBox app to configure Single Sign On services.""" - -from django.utils.translation import gettext_lazy as _ - -from plinth import app as app_module -from plinth.config import DropinConfigs -from plinth.package import Packages - -from . import privileged - - -class SSOApp(app_module.App): - """FreedomBox app for single sign on.""" - - app_id = 'sso' - - _version = 3 - - def __init__(self) -> None: - """Create components for the app.""" - super().__init__() - - info = app_module.Info(app_id=self.app_id, version=self._version, - is_essential=True, - depends=['security', - 'apache'], name=_('Single Sign On')) - self.add(info) - - packages = Packages( - 'packages-sso', - ['libapache2-mod-auth-pubtkt', 'python3-cryptography', 'flite']) - self.add(packages) - - dropin_configs = DropinConfigs('dropin-configs-sso', [ - '/etc/apache2/includes/freedombox-single-sign-on.conf', - ]) - self.add(dropin_configs) - - def setup(self, old_version): - """Install and configure the app.""" - super().setup(old_version) - privileged.create_key_pair() diff --git a/plinth/modules/sso/data/usr/share/freedombox/etc/apache2/includes/freedombox-single-sign-on.conf b/plinth/modules/sso/data/usr/share/freedombox/etc/apache2/includes/freedombox-single-sign-on.conf deleted file mode 100644 index 09cb21ba6..000000000 --- a/plinth/modules/sso/data/usr/share/freedombox/etc/apache2/includes/freedombox-single-sign-on.conf +++ /dev/null @@ -1,21 +0,0 @@ - - - TKTAuthPublicKey /etc/apache2/auth-pubtkt-keys/pubkey.pem - TKTAuthLoginURL /plinth/accounts/sso/login/ - TKTAuthBackArgName next - TKTAuthDigest SHA512 - TKTAuthRefreshURL /plinth/accounts/sso/refresh/ - TKTAuthUnauthURL /plinth - AuthType mod_auth_pubtkt - AuthName "FreedomBox Single Sign On" - Require valid-user - - - - Require all denied - - - # Require that LDAP account is not locked - AuthLDAPUrl "ldap:///ou=users,dc=thisbox?uid" - Require not ldap-attribute pwdAccountLockedTime="000001010000Z" - diff --git a/plinth/modules/sso/data/usr/share/freedombox/modules-enabled/sso b/plinth/modules/sso/data/usr/share/freedombox/modules-enabled/sso deleted file mode 100644 index 8f769e832..000000000 --- a/plinth/modules/sso/data/usr/share/freedombox/modules-enabled/sso +++ /dev/null @@ -1 +0,0 @@ -plinth.modules.sso diff --git a/plinth/modules/sso/forms.py b/plinth/modules/sso/forms.py deleted file mode 100644 index 605df651e..000000000 --- a/plinth/modules/sso/forms.py +++ /dev/null @@ -1,28 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -Forms for the Single Sign On app of FreedomBox. -""" - -from captcha.fields import CaptchaField -from django import forms -from django.contrib.auth.forms import \ - AuthenticationForm as DjangoAuthenticationForm -from django.utils.translation import gettext_lazy as _ - - -class AuthenticationForm(DjangoAuthenticationForm): - """Authentication form with an additional username field attributes.""" - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.fields['username'].widget.attrs.update({ - 'autofocus': 'autofocus', - 'autocapitalize': 'none', - 'autocomplete': 'username' - }) - - -class CaptchaForm(forms.Form): - """Form with a CAPTCHA field to use after 3 invalid login attempts.""" - captcha = CaptchaField( - label=_('Enter the letters in the image to proceed to the login page')) diff --git a/plinth/modules/sso/privileged.py b/plinth/modules/sso/privileged.py deleted file mode 100644 index 8ec1865a1..000000000 --- a/plinth/modules/sso/privileged.py +++ /dev/null @@ -1,104 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -"""Generate a auth_pubtkt ticket. - -Sign tickets with the FreedomBox server's private key. -""" - -import base64 -import datetime -import os -import pathlib - -from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import padding, rsa - -from plinth.actions import privileged - -KEYS_DIRECTORY = '/etc/apache2/auth-pubtkt-keys' - - -@privileged -def create_key_pair(): - """Create public/private key pair for signing the tickets.""" - keys_directory = pathlib.Path(KEYS_DIRECTORY) - private_key_file = keys_directory / 'privkey.pem' - public_key_file = keys_directory / 'pubkey.pem' - - keys_directory.mkdir(exist_ok=True) - # Set explicitly in case permissions are incorrect - keys_directory.chmod(0o750) - if private_key_file.exists() and public_key_file.exists(): - # Set explicitly in case permissions are incorrect - public_key_file.chmod(0o440) - private_key_file.chmod(0o440) - return - - private_key = rsa.generate_private_key(public_exponent=65537, - key_size=4096) - - def opener(path, flags): - return os.open(path, flags, mode=0o440) - - with open(private_key_file, 'wb', opener=opener) as file_handle: - pem = private_key.private_bytes( - encoding=serialization.Encoding.PEM, - format=serialization.PrivateFormat.PKCS8, - encryption_algorithm=serialization.NoEncryption()) - file_handle.write(pem) - - with open(public_key_file, 'wb', opener=opener) as file_handle: - public_key = private_key.public_key() - pem = public_key.public_bytes( - encoding=serialization.Encoding.PEM, - format=serialization.PublicFormat.SubjectPublicKeyInfo) - file_handle.write(pem) - - -def _create_ticket(private_key, uid, validuntil, ip=None, tokens=None, - udata=None, graceperiod=None, extra_fields=None): - """Create and return a signed mod_auth_pubtkt ticket.""" - tokens = ','.join(tokens) - fields = [ - f'uid={uid}', - f'validuntil={int(validuntil)}', - ip and f'cip={ip}', - tokens and f'tokens={tokens}', - graceperiod and f'graceperiod={int(graceperiod)}', - udata and f'udata={udata}', - extra_fields - and ';'.join(['{}={}'.format(k, v) for k, v in extra_fields]), - ] - data = ';'.join(filter(None, fields)) - signature = 'sig={}'.format(_sign(private_key, data)) - return ';'.join([data, signature]) - - -def _sign(private_key, data): - """Calculate and return ticket's signature.""" - signature = private_key.sign(data.encode(), padding.PKCS1v15(), - hashes.SHA512()) - return base64.b64encode(signature).decode() - - -@privileged -def generate_ticket(uid: str, private_key_file: str, tokens: list[str]) -> str: - """Generate a mod_auth_pubtkt ticket using login credentials.""" - with open(private_key_file, 'rb') as fil: - private_key = serialization.load_pem_private_key( - fil.read(), password=None) - - valid_until = _minutes_from_now(12 * 60) - grace_period = _minutes_from_now(11 * 60) - return _create_ticket(private_key, uid, valid_until, tokens=tokens, - graceperiod=grace_period) - - -def _minutes_from_now(minutes): - """Return a timestamp at the given number of minutes from now.""" - return _seconds_from_now(minutes * 60) - - -def _seconds_from_now(seconds): - """Return a timestamp at the given number of seconds from now.""" - return (datetime.datetime.now() + - datetime.timedelta(0, seconds)).timestamp() diff --git a/plinth/modules/sso/tests/test_functional.py b/plinth/modules/sso/tests/test_functional.py deleted file mode 100644 index 631853720..000000000 --- a/plinth/modules/sso/tests/test_functional.py +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -Functional, browser based tests for sso app. -""" - -import pytest -from plinth.tests import functional - -pytestmark = [pytest.mark.system, pytest.mark.essential, pytest.mark.sso] - - -@pytest.fixture(scope='module', autouse=True) -def fixture_background(session_browser): - """Login and install the app.""" - functional.login(session_browser) - functional.install(session_browser, 'syncthing') - functional.app_enable(session_browser, 'syncthing') - yield - functional.app_disable(session_browser, 'syncthing') - - -def test_app_access(session_browser): - """Test that only logged-in users can access Syncthing web interface.""" - functional.logout(session_browser) - functional.access_url(session_browser, 'syncthing') - assert functional.is_login_prompt(session_browser) - - functional.login(session_browser) - functional.access_url(session_browser, 'syncthing') - assert functional.is_available(session_browser, 'syncthing') diff --git a/plinth/modules/sso/tests/test_privileged.py b/plinth/modules/sso/tests/test_privileged.py deleted file mode 100644 index 1784eef97..000000000 --- a/plinth/modules/sso/tests/test_privileged.py +++ /dev/null @@ -1,55 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -Test module for sso module operations. -""" - -import os -import pathlib - -import pytest - -from plinth.modules.sso import privileged -from plinth.modules.sso.views import PRIVATE_KEY_FILE_NAME - -pytestmark = pytest.mark.usefixtures('mock_privileged') -privileged_modules_to_mock = ['plinth.modules.sso.privileged'] - - -@pytest.fixture(autouse=True) -def fixture_keys_directory(tmpdir): - """Set keys directory in the actions module.""" - privileged.KEYS_DIRECTORY = str(tmpdir) - - -@pytest.fixture(name='existing_key_pair') -def fixture_existing_key_pair(): - """A fixture to create key pair if needed.""" - privileged.create_key_pair() - keys_directory = pathlib.Path(privileged.KEYS_DIRECTORY) - assert keys_directory.stat().st_mode == 0o40750 - assert (keys_directory / 'privkey.pem').stat().st_mode == 0o100440 - assert (keys_directory / 'pubkey.pem').stat().st_mode == 0o100440 - - -def test_generate_ticket(existing_key_pair): - """Test generating a ticket.""" - username = 'tester' - groups = ['freedombox-share', 'syncthing', 'web-search'] - - private_key_file = os.path.join(privileged.KEYS_DIRECTORY, - PRIVATE_KEY_FILE_NAME) - ticket = privileged.generate_ticket(username, private_key_file, groups) - - fields = {} - for item in ticket.split(';'): - try: - key, value = item.split('=') - fields[key] = value - except ValueError: - # The 'sig' field can also contain '='. - continue - - assert fields['uid'] == username - assert int(fields['validuntil']) > 0 - assert fields['tokens'] == ','.join(groups) - assert int(fields['graceperiod']) > 0 diff --git a/plinth/modules/sso/urls.py b/plinth/modules/sso/urls.py deleted file mode 100644 index 8e4441649..000000000 --- a/plinth/modules/sso/urls.py +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -URLs for the Single Sign On module. -""" - -from django.urls import re_path -from stronghold.decorators import public - -from plinth.utils import non_admin_view - -from .views import CaptchaView, SSOLoginView, refresh - -urlpatterns = [ - re_path(r'^accounts/sso/login/$', public(SSOLoginView.as_view()), - name='sso-login'), - re_path(r'^accounts/sso/refresh/$', non_admin_view(refresh), - name='sso-refresh'), - - # Locked URL from django-axes - re_path(r'accounts/sso/login/locked/$', public(CaptchaView.as_view()), - name='locked_out'), -] diff --git a/plinth/modules/sso/views.py b/plinth/modules/sso/views.py deleted file mode 100644 index f94d0411f..000000000 --- a/plinth/modules/sso/views.py +++ /dev/null @@ -1,97 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -"""Views for the Single Sign On app of FreedomBox.""" - -import logging -import os -import urllib - -import axes.utils -from django import shortcuts -from django.contrib import messages -from django.contrib.auth import REDIRECT_FIELD_NAME -from django.contrib.auth import logout as auth_logout -from django.contrib.auth.views import LoginView -from django.http import HttpResponseRedirect -from django.utils.translation import gettext as _ -from django.views.decorators.http import require_POST -from django.views.generic.edit import FormView - -from plinth import translation - -from . import privileged -from .forms import AuthenticationForm, CaptchaForm - -PRIVATE_KEY_FILE_NAME = 'privkey.pem' -SSO_COOKIE_NAME = 'auth_pubtkt' -KEYS_DIRECTORY = '/etc/apache2/auth-pubtkt-keys' - -logger = logging.getLogger(__name__) - - -def set_ticket_cookie(user, response): - """Generate and set a mod_auth_pubtkt as a cookie in the response.""" - tokens = list(map(lambda g: g.name, user.groups.all())) - private_key_file = os.path.join(KEYS_DIRECTORY, PRIVATE_KEY_FILE_NAME) - ticket = privileged.generate_ticket(user.username, private_key_file, - tokens) - response.set_cookie(SSO_COOKIE_NAME, urllib.parse.quote(ticket)) - return response - - -class SSOLoginView(LoginView): - """View to login to FreedomBox and set a auth_pubtkt cookie. - - Cookie will be used to provide Single Sign On for some other applications. - """ - - redirect_authenticated_user = True - template_name = 'login.html' - form_class = AuthenticationForm - - def dispatch(self, request, *args, **kwargs): - """Handle a request and return a HTTP response.""" - response = super().dispatch(request, *args, **kwargs) - if request.user.is_authenticated: - translation.set_language(request, response, - request.user.userprofile.language) - return set_ticket_cookie(request.user, response) - - return response - - -class CaptchaView(FormView): - """A simple form view with a CAPTCHA image. - - When a user performs too many login attempts, they will no longer be able - to login with the typical login view. They will be redirected to this view. - On successfully solving the CAPTCHA in this form, their ability to use the - login form will be reset. - """ - - template_name = 'captcha.html' - form_class = CaptchaForm - - def form_valid(self, form): - """Reset login attempts and redirect to login page.""" - axes.utils.reset_request(self.request) - return shortcuts.redirect('users:login') - - -@require_POST -def logout(request): - """Logout an authenticated user, remove SSO cookie and redirect to home.""" - auth_logout(request) - response = shortcuts.redirect('index') - response.delete_cookie(SSO_COOKIE_NAME) - messages.success(request, _('Logged out successfully.')) - return response - - -def refresh(request): - """Simulate cookie refresh - redirect logged in user with a new cookie.""" - redirect_url = request.GET.get(REDIRECT_FIELD_NAME, '') - response = HttpResponseRedirect(redirect_url) - response.delete_cookie(SSO_COOKIE_NAME) - # Redirect with cookie doesn't work with 300 series - response.status_code = 200 - return set_ticket_cookie(request.user, response) diff --git a/plinth/modules/syncthing/data/usr/lib/systemd/system/syncthing@syncthing.service.d/freedombox.conf b/plinth/modules/syncthing/data/usr/lib/systemd/system/syncthing@syncthing.service.d/freedombox.conf index 749d0d636..41b2e8f8f 100644 --- a/plinth/modules/syncthing/data/usr/lib/systemd/system/syncthing@syncthing.service.d/freedombox.conf +++ b/plinth/modules/syncthing/data/usr/lib/systemd/system/syncthing@syncthing.service.d/freedombox.conf @@ -1,3 +1,10 @@ # The service depends on users and groups defined in LDAP [Unit] After=nslcd.service + +# Revert to systemd defaults for the number of times the service can start in a +# given interval. Syncthing sets it to a much more strict value of 4 start in +# 60s which leads to functional tests failing when app is enabled/disabled, +# installed/uninstalled, and backed up/restored many times. +StartLimitIntervalSec=10s +StartLimitBurst=5 diff --git a/plinth/modules/syncthing/data/usr/share/freedombox/etc/apache2/conf-available/syncthing-plinth.conf b/plinth/modules/syncthing/data/usr/share/freedombox/etc/apache2/conf-available/syncthing-plinth.conf index 6ed5837cd..8122fa6dd 100644 --- a/plinth/modules/syncthing/data/usr/share/freedombox/etc/apache2/conf-available/syncthing-plinth.conf +++ b/plinth/modules/syncthing/data/usr/share/freedombox/etc/apache2/conf-available/syncthing-plinth.conf @@ -16,9 +16,7 @@ - Include includes/freedombox-single-sign-on.conf ProxyPass http://localhost:8384/ - - TKTAuthToken "admin" "syncthing-access" - + Use AuthOpenIDConnect + Use RequireGroup syncthing-access diff --git a/plinth/modules/tiddlywiki/data/usr/share/freedombox/etc/apache2/conf-available/tiddlywiki-freedombox.conf b/plinth/modules/tiddlywiki/data/usr/share/freedombox/etc/apache2/conf-available/tiddlywiki-freedombox.conf index a69f78417..6afaa0e38 100644 --- a/plinth/modules/tiddlywiki/data/usr/share/freedombox/etc/apache2/conf-available/tiddlywiki-freedombox.conf +++ b/plinth/modules/tiddlywiki/data/usr/share/freedombox/etc/apache2/conf-available/tiddlywiki-freedombox.conf @@ -6,10 +6,8 @@ Alias /tiddlywiki /var/lib/tiddlywiki SetEnvIf Request_Method HEAD no-gzip - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "admin" "wiki" - + Use AuthOpenIDConnect + Use RequireGroup wiki # Disable caching diff --git a/plinth/modules/tiddlywiki/tests/test_functional.py b/plinth/modules/tiddlywiki/tests/test_functional.py index aa603a6a1..a8c222ade 100644 --- a/plinth/modules/tiddlywiki/tests/test_functional.py +++ b/plinth/modules/tiddlywiki/tests/test_functional.py @@ -27,7 +27,7 @@ class TestTiddlyWikiApp(functional.BaseAppTests): return session_browser.links.find_by_href( - '/plinth/apps/tiddlywiki/create/').first.click() + '/freedombox/apps/tiddlywiki/create/').first.click() session_browser.find_by_id('id_tiddlywiki-name').fill(wiki_name) functional.submit(session_browser, form_class='form-tiddlywiki') @@ -74,8 +74,8 @@ class TestTiddlyWikiApp(functional.BaseAppTests): new_wiki_name = 'A Midsummer Night\'s Dream' new_file_name = 'A_Midsummer_Nights_Dream.html' self._get_links_in_app_page( - session_browser, - '/plinth/apps/tiddlywiki/' + file_name + '/rename/').first.click() + session_browser, '/freedombox/apps/tiddlywiki/' + file_name + + '/rename/').first.click() session_browser.find_by_id('id_tiddlywiki-new_name').fill( new_wiki_name) functional.submit(session_browser, form_class='form-tiddlywiki') @@ -89,7 +89,7 @@ class TestTiddlyWikiApp(functional.BaseAppTests): test_wiki_file = str(_test_data_dir / 'dummy_wiki.html') session_browser.links.find_by_href( - '/plinth/apps/tiddlywiki/upload/').first.click() + '/freedombox/apps/tiddlywiki/upload/').first.click() session_browser.attach_file('tiddlywiki-file', test_wiki_file) functional.submit(session_browser, form_class='form-tiddlywiki') @@ -100,8 +100,8 @@ class TestTiddlyWikiApp(functional.BaseAppTests): self._create_wiki_file(session_browser) self._get_links_in_app_page( - session_browser, - '/plinth/apps/tiddlywiki/' + file_name + '/delete/').first.click() + session_browser, '/freedombox/apps/tiddlywiki/' + file_name + + '/delete/').first.click() functional.submit(session_browser, form_class='form-delete') self._assert_wiki_present(session_browser, file_name, present=False) diff --git a/plinth/modules/transmission/data/usr/share/freedombox/etc/apache2/conf-available/transmission-plinth.conf b/plinth/modules/transmission/data/usr/share/freedombox/etc/apache2/conf-available/transmission-plinth.conf index a1e98a55c..a84402f61 100644 --- a/plinth/modules/transmission/data/usr/share/freedombox/etc/apache2/conf-available/transmission-plinth.conf +++ b/plinth/modules/transmission/data/usr/share/freedombox/etc/apache2/conf-available/transmission-plinth.conf @@ -19,10 +19,8 @@ Require ldap-group cn=bit-torrent,ou=groups,dc=thisbox - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "admin" "bit-torrent" - + Use AuthOpenIDConnect + Use RequireGroup bit-torrent ## Send the scheme from user's request to enable Transmission to diff --git a/plinth/modules/transmission/static/icons/transmission.svg b/plinth/modules/transmission/static/icons/transmission.svg index a10a8ad70..a394d33e1 100644 --- a/plinth/modules/transmission/static/icons/transmission.svg +++ b/plinth/modules/transmission/static/icons/transmission.svg @@ -17,7 +17,7 @@ inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="transmission.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" - inkscape:export-filename="/home/andreas/project/application icons/48x48/transmission.png" + inkscape:export-filename="transmission.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" version="1.1"> diff --git a/plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html b/plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html index eb6cba373..6073e1e78 100644 --- a/plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html +++ b/plinth/modules/upgrades/templates/upgrades-dist-upgrade-notification.html @@ -41,8 +41,5 @@ role="button" class="btn btn-primary"> {% trans "Go to Distribution Update" %} - - {% trans "Dismiss" %} - + {% include 'notifications-dismiss-button.html' with id=id %}

diff --git a/plinth/modules/upgrades/templates/upgrades-new-release.html b/plinth/modules/upgrades/templates/upgrades-new-release.html index d5fae3c3d..d0a24f524 100644 --- a/plinth/modules/upgrades/templates/upgrades-new-release.html +++ b/plinth/modules/upgrades/templates/upgrades-new-release.html @@ -17,8 +17,5 @@

- - {% trans "Dismiss" %} - + {% include 'notifications-dismiss-button.html' with id=id %}

diff --git a/plinth/modules/users/__init__.py b/plinth/modules/users/__init__.py index 67543f3cd..c8318f8e4 100644 --- a/plinth/modules/users/__init__.py +++ b/plinth/modules/users/__init__.py @@ -73,9 +73,13 @@ class UsersApp(app_module.App): ]) self.add(packages) - dropin_configs = DropinConfigs('dropin-configs-users', [ - '/etc/apache2/includes/freedombox-auth-ldap.conf', - ]) + dropin_configs = DropinConfigs( + 'dropin-configs-users', + [ + '/etc/apache2/includes/freedombox-auth-ldap.conf', + # Empty file kept for easier upgrade + '/etc/apache2/includes/freedombox-single-sign-on.conf', + ]) self.add(dropin_configs) daemon = Daemon('daemon-users', 'slapd', listen_ports=[(389, 'tcp4'), diff --git a/plinth/modules/users/data/usr/share/freedombox/etc/apache2/includes/freedombox-single-sign-on.conf b/plinth/modules/users/data/usr/share/freedombox/etc/apache2/includes/freedombox-single-sign-on.conf new file mode 100644 index 000000000..a3b2f25c7 --- /dev/null +++ b/plinth/modules/users/data/usr/share/freedombox/etc/apache2/includes/freedombox-single-sign-on.conf @@ -0,0 +1 @@ +# Empty file to easier upgrade process diff --git a/plinth/modules/users/forms.py b/plinth/modules/users/forms.py index 40419dda4..7ac9e8d03 100644 --- a/plinth/modules/users/forms.py +++ b/plinth/modules/users/forms.py @@ -4,8 +4,11 @@ import pwd import re +from captcha.fields import CaptchaField from django import forms from django.contrib import auth, messages +from django.contrib.auth.forms import \ + AuthenticationForm as DjangoAuthenticationForm from django.contrib.auth.forms import SetPasswordForm, UserCreationForm from django.contrib.auth.hashers import check_password from django.contrib.auth.models import Group, User @@ -25,6 +28,24 @@ from . import get_last_admin_user, privileged from .components import UsersAndGroups +class AuthenticationForm(DjangoAuthenticationForm): + """Authentication form with an additional username field attributes.""" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['username'].widget.attrs.update({ + 'autofocus': 'autofocus', + 'autocapitalize': 'none', + 'autocomplete': 'username' + }) + + +class CaptchaForm(forms.Form): + """Form with a CAPTCHA field to use after 3 invalid login attempts.""" + captcha = CaptchaField( + label=_('Enter the letters in the image to proceed to the login page')) + + class ValidNewUsernameCheckMixin: """Mixin to check if a username is valid for created new user.""" diff --git a/plinth/modules/sso/templates/captcha.html b/plinth/modules/users/templates/users_captcha.html similarity index 100% rename from plinth/modules/sso/templates/captcha.html rename to plinth/modules/users/templates/users_captcha.html diff --git a/plinth/modules/sso/templates/login.html b/plinth/modules/users/templates/users_login.html similarity index 100% rename from plinth/modules/sso/templates/login.html rename to plinth/modules/users/templates/users_login.html diff --git a/plinth/modules/users/tests/test_functional.py b/plinth/modules/users/tests/test_functional.py index a56cbf11e..f11511f67 100644 --- a/plinth/modules/users/tests/test_functional.py +++ b/plinth/modules/users/tests/test_functional.py @@ -66,6 +66,27 @@ def fixture_login(session_browser): functional.login(session_browser) +@pytest.fixture(name='syncthing_installed') +def fixture_syncthing_installed(session_browser): + """Login and install the app.""" + functional.login(session_browser) + functional.install(session_browser, 'syncthing') + functional.app_enable(session_browser, 'syncthing') + yield + functional.app_disable(session_browser, 'syncthing') + + +def test_app_access(session_browser, syncthing_installed): + """Test that only logged-in users can access Syncthing web interface.""" + functional.logout(session_browser) + functional.access_url(session_browser, 'syncthing') + assert functional.is_login_prompt(session_browser) + + functional.login(session_browser) + functional.access_url(session_browser, 'syncthing') + assert functional.is_available(session_browser, 'syncthing') + + def test_create_user(session_browser): """Test creating a user.""" _delete_user(session_browser, 'alice') @@ -303,7 +324,7 @@ def _should_not_connect_passwordless_over_ssh(session_browser, def _rename_user(browser, old_name, new_name): functional.nav_to_module(browser, 'users') functional.click_link_by_href(browser, - f'/plinth/sys/users/{old_name}/edit/') + f'/freedombox/sys/users/{old_name}/edit/') browser.find_by_id('id_username').fill(new_name) browser.find_by_id('id_confirm_password').fill(_admin_password) functional.submit(browser, form_class='form-update') @@ -311,7 +332,8 @@ def _rename_user(browser, old_name, new_name): def _set_email(browser, username, email): """Set the email field value for a user.""" - functional.visit(browser, '/plinth/sys/users/{}/edit/'.format(username)) + functional.visit(browser, + '/freedombox/sys/users/{}/edit/'.format(username)) browser.find_by_id('id_email').fill(email) browser.find_by_id('id_confirm_password').fill(_admin_password) functional.submit(browser, form_class='form-update') @@ -319,7 +341,8 @@ def _set_email(browser, username, email): def _get_email(browser, username): """Return the email field value for a user.""" - functional.visit(browser, '/plinth/sys/users/{}/edit/'.format(username)) + functional.visit(browser, + '/freedombox/sys/users/{}/edit/'.format(username)) return browser.find_by_id('id_email').value @@ -330,13 +353,13 @@ def _check_language(browser, language_code): def _get_ssh_keys(browser, username=None): - functional.visit(browser, '/plinth/') + functional.visit(browser, '/freedombox/') if username is None: browser.find_by_id('id_user_menu').click() functional.click_and_wait(browser, browser.find_by_id('id_user_edit_menu')) else: - functional.visit(browser, f'/plinth/sys/users/{username}/edit/') + functional.visit(browser, f'/freedombox/sys/users/{username}/edit/') return browser.find_by_id('id_ssh_keys').text @@ -346,7 +369,7 @@ def _set_ssh_keys(browser, ssh_keys, username=None): functional.click_and_wait(browser, browser.find_by_id('id_user_edit_menu')) else: - functional.visit(browser, f'/plinth/sys/users/{username}/edit/') + functional.visit(browser, f'/freedombox/sys/users/{username}/edit/') current_user = browser.find_by_id('id_user_menu_link').text auth_password = functional.get_password(current_user) @@ -358,7 +381,8 @@ def _set_ssh_keys(browser, ssh_keys, username=None): def _set_user_status(browser, username, status): - functional.visit(browser, '/plinth/sys/users/{}/edit/'.format(username)) + functional.visit(browser, + '/freedombox/sys/users/{}/edit/'.format(username)) if status == 'inactive': browser.find_by_id('id_is_active').uncheck() elif status == 'active': @@ -376,7 +400,8 @@ def _change_password(browser, new_password, current_password=None, browser, browser.find_by_id('id_change_password_menu')) else: functional.visit( - browser, '/plinth/sys/users/{}/change_password/'.format(username)) + browser, + '/freedombox/sys/users/{}/change_password/'.format(username)) current_user = browser.find_by_id('id_user_menu_link').text auth_password = current_password or functional.get_password(current_user) diff --git a/plinth/modules/users/urls.py b/plinth/modules/users/urls.py index 8123cd21d..3849d948d 100644 --- a/plinth/modules/users/urls.py +++ b/plinth/modules/users/urls.py @@ -6,7 +6,6 @@ URLs for the Users module from django.urls import re_path from stronghold.decorators import public -from plinth.modules.sso.views import CaptchaView, SSOLoginView, logout from plinth.utils import non_admin_view from . import views @@ -19,13 +18,11 @@ urlpatterns = [ re_path(r'^sys/users/(?P[\w.@+-]+)/change_password/$', non_admin_view(views.UserChangePassword.as_view()), name='change_password'), - - # Authnz is handled by SSO - re_path(r'^accounts/login/$', public(SSOLoginView.as_view()), + re_path(r'^accounts/login/$', public(views.LoginView.as_view()), name='login'), - re_path(r'^accounts/logout/$', public(logout), name='logout'), + re_path(r'^accounts/logout/$', public(views.logout), name='logout'), re_path(r'^users/firstboot/$', public(views.FirstBootView.as_view()), name='firstboot'), - re_path(r'accounts/login/locked/$', public(CaptchaView.as_view()), + re_path(r'accounts/login/locked/$', public(views.CaptchaView.as_view()), name='locked_out'), ] diff --git a/plinth/modules/users/views.py b/plinth/modules/users/views.py index 357bf1820..3d65a10cf 100644 --- a/plinth/modules/users/views.py +++ b/plinth/modules/users/views.py @@ -1,15 +1,22 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """Django views for user app.""" +import axes.utils import django.views.generic +from django import shortcuts +from django.contrib import messages +from django.contrib.auth import logout as auth_logout from django.contrib.auth import update_session_auth_hash from django.contrib.auth.models import User +from django.contrib.auth.views import LoginView as DjangoLoginView from django.contrib.messages.views import SuccessMessageMixin from django.core.exceptions import PermissionDenied from django.http import HttpResponseRedirect from django.urls import reverse, reverse_lazy +from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy -from django.views.generic.edit import (CreateView, FormView, UpdateView) +from django.views.decorators.http import require_POST +from django.views.generic.edit import CreateView, FormView, UpdateView import plinth.modules.ssh.privileged as ssh_privileged from plinth import translation @@ -18,8 +25,67 @@ from plinth.utils import is_user_admin from plinth.views import AppView from . import privileged -from .forms import (CreateUserForm, FirstBootForm, UserChangePasswordForm, - UserUpdateForm) +from .forms import (AuthenticationForm, CaptchaForm, CreateUserForm, + FirstBootForm, UserChangePasswordForm, UserUpdateForm) + + +class LoginView(DjangoLoginView): + """View to login to FreedomBox and set language preference.""" + + redirect_authenticated_user = True + template_name = 'users_login.html' + form_class = AuthenticationForm + + def dispatch(self, request, *args, **kwargs): + """Handle a request and return a HTTP response.""" + response = super().dispatch(request, *args, **kwargs) + if request.user.is_authenticated: + translation.set_language(request, response, + request.user.userprofile.language) + + return response + + +class CaptchaView(FormView): + """A simple form view with a CAPTCHA image. + + When a user performs too many login attempts, they will no longer be able + to login with the typical login view. They will be redirected to this view. + On successfully solving the CAPTCHA in this form, their ability to use the + login form will be reset. + """ + + template_name = 'users_captcha.html' + form_class = CaptchaForm + + def form_valid(self, form): + """Reset login attempts and redirect to login page.""" + axes.utils.reset_request(self.request) + return shortcuts.redirect('users:login') + + +@require_POST +def logout(request): + """Logout an authenticated user, remove SSO cookie and redirect to home.""" + auth_logout(request) + response = shortcuts.redirect('index') + + # HACK: Remove Apache OpenID Connect module's session. This will logout all + # the apps using mod_auth_openidc for their authentication and + # authorization. A better way to do this is to implement OpenID Connect's + # Back-Channel Logout[1] or using OpenID Connect Session Management[2]. + # With this scheme, each application will register a logout URL during + # client registration. The OpenID Provider (FreedomBox service) will call + # this URL with appropriate parameters to perform logout on all the apps. + # Support for OpenID Connect Back-Channel Logout is currently under + # review[3]. + # 1. https://openid.net/specs/openid-connect-backchannel-1_0.html + # 2. https://openid.net/specs/openid-connect-session-1_0.html + # 3. https://github.com/django-oauth/django-oauth-toolkit/pull/1573 + response.delete_cookie('mod_auth_openidc_session') + + messages.success(request, _('Logged out successfully.')) + return response class ContextMixin: diff --git a/plinth/modules/wireguard/__init__.py b/plinth/modules/wireguard/__init__.py index 5b17cfbd2..554465379 100644 --- a/plinth/modules/wireguard/__init__.py +++ b/plinth/modules/wireguard/__init__.py @@ -96,3 +96,8 @@ class WireguardApp(app_module.App): super().setup(old_version) if not old_version: self.enable() + + def uninstall(self): + """De-configure and uninstall the app.""" + utils.delete_connections() + super().uninstall() diff --git a/plinth/modules/wireguard/forms.py b/plinth/modules/wireguard/forms.py index 75e1a9f24..cccc37ad8 100644 --- a/plinth/modules/wireguard/forms.py +++ b/plinth/modules/wireguard/forms.py @@ -5,10 +5,10 @@ Forms for wireguard module. import base64 import binascii +import ipaddress from django import forms from django.core.exceptions import ValidationError -from django.core.validators import validate_ipv4_address from django.utils.translation import gettext_lazy as _ KEY_LENGTH = 32 @@ -55,6 +55,16 @@ def validate_endpoint(endpoint): raise ValidationError('Invalid endpoint.') +def validate_ipv4_address_with_network(value: str): + """Check that value is a valid IPv4 address with an optional network.""" + try: + ipaddress.IPv4Interface(value) + except ipaddress.AddressValueError: + raise ValidationError(_('Enter a valid IPv4 address.')) + except ipaddress.NetmaskValueError: + raise ValidationError(_('Enter a valid network prefix or net mask.')) + + class AddClientForm(forms.Form): """Form to add client.""" public_key = forms.CharField( @@ -78,12 +88,15 @@ class AddServerForm(forms.Form): 'Example: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= .'), validators=[validate_key]) - ip_address = forms.CharField( + ip_address_and_network = forms.CharField( label=_('Client IP address provided by server'), strip=True, - help_text=_('IP address assigned to this machine on the VPN after ' - 'connecting to the endpoint. This value is usually ' - 'provided by the server operator. Example: 192.168.0.10.'), - validators=[validate_ipv4_address]) + help_text=_( + 'IP address assigned to this machine on the VPN after connecting ' + 'to the endpoint. This value is usually provided by the server ' + 'operator. Example: 192.168.0.10. You can also specify the ' + 'network. This will allow reaching machines in the network. ' + 'Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0.'), + validators=[validate_ipv4_address_with_network]) private_key = forms.CharField( label=_('Private key of this machine'), strip=True, help_text=_( @@ -107,8 +120,18 @@ class AddServerForm(forms.Form): 'Typically checked for a VPN service through which all traffic ' 'is sent.')) - def get_settings(self): + def get_settings(self) -> dict[str, dict]: """Return NM settings dict from cleaned data.""" + ip_address_and_network = self.cleaned_data['ip_address_and_network'] + ip_address_and_network = ipaddress.IPv4Interface( + ip_address_and_network) + ip_address = str(ip_address_and_network.ip) + prefixlen = ip_address_and_network.network.prefixlen + if self.cleaned_data['default_route']: + allowed_ips = ['0.0.0.0/0', '::/0'] + else: + allowed_ips = [f'{ip_address}/{prefixlen}'] + settings = { 'common': { 'type': 'wireguard', @@ -116,8 +139,8 @@ class AddServerForm(forms.Form): }, 'ipv4': { 'method': 'manual', - 'address': self.cleaned_data['ip_address'], - 'netmask': '', + 'address': ip_address, + 'netmask': str(ip_address_and_network.netmask), 'gateway': '', 'dns': '', 'second_dns': '', @@ -127,7 +150,7 @@ class AddServerForm(forms.Form): 'peer_public_key': self.cleaned_data['peer_public_key'], 'private_key': self.cleaned_data['private_key'], 'preshared_key': self.cleaned_data['preshared_key'], - 'default_route': self.cleaned_data['default_route'], + 'allowed_ips': allowed_ips, } } return settings diff --git a/plinth/modules/wireguard/templates/wireguard.html b/plinth/modules/wireguard/templates/wireguard.html index d670179fd..2e474ed34 100644 --- a/plinth/modules/wireguard/templates/wireguard.html +++ b/plinth/modules/wireguard/templates/wireguard.html @@ -9,60 +9,101 @@ {% block configuration %}

{% trans "As a Server" %}

-

{% trans "Peers allowed to connect to this server:" %}

+ {% if server.public_key %} +

{% trans "Server" %}

-
- - - - - - - {% if server.peers %} - {% for peer in server.peers.values %} - {% if peer.public_key %} - - - - - - {% endif %} - {% endfor %} - {% else %} +

+ {% blocktrans trimmed %} + Information for this {{ box_name }}: + {% endblocktrans %} +

+ +
+
{% trans "Public Key" %}{% trans "Allowed IPs" %}{% trans "Last Connected Time" %}
- - {{ peer.public_key }} - - {{ peer.allowed_ips|join:", " }}{{ peer.status.latest_handshake|default:'' }}
- + + - {% endif %} -
- {% blocktrans trimmed %} - No peers configured to connect to this {{ box_name }} yet. - {% endblocktrans %} - {% trans "Property" %}{% trans "Value" %}
-
+
{% trans "Public Key" %}{{ server.public_key }}
{% trans "Endpoint(s)" %} +
{% for endpoint in server_endpoints %}{{ endpoint }}
+{% endfor %}
+
+ {% blocktrans trimmed %} + {{ box_name }} VPN IP for services + {% endblocktrans %} + {{ server.ip_address }}
+
-

- {% blocktrans trimmed %} - Public key for this {{ box_name }}: - {% endblocktrans %} - {% if server.public_key %} -

{{ server.public_key }}
- {% else %} -

{% trans "Not configured yet." %}

- {% endif %} -

+

{% trans "Peers" %}

- +

{% trans "Peers allowed to connect to this server:" %}

+ +
+ + + + + + + {% if server.peers %} + {% for peer in server.peers.values %} + {% if peer.public_key %} + + + + + + {% endif %} + {% endfor %} + {% else %} + + + + {% endif %} +
{% trans "Public Key" %}{% trans "Allowed IPs" %}{% trans "Last Connected Time" %}
+ + {{ peer.public_key }} + + {{ peer.allowed_ips|join:", " }}{{ peer.status.latest_handshake|default:'' }}
+ {% blocktrans trimmed %} + No peers configured to connect to this {{ box_name }} yet. + {% endblocktrans %} +
+
+ + + {% else %} +
+

{% trans "WireGuard server not started yet." %}

+
+ {% csrf_token %} + +
+
+ {% endif %}

{% trans "As a Client" %}

diff --git a/plinth/modules/wireguard/templates/wireguard_add_client.html b/plinth/modules/wireguard/templates/wireguard_add_client.html index 466f2d011..909066ddd 100644 --- a/plinth/modules/wireguard/templates/wireguard_add_client.html +++ b/plinth/modules/wireguard/templates/wireguard_add_client.html @@ -15,6 +15,18 @@ {{ form|bootstrap }} + {% if next_ip %} +

+ +
+ +
+
+ {% endif %} + diff --git a/plinth/modules/wireguard/templates/wireguard_show_client.html b/plinth/modules/wireguard/templates/wireguard_show_client.html index 739c57808..0cb0c5d5e 100644 --- a/plinth/modules/wireguard/templates/wireguard_show_client.html +++ b/plinth/modules/wireguard/templates/wireguard_show_client.html @@ -41,6 +41,10 @@ {% trans "Server public key:" %} {{ server.public_key }} + + {% trans "Server VPN IP address for services:" %} + {{ server.ip_address }} + diff --git a/plinth/modules/wireguard/templates/wireguard_show_server.html b/plinth/modules/wireguard/templates/wireguard_show_server.html index 58cf7841e..f0f306c95 100644 --- a/plinth/modules/wireguard/templates/wireguard_show_server.html +++ b/plinth/modules/wireguard/templates/wireguard_show_server.html @@ -36,9 +36,20 @@ {% trans "Public key of this machine:" %} {{ server.public_key }} - + {% trans "IP address of this machine:" %} - {{ server.ip_address }} + {{ server.ip_address_and_network }} + + + + {% trans "All outgoing traffic is sent using this connection:" %} + + {% if server.default_route %} + {% trans "Yes" %} + {% else %} + {% trans "No" %} + {% endif %} + diff --git a/plinth/modules/wireguard/tests/test_forms.py b/plinth/modules/wireguard/tests/test_forms.py index 3e4c33d9b..780cb8d4a 100644 --- a/plinth/modules/wireguard/tests/test_forms.py +++ b/plinth/modules/wireguard/tests/test_forms.py @@ -6,7 +6,9 @@ Tests for wireguard module forms. import pytest from django.core.exceptions import ValidationError -from plinth.modules.wireguard.forms import validate_endpoint, validate_key +from plinth.modules.wireguard.forms import (validate_endpoint, + validate_ipv4_address_with_network, + validate_key) @pytest.mark.parametrize('key', [ @@ -62,3 +64,31 @@ def test_validate_endpoint_invalid_patterns(endpoint): """Test that invalid wireguard endpoint patterns are rejected.""" with pytest.raises(ValidationError): validate_endpoint(endpoint) + + +@pytest.mark.parametrize('value', [ + '1.2.3.4', + '1.2.3.4/0', + '1.2.3.4/32', + '1.2.3.4/24', + '1.2.3.4/255.255.255.0', + '1.2.3.4/0.0.0.255', +]) +def test_validate_ipv4_address_with_network_valid_patterns(value): + """Test validating IPv4 address with network works for valid values.""" + validate_ipv4_address_with_network(value) + + +@pytest.mark.parametrize('value', [ + '::1', + '1.2.3.4/', + 'invalid-ip/24', + '1.2.3.4/x', + '1.2.3.4/-1', + '1.2.3.4/33', + '1.2.3.4/9.8.7.6', +]) +def test_validate_ipv4_address_with_network_invalid_patterns(value): + """Test validating IPv4 address with network works for invalid values.""" + with pytest.raises(ValidationError): + validate_ipv4_address_with_network(value) diff --git a/plinth/modules/wireguard/tests/test_functional.py b/plinth/modules/wireguard/tests/test_functional.py index df5b0ec37..b9ed811fa 100644 --- a/plinth/modules/wireguard/tests/test_functional.py +++ b/plinth/modules/wireguard/tests/test_functional.py @@ -23,14 +23,14 @@ class TestWireguardApp(functional.BaseAppTests): { 'peer_endpoint': 'wg1.example.org:1234', 'peer_public_key': 'HBCqZk4B93N6q19zNleJkAVs+PEfWAPgPpKnrhL/CVw=', - 'ip_address': '10.0.0.2', + 'ip_address_and_network': '10.0.0.2/32', 'private_key': '', 'preshared_key': '' }, { 'peer_endpoint': 'wg2.example.org:5678', 'peer_public_key': 'Z/iHo0vaeSN8Ykk5KwhQ819MMU5nyzD7y7xFFthlxXI=', - 'ip_address': '192.168.0.2', + 'ip_address_and_network': '192.168.0.2/24', 'private_key': 'QC2xEZMn3bgNsSVFrU51+ALSUiUaWg6gRWigh3EeVm0=', 'preshared_key': 'AHxZ4Rr8Ij4L1aq+ceusSIgBfluqiI9Vb5I2UtQFanI=' }, @@ -44,7 +44,7 @@ class TestWireguardApp(functional.BaseAppTests): def _get_client_href(key): """Return the href for client show page.""" key = urllib.parse.quote(urllib.parse.quote(key, safe='')) - return f'/plinth/apps/wireguard/client/{key}/show/' + return f'/freedombox/apps/wireguard/client/{key}/show/' def _client_exists(self, browser, key): """Check whether a client key exists.""" @@ -67,6 +67,12 @@ class TestWireguardApp(functional.BaseAppTests): def _add_client(browser, key): """Add a client.""" functional.nav_to_module(browser, 'wireguard') + # Start the server on FreedomBox, if needed. + start_server_button = browser.find_by_css('.btn-start-server') + if start_server_button: + with functional.wait_for_page_update(browser): + start_server_button.first.click() + browser.find_by_css('.btn-add-client').first.click() browser.find_by_id('id_public_key').fill(key) functional.submit(browser, form_class='form-add-client') @@ -130,7 +136,8 @@ class TestWireguardApp(functional.BaseAppTests): href.first.click() assert get_value('peer-endpoint') == config['peer_endpoint'] assert get_value('peer-public-key') == config['peer_public_key'] - assert get_value('server-ip-address') == config['ip_address'] + assert get_value('server-ip-address-and-network' + ) == config['ip_address_and_network'] assert get_value('peer-preshared-key') == (config['preshared_key'] or 'None') @@ -142,7 +149,8 @@ class TestWireguardApp(functional.BaseAppTests): browser.find_by_id('id_peer_endpoint').fill(config['peer_endpoint']) browser.find_by_id('id_peer_public_key').fill( config['peer_public_key']) - browser.find_by_id('id_ip_address').fill(config['ip_address']) + browser.find_by_id('id_ip_address_and_network').fill( + config['ip_address_and_network']) browser.find_by_id('id_private_key').fill(config['private_key']) browser.find_by_id('id_preshared_key').fill(config['preshared_key']) functional.submit(browser, form_class='form-add-server') @@ -156,7 +164,8 @@ class TestWireguardApp(functional.BaseAppTests): browser.find_by_id('id_peer_endpoint').fill(config2['peer_endpoint']) browser.find_by_id('id_peer_public_key').fill( config2['peer_public_key']) - browser.find_by_id('id_ip_address').fill(config2['ip_address']) + browser.find_by_id('id_ip_address_and_network').fill( + config2['ip_address_and_network']) browser.find_by_id('id_private_key').fill(config2['private_key']) browser.find_by_id('id_preshared_key').fill(config2['preshared_key']) functional.submit(browser, form_class='form-edit-server') diff --git a/plinth/modules/wireguard/urls.py b/plinth/modules/wireguard/urls.py index d0dcc6bbe..1c44b551e 100644 --- a/plinth/modules/wireguard/urls.py +++ b/plinth/modules/wireguard/urls.py @@ -9,6 +9,8 @@ from plinth.modules.wireguard import views urlpatterns = [ re_path(r'^apps/wireguard/$', views.WireguardView.as_view(), name='index'), + re_path(r'^apps/wireguard/enable-server/$', + views.EnableServerView.as_view(), name='enable-server'), re_path(r'^apps/wireguard/client/add/$', views.AddClientView.as_view(), name='add-client'), re_path(r'^apps/wireguard/client/(?P[^/]+)/show/$', diff --git a/plinth/modules/wireguard/utils.py b/plinth/modules/wireguard/utils.py index 2d7b56c79..5917ade72 100644 --- a/plinth/modules/wireguard/utils.py +++ b/plinth/modules/wireguard/utils.py @@ -40,7 +40,6 @@ def get_nm_info(): info['listen_port'] = settings.get_listen_port() info['fwmark'] = settings.get_fwmark() info['mtu'] = settings.get_mtu() - info['default_route'] = settings.get_ip4_auto_default_route() info['peers'] = {} for peer_index in range(settings.get_peers_len()): peer = settings.get_peer(peer_index) @@ -57,9 +56,18 @@ def get_nm_info(): info['peers'][peer_info['public_key']] = peer_info + # This is default route when all IPs are in allowed IPs list. + info['default_route'] = False + for peer_info in info['peers'].values(): + if ('0.0.0.0/0' in peer_info['allowed_ips'] + and '::/0' in peer_info['allowed_ips']): + info['default_route'] = True + settings_ipv4 = connection.get_setting_ip4_config() if settings_ipv4 and settings_ipv4.get_num_addresses(): - info['ip_address'] = settings_ipv4.get_address(0).get_address() + address = settings_ipv4.get_address(0) + info['ip_address_and_network'] = (address.get_address() + '/' + + str(address.get_prefix())) connections[info['interface']] = info @@ -127,6 +135,17 @@ def enable_connections(enable): pass # Connection is already inactive +def delete_connections(): + """Remove all WireGuard connections.""" + setting_name = nm.SETTING_WIREGUARD_SETTING_NAME + client = network.get_nm_client() + for connection in client.get_connections(): + if connection.get_connection_type() != setting_name: + continue + + connection.delete() + + def _get_public_key_from_private_key(private_key): process = subprocess.run(['wg', 'pubkey'], check=True, capture_output=True, input=private_key.encode()) diff --git a/plinth/modules/wireguard/views.py b/plinth/modules/wireguard/views.py index 9259edf22..e561bd245 100644 --- a/plinth/modules/wireguard/views.py +++ b/plinth/modules/wireguard/views.py @@ -11,7 +11,7 @@ from django.http import Http404 from django.shortcuts import redirect from django.urls import reverse_lazy from django.utils.translation import gettext as _ -from django.views.generic import FormView, TemplateView +from django.views.generic import FormView, TemplateView, View from plinth import network from plinth.modules.names.components import DomainName @@ -30,8 +30,19 @@ class WireguardView(AppView): """Return additional context for rendering the template.""" context = super().get_context_data(**kwargs) info = utils.get_info() - context['server'] = info['my_server'] + server_info = info['my_server'] + context['server'] = server_info context['client_peers'] = info['my_client']['servers'] + context['server_endpoints'] = [] + + if server_info: + domains = DomainName.list_names(filter_for_service='wireguard') + listen_port = server_info.get('listen_port') + context['server_endpoints'] = [ + f'{domain}:{listen_port}' for domain in domains + if not domain.endswith('.local') + ] + return context @@ -46,6 +57,16 @@ class AddClientView(SuccessMessageMixin, FormView): """Return additional context for rendering the template.""" context = super().get_context_data(**kwargs) context['title'] = _('Add Allowed Client') + + # Show next available IP. + try: + connection = utils._server_connection() + setting_name = utils.nm.SETTING_WIREGUARD_SETTING_NAME + settings = connection.get_setting_by_name(setting_name) + context['next_ip'] = utils._get_next_available_ip_address(settings) + except Exception: + context['next_ip'] = None + return context def form_valid(self, form): @@ -80,7 +101,7 @@ class ShowClientView(SuccessMessageMixin, TemplateView): context['client'] = server_info['peers'][public_key] context['endpoints'] = [ domain + ':' + str(server_info['listen_port']) - for domain in domains + for domain in domains if not domain.endswith('.local') ] return context @@ -205,7 +226,8 @@ class EditServerView(SuccessMessageMixin, FormView): if not server: raise Http404 - initial['ip_address'] = server.get('ip_address') + initial['ip_address_and_network'] = server.get( + 'ip_address_and_network') if server['peers']: peer = next(peer for peer in server['peers'].values()) initial['peer_endpoint'] = peer['endpoint'] @@ -252,3 +274,19 @@ class DeleteServerView(SuccessMessageMixin, TemplateView): network.delete_connection(connection.get_uuid()) messages.success(request, _('Server deleted.')) return redirect('wireguard:index') + + +class EnableServerView(SuccessMessageMixin, View): + """View to enable the WireGuard server.""" + + def post(self, request): + """Create server interface.""" + try: + utils.setup_server() + messages.success(request, + _('WireGuard server started successfully.')) + except Exception as error: + messages.error( + request, + _('Failed to start WireGuard server: {}').format(error)) + return redirect('wireguard:index') diff --git a/plinth/modules/wordpress/data/usr/share/freedombox/etc/apache2/conf-available/wordpress-freedombox.conf b/plinth/modules/wordpress/data/usr/share/freedombox/etc/apache2/conf-available/wordpress-freedombox.conf index c93ea1c49..21f6c0b04 100644 --- a/plinth/modules/wordpress/data/usr/share/freedombox/etc/apache2/conf-available/wordpress-freedombox.conf +++ b/plinth/modules/wordpress/data/usr/share/freedombox/etc/apache2/conf-available/wordpress-freedombox.conf @@ -30,10 +30,7 @@ Alias /wordpress /usr/share/wordpress # Allow access only if site is marked as public or if user is an admin - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "admin" - + Use AuthOpenIDConnect # Increase maximum upload file size @@ -47,10 +44,7 @@ Alias /wordpress /usr/share/wordpress # Allow access only if site is marked as public or if user is an admin - Include includes/freedombox-single-sign-on.conf - - TKTAuthToken "admin" - + Use AuthOpenIDConnect diff --git a/plinth/modules/wordpress/static/icons/wordpress.svg b/plinth/modules/wordpress/static/icons/wordpress.svg index da838f6b9..7cb207cdf 100644 --- a/plinth/modules/wordpress/static/icons/wordpress.svg +++ b/plinth/modules/wordpress/static/icons/wordpress.svg @@ -18,7 +18,7 @@ xml:space="preserve" sodipodi:docname="wordpress.svg" inkscape:version="1.0.2 (e86c870879, 2021-01-15)" - inkscape:export-filename="/home/bunny/work/freedombox/freedombox/static/themes/default/icons/wordpress.png" + inkscape:export-filename="wordpress.png" inkscape:export-xdpi="48" inkscape:export-ydpi="48"> None: This must be run in a thread separate from the server.serve_forever() otherwise it will deadlock waiting for the shutdown to complete. """ - global _server logger.info('SIGTERM received, shutting down the server.') if _server: _server.shutdown() diff --git a/plinth/settings.py b/plinth/settings.py index b15b2190c..50c303942 100644 --- a/plinth/settings.py +++ b/plinth/settings.py @@ -27,6 +27,7 @@ See: https://docs.djangoproject.com/en/dev/ref/settings/ """ import django +from django.utils.translation import gettext_lazy as _ ALLOWED_HOSTS = ['*'] @@ -114,7 +115,7 @@ FILE_UPLOAD_HANDLERS = [ ] # Overridden based on the configuration key server_dir -FORCE_SCRIPT_NAME = '/plinth' +FORCE_SCRIPT_NAME = '/freedombox' # FreedomBox apps are appended to this list INSTALLED_APPS = [ @@ -125,6 +126,7 @@ INSTALLED_APPS = [ 'django.contrib.contenttypes', 'django.contrib.messages', 'django.contrib.sessions', + 'oauth2_provider', 'stronghold', 'plinth', ] @@ -171,6 +173,21 @@ MIDDLEWARE = ( 'axes.middleware.AxesMiddleware', ) +OAUTH2_PROVIDER = { + 'OIDC_ENABLED': True, + 'OAUTH2_VALIDATOR_CLASS': 'plinth.modules.oidc.validators.OAuth2Validator', + 'SCOPES': { + 'openid': + _('Uniquely identify your user account with username'), + 'email': + _('View email address'), + 'profile': + _('View basic profile information (such as name and email)'), + 'freedombox_groups': + _('View permissions that account has') + }, +} + PASSWORD_HASHERS = [ 'plinth.hashers.Argon2PasswordHasherLowMemory', 'django.contrib.auth.hashers.PBKDF2PasswordHasher', @@ -190,9 +207,9 @@ SESSION_ENGINE = 'django.contrib.sessions.backends.file' SESSION_FILE_PATH = '/var/lib/plinth/sessions' # Overridden based on configuration key server_dir -STATIC_URL = '/plinth/static/' +STATIC_URL = '/freedombox/static/' -# STRONGHOLD_PUBLIC_URLS=(r'^captcha/', ) +STRONGHOLD_PUBLIC_URLS = (r'^/o/', ) STRONGHOLD_PUBLIC_NAMED_URLS = ( 'captcha-image', diff --git a/plinth/templates/base.html b/plinth/templates/base.html index b727f68fb..daa2556c5 100644 --- a/plinth/templates/base.html +++ b/plinth/templates/base.html @@ -64,6 +64,7 @@ + {% block app_js %}{% endblock %} @@ -83,6 +84,7 @@ {% if refresh_page_sec is not None %} data-refresh-page-sec="{{ refresh_page_sec }}" {% endif %}> +{% block wrapper %}
@@ -251,7 +253,11 @@
{% block container %} -
+
{% block content_row %} {% include 'messages.html' %} @@ -278,5 +284,6 @@
+{% endblock %} diff --git a/plinth/templates/notifications-dismiss-button.html b/plinth/templates/notifications-dismiss-button.html new file mode 100644 index 000000000..8b914cdb9 --- /dev/null +++ b/plinth/templates/notifications-dismiss-button.html @@ -0,0 +1,12 @@ +{% comment %} +# SPDX-License-Identifier: AGPL-3.0-or-later +{% endcomment %} + +{% load i18n %} + + + {% trans "Dismiss" %} + diff --git a/plinth/templates/notifications.html b/plinth/templates/notifications.html index 25d52c2f2..1880cbb61 100644 --- a/plinth/templates/notifications.html +++ b/plinth/templates/notifications.html @@ -8,10 +8,11 @@ {% load static %} {% if notifications %} -
+
    {% for note in notifications %} -
  • +
  • @@ -53,10 +54,7 @@
    {% for action in note.actions %} {% if action.type == "dismiss" %} - - {% trans "Dismiss" %} - + {% include 'notifications-dismiss-button.html' with id=note.id %} {% else %} diff --git a/plinth/templates/operation-notification.html b/plinth/templates/operation-notification.html index 9fd3f571a..e7eb8b95f 100644 --- a/plinth/templates/operation-notification.html +++ b/plinth/templates/operation-notification.html @@ -18,9 +18,6 @@ {% if data.state == "completed" %}
    - - {% trans "Dismiss" %} - + {% include 'notifications-dismiss-button.html' with id=id %}
    {% endif %} diff --git a/plinth/tests/data/configs/freedombox.config b/plinth/tests/data/configs/freedombox.config index db6fc00ff..99bb30bd3 100644 --- a/plinth/tests/data/configs/freedombox.config +++ b/plinth/tests/data/configs/freedombox.config @@ -1,9 +1,7 @@ [Path] file_root = %(parent_dir)s -config_dir = %(file_root)s/data/etc/plinth data_dir = %(file_root)s/data/var/lib/plinth -server_dir = /plinth -actions_dir = %(file_root)s/actions +server_dir = /freedombox doc_dir = %(file_root)s/doc custom_static_dir = %(file_root)s/data/var/www/plinth/custom/static store_file = %(data_dir)s/plinth.sqlite3 diff --git a/plinth/tests/data/django_test_settings.py b/plinth/tests/data/django_test_settings.py index 0f742f4e3..9808b00b8 100644 --- a/plinth/tests/data/django_test_settings.py +++ b/plinth/tests/data/django_test_settings.py @@ -35,6 +35,7 @@ INSTALLED_APPS = [ 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.messages', + 'oauth2_provider', 'stronghold', 'plinth', ] @@ -51,6 +52,8 @@ ROOT_URLCONF = 'plinth.tests.data.urls' SECRET_KEY = 'django_tests_secret_key' +STRONGHOLD_PUBLIC_URLS = (r'^/o/', ) + TEMPLATES = [{ 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'APP_DIRS': True, diff --git a/plinth/tests/data/shortcuts/dotd.json b/plinth/tests/data/shortcuts/dotd.json index 1a07b2293..1a5ee1392 100644 --- a/plinth/tests/data/shortcuts/dotd.json +++ b/plinth/tests/data/shortcuts/dotd.json @@ -1,7 +1,7 @@ {"shortcuts": [{ "name": "NextCloud", "description": [ "Nextcloud is a suite of client-server software for creating and using file hosting services." ], - "icon_url": "/plinth/custom/static/themes/default/icons/nextcloud.png", + "icon_url": "/freedombox/custom/static/themes/default/icons/nextcloud.png", "clients": [{ "name": "nextcloud", "platforms": [{ diff --git a/plinth/tests/data/shortcuts/dotd.json.d/01_extra.json b/plinth/tests/data/shortcuts/dotd.json.d/01_extra.json index 9fd03a0c7..34342e2dd 100644 --- a/plinth/tests/data/shortcuts/dotd.json.d/01_extra.json +++ b/plinth/tests/data/shortcuts/dotd.json.d/01_extra.json @@ -1,7 +1,7 @@ {"shortcuts": [{ "name": "NextCloud2", "description": [ "Nextcloud is a suite of client-server software for creating and using file hosting services." ], - "icon_url": "/plinth/custom/static/themes/default/icons/nextcloud.png", + "icon_url": "/freedombox/custom/static/themes/default/icons/nextcloud.png", "clients": [{ "name": "nextcloud", "platforms": [{ diff --git a/plinth/tests/data/shortcuts/nextcloud.json b/plinth/tests/data/shortcuts/nextcloud.json index 1258460e0..f14959f32 100644 --- a/plinth/tests/data/shortcuts/nextcloud.json +++ b/plinth/tests/data/shortcuts/nextcloud.json @@ -1,7 +1,7 @@ {"shortcuts": [{ "name": "NextCloud", "description": [ "Nextcloud is a suite of client-server software for creating and using file hosting services." ], - "icon_url": "/plinth/custom/static/themes/default/icons/nextcloud.png", + "icon_url": "/freedombox/custom/static/themes/default/icons/nextcloud.png", "clients": [{ "name": "nextcloud", "platforms": [{ diff --git a/plinth/tests/functional/__init__.py b/plinth/tests/functional/__init__.py index 4bbd4005d..a3f21564e 100644 --- a/plinth/tests/functional/__init__.py +++ b/plinth/tests/functional/__init__.py @@ -48,7 +48,7 @@ base_url = config['DEFAULT']['url'] # unlisted sites just use '/' + site_name as url _site_url = { 'wiki': '/ikiwiki', - 'jsxc': '/plinth/apps/jsxc/jsxc/', + 'jsxc': '/freedombox/apps/jsxc/jsxc/', 'cockpit': '/_cockpit/', 'syncthing': '/syncthing/', 'rssbridge': '/rss-bridge/', @@ -208,6 +208,12 @@ def wait_for_page_update(browser, timeout=300, expected_url=None): WebDriverWait(browser, timeout).until(_PageLoaded(page_body, expected_url)) +def page_reload(browser): + """Reload the page.""" + with wait_for_page_update(browser): + browser.visit(browser.url) + + def _get_site_url(site_name): if site_name.startswith('share'): site_name = site_name.replace('_', '/') @@ -233,12 +239,12 @@ def is_available(browser, site_name): browser.visit(url_to_visit) time.sleep(3) browser.reload() - if '404' in browser.title or 'Page not found' in browser.title: + if ('404' in browser.title or '401 Unauthorized' in browser.title + or 'Page not found' in browser.title): return False # The site might have a default path after the sitename, # e.g /mediawiki/Main_Page - print('URL =', browser.url, url_to_visit, browser.title) browser_url = browser.url.partition('://')[2] url_to_visit_without_proto = url_to_visit.strip('/').partition('://')[2] return browser_url.startswith(url_to_visit_without_proto) # not a redirect @@ -362,7 +368,8 @@ def _create_admin_account(browser, username, password): def login(browser): """Login to the FreedomBox interface with default test account.""" - login_with_account(browser, base_url, config['DEFAULT']['username'], + login_with_account(browser, base_url + '/freedombox/', + config['DEFAULT']['username'], config['DEFAULT']['password']) @@ -371,7 +378,7 @@ def _run_first_wizard(browser): username = config['DEFAULT']['username'], password = config['DEFAULT']['password'] - welcome_url = base_url + '/plinth/firstboot/welcome/' + welcome_url = base_url + '/freedombox/firstboot/welcome/' browser.visit(welcome_url) if browser.url != welcome_url: # We got redirected because first wizard is already complete. Don't @@ -392,7 +399,7 @@ def login_with_account(browser, url, username, password=None): if password is None: password = get_password(username) # XXX: Find a way to remove the hardcoded jsxc URL - if '/plinth/' not in browser.url or '/jsxc/jsxc' in browser.url: + if '/freedombox/' not in browser.url or '/jsxc/jsxc' in browser.url: browser.visit(url) user_menu = browser.find_by_id('id_user_menu') @@ -403,7 +410,7 @@ def login_with_account(browser, url, username, password=None): logout(browser) - login_button = browser.links.find_by_href('/plinth/accounts/login/') + login_button = browser.links.find_by_href('/freedombox/accounts/login/') if login_button: click_and_wait(browser, login_button.first) browser.fill('username', username) @@ -417,7 +424,7 @@ def logout(browser): """Log out of the FreedomBox interface.""" # Navigate to the home page if logout form is not found if not browser.find_by_css('.form-logout'): - visit(browser, '/plinth/') + visit(browser, '/freedombox/') # We are not logged in if the home page does not contain logout form if browser.find_by_css('.form-logout'): @@ -430,13 +437,13 @@ def logout(browser): ################# def nav_to_module(browser, module): sys_or_apps = 'sys' if module in _sys_modules else 'apps' - required_url = base_url + f'/plinth/{sys_or_apps}/{module}/' + required_url = base_url + f'/freedombox/{sys_or_apps}/{module}/' if browser.url != required_url: browser.visit(required_url) def app_select_domain_name(browser, app_name, domain_name): - browser.visit('{}/plinth/apps/{}/setup/'.format(base_url, app_name)) + browser.visit('{}/freedombox/apps/{}/setup/'.format(base_url, app_name)) drop_down = browser.find_by_id('id_domain_name') drop_down.select(domain_name) submit(browser, form_class='form-configuration') @@ -457,10 +464,10 @@ def install(browser, app_name): script = 'return (document.readyState == "complete") && ' \ '(!Boolean(document.querySelector(".app-operation"))) &&' \ '(!Boolean(document.querySelector(".app-just-installed")));' - if not browser.execute_script(script): + if browser.is_element_present_by_css('.neterror'): + page_reload(browser) + elif not browser.execute_script(script): time.sleep(0.1) - elif browser.is_element_present_by_css('.neterror'): - browser.visit(browser.url) elif browser.is_element_present_by_css('.alert-danger'): break elif (browser.is_element_present_by_css('.app-checking-availability') @@ -500,10 +507,10 @@ def uninstall(browser, app_name): while True: script = 'return (document.readyState == "complete") && ' \ '(!Boolean(document.querySelector(".app-operation")));' - if not browser.execute_script(script): + if browser.is_element_present_by_css('.neterror'): + page_reload(browser) + elif not browser.execute_script(script): time.sleep(0.1) - elif browser.is_element_present_by_css('.neterror'): - browser.visit(browser.url) elif browser.is_element_present_by_css('.alert-danger'): raise RuntimeError('Uninstall failed') else: @@ -554,7 +561,7 @@ def app_can_be_disabled(browser, app_name): # Front page utilities # ######################## def find_on_front_page(browser, app_name): - browser.visit(base_url) + browser.visit(base_url + '/freedombox/') shortcuts = browser.links.find_by_href(f'/{app_name}/') return shortcuts @@ -597,7 +604,7 @@ def running_inside_container(): ############################# def set_hostname(browser, hostname: str): """Configure the system hostname.""" - visit(browser, '/plinth/sys/names/hostname/') + visit(browser, '/freedombox/sys/names/hostname/') browser.find_by_id('id_hostname-hostname').fill(hostname) submit(browser, form_class='form-hostname') @@ -607,8 +614,8 @@ def domain_add(browser, domain_name: str): if domain_name in domain_list(browser): return - visit(browser, '/plinth/sys/names/') - click_link_by_href(browser, '/plinth/sys/names/domains/') + visit(browser, '/freedombox/sys/names/') + click_link_by_href(browser, '/freedombox/sys/names/domains/') browser.find_by_id('id_domain-add-domain_name').fill(domain_name) submit(browser, form_class='form-domain-add') @@ -618,15 +625,15 @@ def domain_remove(browser, domain_name: str): if domain_name not in domain_list(browser): return - visit(browser, '/plinth/sys/names/') + visit(browser, '/freedombox/sys/names/') click_link_by_href(browser, - f'/plinth/sys/names/domains/{domain_name}/delete/') + f'/freedombox/sys/names/domains/{domain_name}/delete/') submit(browser, form_class='form-delete') def domain_list(browser) -> list[str]: """Return a list of domains configured.""" - visit(browser, '/plinth/sys/names/') + visit(browser, '/freedombox/sys/names/') elements = browser.find_by_css('td.names-domain-column') return [element.text for element in elements] @@ -653,12 +660,12 @@ def _click_button_and_confirm(browser, href, form_class): if buttons: submit(browser, element=buttons.first) submit(browser, form_class=form_class, - expected_url='/plinth/sys/backups/') + expected_url='/freedombox/sys/backups/') def _backup_delete_archive_by_name(browser, archive_name): nav_to_module(browser, 'backups') - href = f'/plinth/sys/backups/root/delete/{archive_name}/' + href = f'/freedombox/sys/backups/root/delete/{archive_name}/' _click_button_and_confirm(browser, href, 'form-delete') @@ -668,7 +675,7 @@ def backup_create(browser, app_name, archive_name=None): if archive_name: _backup_delete_archive_by_name(browser, archive_name) - buttons = browser.links.find_by_href('/plinth/sys/backups/create/') + buttons = browser.links.find_by_href('/freedombox/sys/backups/create/') submit(browser, element=buttons.first) eventually(browser.find_by_css, args=['.select-all']) browser.find_by_css('.select-all').first.uncheck() @@ -684,7 +691,7 @@ def backup_create(browser, app_name, archive_name=None): def backup_restore(browser, app_name, archive_name=None): """Restore a given app from a backup archive.""" nav_to_module(browser, 'backups') - href = f'/plinth/sys/backups/root/restore-archive/{archive_name}/' + href = f'/freedombox/sys/backups/root/restore-archive/{archive_name}/' _click_button_and_confirm(browser, href, 'form-restore') @@ -702,7 +709,7 @@ def networks_set_firewall_zone(browser, zone): 'and contains(@class, "connection-status-label")]/following::a').first network_id = device['href'].split('/')[-3] device.click() - edit_url = '/plinth/sys/networks/{}/edit/'.format(network_id) + edit_url = '/freedombox/sys/networks/{}/edit/'.format(network_id) click_link_by_href(browser, edit_url) browser.select('zone', zone) submit(browser, form_class='form-connection-edit') @@ -736,7 +743,7 @@ def create_user(browser, name, password=None, groups=[], email=None): if password is None: password = get_password(name) - click_link_by_href(browser, '/plinth/sys/users/create/') + click_link_by_href(browser, '/freedombox/sys/users/create/') browser.find_by_id('id_username').fill(name) browser.find_by_id('id_password1').fill(password) @@ -757,7 +764,7 @@ def create_user(browser, name, password=None, groups=[], email=None): def delete_user(browser, name): """Delete a user.""" nav_to_module(browser, 'users') - click_link_by_href(browser, f'/plinth/sys/users/{name}/edit/') + click_link_by_href(browser, f'/freedombox/sys/users/{name}/edit/') browser.find_by_id('id_delete').check() browser.find_by_id('id_confirm_password').fill( @@ -769,13 +776,14 @@ def delete_user(browser, name): '#user-delete-confirm-dialog button.confirm').first eventually(lambda: confirm_button.visible) assert confirm_button.visible - click_and_wait(browser, confirm_button, expected_url='/plinth/sys/users/') + click_and_wait(browser, confirm_button, + expected_url='/freedombox/sys/users/') def user_exists(browser, name): """Check if a user with a given name exists.""" nav_to_module(browser, 'users') - links = browser.links.find_by_href(f'/plinth/sys/users/{name}/edit/') + links = browser.links.find_by_href(f'/freedombox/sys/users/{name}/edit/') return len(links) == 1 @@ -783,7 +791,7 @@ def user_set_language(browser, language_code): """Change user's preferred UI language.""" username = config['DEFAULT']['username'] admin_password = config['DEFAULT']['password'] - visit(browser, '/plinth/sys/users/{}/edit/'.format(username)) + visit(browser, '/freedombox/sys/users/{}/edit/'.format(username)) browser.find_by_xpath('//select[@id="id_language"]//option[@value="' + language_code + '"]').first.click() browser.find_by_id('id_confirm_password').fill(admin_password) diff --git a/plinth/tests/functional/install.sh b/plinth/tests/functional/install.sh index 94ff71e82..9cd7ae5de 100755 --- a/plinth/tests/functional/install.sh +++ b/plinth/tests/functional/install.sh @@ -14,6 +14,15 @@ PIP_OPTIONS= dpkg --compare-versions 23 \<= $PIP_VERSION && PIP_OPTIONS=--break-system-packages pip3 install $PIP_OPTIONS selenium==4.25.0 splinter==0.21.0 pytest-splinter pytest-reporter-html1 +echo "Increasing systemd rate limits for starting units" +mkdir -p /etc/systemd/system.conf.d/ +# Increase the start limit from 5 times in 10 seconds to 20 times in 10 seconds. +cat > /etc/systemd/system.conf.d/freedombox-functional-tests.conf << EOF +[Manager] +DefaultStartLimitBurst=20 +EOF +systemctl daemon-reload + echo "Installing geckodriver" ( DL_DIR=/tmp/gecko diff --git a/plinth/tests/tags/test_functional.py b/plinth/tests/tags/test_functional.py index 806413457..66cda787b 100644 --- a/plinth/tests/tags/test_functional.py +++ b/plinth/tests/tags/test_functional.py @@ -13,14 +13,14 @@ pytestmark = [pytest.mark.tags] def _is_app_listed(session_browser, app): """Assert that the specified app is listed on the page.""" - app_links = session_browser.links.find_by_href(f'/plinth/apps/{app}/') + app_links = session_browser.links.find_by_href(f'/freedombox/apps/{app}/') assert len(app_links) == 1 @pytest.fixture(name='bittorrent_tag') def fixture_bittorrent_tag(session_browser): """Click on the BitTorrent tag.""" - bittorrent_tag = '/plinth/apps/?tag=BitTorrent' + bittorrent_tag = '/freedombox/apps/?tag=BitTorrent' functional.login(session_browser) functional.nav_to_module(session_browser, 'transmission') with functional.wait_for_page_update(session_browser, timeout=10, @@ -50,7 +50,7 @@ def test_search_for_tag(session_browser, bittorrent_tag): search_input = session_browser.find_by_id('add-tag-input').first with functional.wait_for_page_update( session_browser, timeout=10, - expected_url='/plinth/apps/?tag=BitTorrent&tag=File+sharing'): + expected_url='/freedombox/apps/?tag=BitTorrent&tag=File+sharing'): search_input.click() search_input.type('file sharing') search_input.type(Keys.ENTER) @@ -64,7 +64,7 @@ def test_click_on_tag(session_browser, bittorrent_tag): search_input = session_browser.find_by_id('add-tag-input').first with functional.wait_for_page_update( session_browser, timeout=10, - expected_url='/plinth/apps/?tag=BitTorrent&tag=File+sync'): + expected_url='/freedombox/apps/?tag=BitTorrent&tag=File+sync'): search_input.click() session_browser.find_by_css( ".dropdown-item[data-tag='File sync']").click() @@ -75,14 +75,14 @@ def test_click_on_tag(session_browser, bittorrent_tag): def test_tag_localization(session_browser, locale): """Test that tags are localized and tests in done localized.""" - functional.visit(session_browser, '/plinth/apps/?tag=Sharing') + functional.visit(session_browser, '/freedombox/apps/?tag=Sharing') badge = session_browser.find_by_css('.tag[data-tag="Sharing"]').first assert 'Compartir' in badge.text search_input = session_browser.find_by_id('add-tag-input').first with functional.wait_for_page_update( session_browser, timeout=10, - expected_url='/plinth/apps/?tag=Sharing&tag=Bookmarks'): + expected_url='/freedombox/apps/?tag=Sharing&tag=Bookmarks'): search_input.click() search_input.type('Marcadores') search_input.type(Keys.ENTER) diff --git a/plinth/tests/test_action_utils.py b/plinth/tests/test_action_utils.py index 56e9c894a..7e6a13c9d 100644 --- a/plinth/tests/test_action_utils.py +++ b/plinth/tests/test_action_utils.py @@ -4,6 +4,7 @@ Test module for key/value store. """ import json +import os import pathlib import subprocess from unittest.mock import Mock, call, patch @@ -17,7 +18,7 @@ from plinth.action_utils import (get_addresses, get_hostname, service_is_running, service_reload, service_restart, service_start, service_stop, service_try_reload_or_restart, - service_try_restart, service_unmask) + service_try_restart, service_unmask, umask) UNKNOWN = 'unknowndeamon' @@ -298,3 +299,29 @@ def test_run_no_storage(subprocess_run): subprocess_run.return_value.stderr = 'test-stderr' run(['command', 'arg1', '--foo'], check=True) + + +def test_umask(tmp_path): + """Test that setting umask works.""" + + def _asssert_umask(mask): + """Assert the current umask.""" + old_umask = os.umask(0) + assert old_umask == mask + os.umask(old_umask) + + original_umask = os.umask(0o1) + with umask(0o033): + _asssert_umask(0o033) + file1 = tmp_path / 'file1' + file1.touch() + assert file1.stat().st_mode & 0o033 == 0 + with umask(0o077): + _asssert_umask(0o77) + file2 = tmp_path / 'file2' + file2.touch() + assert file2.stat().st_mode & 0o077 == 0 + + _asssert_umask(0o033) + + os.umask(original_umask) diff --git a/plinth/tests/test_cfg.py b/plinth/tests/test_cfg.py index 6c5d81223..9dddf5c56 100644 --- a/plinth/tests/test_cfg.py +++ b/plinth/tests/test_cfg.py @@ -102,11 +102,9 @@ def test_read_config_file_with_missing_options(): def compare_configurations(parser): """Compare two sets of configuration values.""" assert parser.get('Path', 'file_root') == cfg.file_root - assert parser.get('Path', 'config_dir') == cfg.config_dir assert parser.get('Path', 'custom_static_dir') == cfg.custom_static_dir assert parser.get('Path', 'data_dir') == cfg.data_dir assert parser.get('Path', 'store_file') == cfg.store_file - assert parser.get('Path', 'actions_dir') == cfg.actions_dir assert parser.get('Path', 'doc_dir') == cfg.doc_dir assert parser.get('Network', 'host') == cfg.host diff --git a/plinth/tests/test_db.py b/plinth/tests/test_db.py index 470ce5688..0e7d46068 100644 --- a/plinth/tests/test_db.py +++ b/plinth/tests/test_db.py @@ -6,6 +6,7 @@ import threading import time from .. import db +from ..db import dbconfig def test_db_lock_no_wait(): @@ -66,3 +67,22 @@ def test_db_lock_release(): end_time = time.time() assert return_value assert end_time - start_time <= 0.23 + + +def test_dbconfig_get_credentials(tmp_path): + """Test that parsing a dbconfig-common file works.""" + file_path = tmp_path / 'test.conf' + configuration = ''' +dbc_dbserver='localhost' +dbc_dbname='miniflux' +dbc_dbuser='miniflux' +dbc_dbpass='gCcNyWjyPjDH' +''' + file_path.write_text(configuration) + credentials = dbconfig.get_credentials(file_path) + assert credentials == { + 'host': 'localhost', + 'database': 'miniflux', + 'user': 'miniflux', + 'password': 'gCcNyWjyPjDH', + } diff --git a/plinth/tests/test_middleware.py b/plinth/tests/test_middleware.py index 1c57b74f5..7895ba51a 100644 --- a/plinth/tests/test_middleware.py +++ b/plinth/tests/test_middleware.py @@ -63,7 +63,7 @@ class TestSetupMiddleware: @patch('django.urls.reverse', return_value='users:login') def test_404_urls(reverse, middleware, kwargs): """Test how middleware deals with 404 URLs.""" - request = RequestFactory().get('/plinth/non-existing-url') + request = RequestFactory().get('/freedombox/non-existing-url') response = middleware.process_view(request, **kwargs) assert response is None @@ -71,7 +71,7 @@ class TestSetupMiddleware: @patch('django.urls.reverse', return_value='users:login') def test_url_not_an_application(reverse, middleware, kwargs): """Test that none is returned for URLs that are not applications.""" - request = RequestFactory().get('/plinth/') + request = RequestFactory().get('/freedombox/') response = middleware.process_view(request, **kwargs) assert response is None @@ -83,7 +83,7 @@ class TestSetupMiddleware: resolve.return_value.namespaces = ['mockapp'] app.get_setup_state = lambda: app_module.App.SetupState.UP_TO_DATE - request = RequestFactory().get('/plinth/mockapp') + request = RequestFactory().get('/freedombox/mockapp') request.user = AnonymousUser() response = middleware.process_view(request, **kwargs) assert response is None @@ -99,7 +99,7 @@ class TestSetupMiddleware: resolve.return_value.namespaces = ['mockapp'] view = Mock() setup_view.as_view.return_value = view - request = RequestFactory().get('/plinth/mockapp') + request = RequestFactory().get('/freedombox/mockapp') request.session = MagicMock() # Verify that anonymous users cannot access the setup page @@ -152,7 +152,7 @@ class TestSetupMiddleware: app.get_setup_state = lambda: app_module.App.SetupState.UP_TO_DATE # Admin user can collect result - request = RequestFactory().get('/plinth/mockapp') + request = RequestFactory().get('/freedombox/mockapp') request.resolver_match = Mock() user = User(username='adminuser') user.save() @@ -175,7 +175,7 @@ class TestSetupMiddleware: messages_success.reset_mock() messages_error.reset_mock() operation_manager.collect_results.reset_mock() - request = RequestFactory().get('/plinth/mockapp') + request = RequestFactory().get('/freedombox/mockapp') user = User(username='johndoe') user.save() request.user = user @@ -201,7 +201,7 @@ class TestAdminMiddleware: @pytest.fixture(name='web_request') def fixture_web_request(): """Fixture for returning kwargs.""" - web_request = RequestFactory().get('/plinth/mockapp') + web_request = RequestFactory().get('/freedombox/mockapp') web_request.user = Mock() return web_request @@ -257,6 +257,16 @@ class TestAdminMiddleware: response = middleware.process_view(web_request, **kwargs) assert response is None + @staticmethod + def test_that_stronghold_allowed_urls_are_allowed_for_normal_user( + middleware, kwargs): + web_request = RequestFactory().get('/o/authorize/') + web_request.user = Mock() + web_request.user.groups.filter().exists = Mock(return_value=False) + web_request.session = MagicMock() + response = middleware.process_view(web_request, **kwargs) + assert response is None + class TestCommonErrorMiddleware: """Test cases for common error middleware.""" diff --git a/plinth/tests/test_notification.py b/plinth/tests/test_notification.py index 5e1c3f6d7..c8f9abbb1 100644 --- a/plinth/tests/test_notification.py +++ b/plinth/tests/test_notification.py @@ -337,7 +337,7 @@ def test_list_filter_user_and_group(note, user): @patch('plinth.notification.gettext') def test_display_context(gettext, note, user, rf): """Test display context for a notification.""" - request = rf.get('/plinth/help/about/') + request = rf.get('/freedombox/help/about/') data = { 'test-key1': 'test-value1', @@ -396,7 +396,7 @@ def test_display_context(gettext, note, user, rf): def test_display_context_body_template(note, user, load_cfg, rf): """Test display context for a notification with body template.""" - request = rf.get('/plinth/help/about/') + request = rf.get('/freedombox/help/about/') note.body_template = 'invalid-template.html' note.save() @@ -412,7 +412,7 @@ def test_display_context_body_template(note, user, load_cfg, rf): context = Notification.get_display_context(request, user) context_note = context['notifications'][0] assert context_note['body'].content == \ - b'Test notification body /plinth/help/about/\n' + b'Test notification body /freedombox/help/about/\n' @pytest.mark.django_db diff --git a/plinth/tests/test_utils.py b/plinth/tests/test_utils.py index ac87f1624..8f0a612db 100644 --- a/plinth/tests/test_utils.py +++ b/plinth/tests/test_utils.py @@ -36,7 +36,7 @@ class TestIsAdminUser: @pytest.fixture(name='web_request') def fixture_web_request(): """Setup each test case before execution.""" - web_request = RequestFactory().get('/plinth/mockapp') + web_request = RequestFactory().get('/freedombox/mockapp') web_request.user = Mock() web_request.session = MagicMock() return web_request diff --git a/plinth/tests/test_views.py b/plinth/tests/test_views.py index 618a35e5a..87dcfc8b9 100644 --- a/plinth/tests/test_views.py +++ b/plinth/tests/test_views.py @@ -57,7 +57,7 @@ def test_get_breadcrumbs(rf, test_menu): @pytest.mark.parametrize('url', [ - '/plinth/login/', + '/freedombox/login/', '/', 'safe', ]) @@ -71,11 +71,11 @@ def test_is_safe_url_valid_url(url): [ '', None, - '\\plinth', - '///plinth', - 'https://example.com/plinth/login/', + '\\freedombox', + '///freedombox', + 'https://example.com/freedombox/login/', 'https:///example.com', - 'https:///plinth/login', + 'https:///freedombox/login', 'ftp://example.com', 'https://[aabb::ccdd', # Invalid IPv6 ]) diff --git a/plinth/tests/test_web_server.py b/plinth/tests/test_web_server.py index e6e5d5237..7cb7fcbde 100644 --- a/plinth/tests/test_web_server.py +++ b/plinth/tests/test_web_server.py @@ -44,7 +44,7 @@ def test_static_files_mount(mount, load_cfg): calls = [ call( - None, '/plinth/a', { + None, '/freedombox/a', { '/': { 'tools.staticdir.root': '/b', 'tools.staticdir.on': True, @@ -52,7 +52,7 @@ def test_static_files_mount(mount, load_cfg): } }), call( - None, '/plinth/c', { + None, '/freedombox/c', { '/': { 'tools.staticdir.root': '/d', 'tools.staticdir.on': True, diff --git a/plinth/urls.py b/plinth/urls.py index 8842e7b88..59bc844d8 100644 --- a/plinth/urls.py +++ b/plinth/urls.py @@ -3,7 +3,8 @@ Django URLconf file containing all urls """ from captcha import views as cviews -from django.urls import include, re_path +from django.urls import include, path, re_path +from oauth2_provider import urls as oauth2_urls from stronghold.decorators import public from . import views @@ -46,5 +47,9 @@ urlpatterns = [ # Notifications re_path(r'^notification/(?P[A-Za-z0-9-=]+)/dismiss/$', - views.notification_dismiss, name='notification_dismiss') + views.notification_dismiss, name='notification_dismiss'), + + # OpenID Provider related URLs. They need to be under 'oauth2_provider:' + # namespace otherwise .well-known/openid-configuration will fail. + path('o/', include(oauth2_urls)), ] diff --git a/plinth/views.py b/plinth/views.py index c90e23429..ca6bdd380 100644 --- a/plinth/views.py +++ b/plinth/views.py @@ -497,9 +497,8 @@ class AppOperationsView(TemplateView): context['app_id'] = self.app.app_id context['app_info'] = self.app.info context['operations'] = operation.manager.filter(self.app.app_id) - context['refresh_page_sec'] = 0 - if context['operations']: - context['refresh_page_sec'] = 3 + # Refresh periodically while operations are running + context['refresh_page_sec'] = 3 if context['operations'] else 0 return context @@ -532,10 +531,10 @@ class SetupView(TemplateView): != app_module.App.SetupState.NEEDS_SETUP) context['refresh_page_sec'] = None - if context['setup_state'] == app_module.App.SetupState.UP_TO_DATE: - context['refresh_page_sec'] = 0 - elif context['operations']: + if context['operations']: context['refresh_page_sec'] = 3 + elif context['setup_state'] == app_module.App.SetupState.UP_TO_DATE: + context['refresh_page_sec'] = 0 return context @@ -550,10 +549,7 @@ class SetupView(TemplateView): # Give a moment for the setup process to start and show # meaningful status. time.sleep(1) - response = self.render_to_response(self.get_context_data()) - # Post/Response/Get pattern for reloads - response.status_code = 303 - return response + return redirect(request.path) return super().dispatch(request, *args, **kwargs) @@ -686,10 +682,18 @@ class AppLogsView(TemplateView): def notification_dismiss(request, id): """Dismiss a notification.""" + from django.http import HttpResponse from .notification import Notification notes = Notification.list(key=id, user=request.user) if notes: # If a notification is not found, no need to dismiss it. notes[0].dismiss() + # Don't redirect if the request is from HTMX. + if request.headers.get('HX-Request'): + response = HttpResponse(status=200) + # Trigger the notification-dismissed event to update the UI. + response['HX-Trigger'] = 'notification-dismissed' + return response + return HttpResponseRedirect(_get_redirect_url_from_param(request)) diff --git a/plinth/web_framework.py b/plinth/web_framework.py index 6ca815061..7a65a85ee 100644 --- a/plinth/web_framework.py +++ b/plinth/web_framework.py @@ -36,7 +36,11 @@ def init(): settings.DATABASES['default']['NAME'] = cfg.store_file settings.DEBUG = cfg.develop settings.FORCE_SCRIPT_NAME = cfg.server_dir - settings.INSTALLED_APPS += module_loader.get_modules_to_load() + # Order our apps before django/library apps so that we can override their + # templates, static files, management commands, etc. This requires that + # proper dependencies are declared inside database migration scripts. + settings.INSTALLED_APPS = module_loader.get_modules_to_load() + \ + settings.INSTALLED_APPS settings.LANGUAGES = get_languages() settings.LOGGING = log.get_configuration() settings.MESSAGE_TAGS = {message_constants.ERROR: 'danger'} diff --git a/plinth/web_server.py b/plinth/web_server.py index e7cb458d1..70ebe617a 100644 --- a/plinth/web_server.py +++ b/plinth/web_server.py @@ -72,8 +72,19 @@ def init(): 'engine.autoreload.match': AUTORELOAD_REGEX, }) + def _logging_middleware(application): + """A WSGI middleware to log messages before executing them.""" + + def _wrapper(environ, start_response): + """Log request, then hand control to original app.""" + logger.info("%s %s", environ['REQUEST_METHOD'], + environ['PATH_INFO']) + return application(environ, start_response) + + return _wrapper + application = web_framework.get_wsgi_application() - cherrypy.tree.graft(application, cfg.server_dir) + cherrypy.tree.graft(_logging_middleware(application), cfg.server_dir) static_dir = os.path.join(cfg.file_root, 'static') _mount_static_directory(static_dir, web_framework.get_static_url()) @@ -151,8 +162,8 @@ class StaticFiles(app_module.FollowerComponent): static files from the directory are served over the given web path. The web path will be prepended with the FreedomBox's configured base web path. For example, {'/foo': '/usr/share/foo'} means that - '/usr/share/foo/bar.png' will be served over '/plinth/foo/bar.png' if - FreedomBox is configured to be served on '/plinth'. + '/usr/share/foo/bar.png' will be served over '/freedombox/foo/bar.png' + if FreedomBox is configured to be served on '/freedombox'. """ super().__init__(component_id) diff --git a/pyproject.toml b/pyproject.toml index 7c0cf690f..436ab5e1c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,8 @@ [project] name = "plinth" description = "A web front end for administering FreedomBox" -license = {file = "COPYING.md"} +license = "AGPL-3.0-or-later" +license-files = ["COPYING.md"] dynamic = ["version"] classifiers = [ "Development Status :: 5 - Production/Stable", @@ -9,8 +10,6 @@ classifiers = [ "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: End Users/Desktop", - "License :: DFSG approved", - "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Programming Language :: JavaScript", @@ -171,6 +170,7 @@ module = [ "django.*", "gi.*", "numpy.*", + "oauth2_provider.*", "pam.*", "pexpect.*", "pgi.*", diff --git a/static/jslicense.html b/static/jslicense.html index 00ffac34e..0fcf1aa76 100644 --- a/static/jslicense.html +++ b/static/jslicense.html @@ -26,7 +26,7 @@ twitter-bootstap3 - jsxc-plinth.js + jsxc-plinth.js GNU Affero General Public License, version 3 or later diff --git a/static/themes/default/css/main.css b/static/themes/default/css/main.css index 603b120bc..d5808f69b 100644 --- a/static/themes/default/css/main.css +++ b/static/themes/default/css/main.css @@ -278,6 +278,11 @@ html { margin-bottom: 1.25rem; } +.narrow-container { + max-width: 496px; + margin-top: 4rem; +} + /* When an exception's text is shown in message as alert component, don't overflow the alert's width. */ .alert.d-flex div { @@ -945,12 +950,20 @@ section.app-description { .notification { padding: 0.625rem 0.9375rem; border-left: 0.3125rem solid; + max-height: 100rem; /* HACK: Very high value for closing transition. */ } .notification:not(:first-child) { border-top: 1px solid var(--bs-border-color-translucent); } +.notification.htmx-swapping { + opacity: 0; + overflow: hidden; + max-height: 0; + transition: opacity 0.3s, max-height 0.3s; +} + .notification-time { float: right; font-size: 0.8rem; @@ -1020,3 +1033,37 @@ textarea.log { width: 100%; text-wrap: nowrap; } + +/* + * OpenID Connect Authorization page. + */ +.authorize-container img { + display: block; + width: 100%; +} + +.authorize-container h3:first-of-type { + text-align: center; +} + +.authorize-container ul { + margin-top: 3rem; + margin-bottom: 3rem; +} + +.authorize-container .submit-container { + width: 100%; + margin: 4rem 0 1.5rem; +} + +.authorize-container .submit-container input { + width: 100%; + white-space: normal; +} + +@media (min-width: 576px) { + .authorize-diagram { + margin: 0 auto; + width: 80%; + } +} diff --git a/static/themes/default/img/application.svg b/static/themes/default/img/application.svg new file mode 100644 index 000000000..f57bbb90a --- /dev/null +++ b/static/themes/default/img/application.svg @@ -0,0 +1,515 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/themes/default/img/network-ethernet.svg b/static/themes/default/img/network-ethernet.svg index a9fa51c2f..36c22d31c 100644 --- a/static/themes/default/img/network-ethernet.svg +++ b/static/themes/default/img/network-ethernet.svg @@ -11,13 +11,12 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:export-ydpi="90.000000" inkscape:export-xdpi="90.000000" - inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png" + inkscape:export-filename="wi-fi.png" width="48px" height="48px" id="svg11300" sodipodi:version="0.32" inkscape:version="0.43+devel" - sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/devices" sodipodi:docname="network.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> { - // Refresh the page without resubmitting the POST data. - window.location = window.location.href; - }, seconds * 1000); - } -}); - /* * Return all submit buttons on the page */ @@ -245,7 +227,7 @@ document.addEventListener('DOMContentLoaded', async () => { try { setInstallButtonState(false); - const response = await fetch(`/plinth/is-available/${appId}/`, { + const response = await fetch(`/freedombox/is-available/${appId}/`, { timeout: 2 * 60 * 1000 // 2 minutes }); @@ -303,3 +285,52 @@ document.addEventListener('click', function (event) { bsCollapse.hide(); } }); + +/* + * Detect when hx-select element is not found in the response and reload the + * page. HTMX unfortunately does not seem to provide a JS event when hx-select + * element is not found in the response. However, in htmx:afterSwap event we can + * see that the target has no children and choose to refresh the whole page. + */ +document.body.addEventListener('htmx:afterSwap', function (event) { + const target = event.detail.target; + if (target && target.children.length === 0) { + window.location.reload(); + } +}); + +/* + * If an error occurs during a HTMX request, then reload the page. It won't be a + * silent failure for the user and will imitate the behavior that was present + * before HTMX was introduced. For functional tests, this means that a clear + * browser is shown. Tests can decide to reload the page until the error is + * resolved. + */ +document.body.addEventListener('htmx:responseError', function (event) { + window.location.reload(); +}); + +document.body.addEventListener("htmx:sendError", function(event) { + window.location.reload(); +}); + +/* + * Decrement notification counter badge when a notification is dismissed via + * HTMX. + */ +document.addEventListener('notification-dismissed', function (evt) { + // There are 2 badges on the page. One for mobile navbar and one for desktop + // navbar. + const badges = document.querySelectorAll('.notifications-dropdown .badge'); + + badges.forEach(badge => { + const count = parseInt(badge.textContent.trim()); + + if (count > 1) { + badge.textContent = count - 1; + } else { + const dropdowns = document.querySelectorAll('.notifications-dropdown'); + dropdowns.forEach(dropdown => dropdown.remove()); + } + }); +});