From 53f7c75d8ef43ebe4accaf4a825e381ea5ad143f Mon Sep 17 00:00:00 2001 From: Frederico Gomes Date: Sun, 4 Jan 2026 20:41:29 +0000 Subject: [PATCH 001/127] wireguard: add 'Start Server' button with confirmation page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds explicit UI flow to generate server keypair and interface. - New EnableServerView - Conditional 'Start Server' button on main page when no wg0 - Button switches to 'Add Client' after server setup Solves circular dependency UX issue when connecting two FBs EDIT: Following review feedback, I removed the intermediate confirmation page. The “Start WireGuard Server” button now sends a POST directly from the main page. Signed-off-by: Frederico Gomes Reviewed-by: James Valleroy [jvalleroy: Change from TemplateView to View] [jvalleroy: Remove redundant import] Signed-off-by: James Valleroy --- .../wireguard/templates/wireguard.html | 24 ++++++++++++++----- plinth/modules/wireguard/urls.py | 2 ++ plinth/modules/wireguard/views.py | 18 +++++++++++++- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/plinth/modules/wireguard/templates/wireguard.html b/plinth/modules/wireguard/templates/wireguard.html index d670179fd..73e56bce6 100644 --- a/plinth/modules/wireguard/templates/wireguard.html +++ b/plinth/modules/wireguard/templates/wireguard.html @@ -56,14 +56,26 @@

- - - {% trans "Add Allowed Client" %} - + {% if not server.public_key %} +
+ {% csrf_token %} + +
+ {% else %} + + + {% trans "Add Allowed Client" %} + + {% endif %}
+

{% trans "As a Client" %}

{% blocktrans trimmed %} 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/views.py b/plinth/modules/wireguard/views.py index 9259edf22..48fcc45f8 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 @@ -252,3 +252,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') From 0614b5e509be259d796765ef12486ab074fe4a4d Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Wed, 21 Jan 2026 20:47:21 -0500 Subject: [PATCH 002/127] wireguard: Update functional tests to handle Start Server button Signed-off-by: James Valleroy --- plinth/modules/wireguard/templates/wireguard.html | 2 +- plinth/modules/wireguard/tests/test_functional.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/plinth/modules/wireguard/templates/wireguard.html b/plinth/modules/wireguard/templates/wireguard.html index 73e56bce6..af7551b26 100644 --- a/plinth/modules/wireguard/templates/wireguard.html +++ b/plinth/modules/wireguard/templates/wireguard.html @@ -59,7 +59,7 @@ {% if not server.public_key %}

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

{% trans "As a Client" %}

From 7e7e7a6ccf739466036bdc034cabd9a997c2f28c Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 26 Feb 2026 22:34:20 -0800 Subject: [PATCH 084/127] wireguard: Fix showing default route setting in server edit form - The default route is not decided by the subnet on the IP address assigned. It is to be decided using the list of allowed peers in the wireguard settings. Tests: - Set the default route setting to 'on' while creating the connection. In the edit server page, the value is shown correctly. Repeat with 'off' value. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/wireguard/utils.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plinth/modules/wireguard/utils.py b/plinth/modules/wireguard/utils.py index ecb97581f..c7915bac3 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,6 +56,13 @@ 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() From ad9ebe23013ef32ce929b1ee8924a6b0e886dfcb Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 26 Feb 2026 22:38:35 -0800 Subject: [PATCH 085/127] wireguard: Show status of default route in server information page Tests: - Create a server connection with default route setting 'on'. See that the server status page reflects the value correctly. Repeat for 'off'. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../wireguard/templates/wireguard_show_server.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/plinth/modules/wireguard/templates/wireguard_show_server.html b/plinth/modules/wireguard/templates/wireguard_show_server.html index 58cf7841e..4f886ccfb 100644 --- a/plinth/modules/wireguard/templates/wireguard_show_server.html +++ b/plinth/modules/wireguard/templates/wireguard_show_server.html @@ -40,6 +40,17 @@ {% trans "IP address of this machine:" %} {{ server.ip_address }} + + + {% trans "All outgoing traffic is sent using this connection:" %} + + {% if server.default_route %} + {% trans "Yes" %} + {% else %} + {% trans "No" %} + {% endif %} + + From 4b24fda3f5f77ea01229c828ec66ec190aa7013a Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 26 Feb 2026 22:54:51 -0800 Subject: [PATCH 086/127] wireguard: Accept/use netmask with IP address for server connection - Currently, the value is hard-coded as /24. Instead take this as input and use that value. Tests: - Entering invalid IPv4 address results in 'Enter a valid IPv4 address' error message during form submission. - Entering invalid prefix such as /33 results in 'Enter a valid network prefix or net mask.' error during form submission. - Both /32 and /255.255.255.255 formats are accepted. - The description text for the form field 'IP address' is as expected. - Changing the value of default route and IP address + netmask reflects in the status page. Correct values is shown in the edit server and server status page. - Not providing a netmask results in /32 being assigned. - Unit and functional tests for wireguard pass. There are some intermittent failures with functional tests that are unrelated to the patch. - Setting the /32 prefix results in correct routing table as shown by 'ip route show table all'. No default routes are network routes are present. 'traceroute 1.1.1.1' shows route taken via regular network. - Setting the /24 prefix results in correct routing table. No default routes are present. However, for the /24 network a route is present with device wg1. 'traceroute 1.1.1.1' shows route taken via regular network. - Enabling the default route results in correct routing table. Default route is shown for device wg1 with high priority. 'traceroute 1.1.1.1' shows route taken via WireGuard network. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/wireguard/forms.py | 43 ++++++++++++++----- .../templates/wireguard_show_server.html | 4 +- plinth/modules/wireguard/tests/test_forms.py | 32 +++++++++++++- .../wireguard/tests/test_functional.py | 16 ++++--- plinth/modules/wireguard/utils.py | 4 +- plinth/modules/wireguard/views.py | 6 +-- plinth/network.py | 8 +--- 7 files changed, 83 insertions(+), 30 deletions(-) diff --git a/plinth/modules/wireguard/forms.py b/plinth/modules/wireguard/forms.py index 87450ac32..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,9 +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 = self.cleaned_data['ip_address'] + 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', @@ -118,7 +140,7 @@ class AddServerForm(forms.Form): 'ipv4': { 'method': 'manual', 'address': ip_address, - 'netmask': '255.255.255.0', + 'netmask': str(ip_address_and_network.netmask), 'gateway': '', 'dns': '', 'second_dns': '', @@ -126,10 +148,9 @@ class AddServerForm(forms.Form): 'wireguard': { 'peer_endpoint': self.cleaned_data['peer_endpoint'], 'peer_public_key': self.cleaned_data['peer_public_key'], - 'ip_address': ip_address, '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_show_server.html b/plinth/modules/wireguard/templates/wireguard_show_server.html index 4f886ccfb..f0f306c95 100644 --- a/plinth/modules/wireguard/templates/wireguard_show_server.html +++ b/plinth/modules/wireguard/templates/wireguard_show_server.html @@ -36,9 +36,9 @@ {% trans "Public key of this machine:" %} {{ server.public_key }} - + {% trans "IP address of this machine:" %} - {{ server.ip_address }} + {{ server.ip_address_and_network }} 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 02f60a36d..bc2714440 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=' }, @@ -70,7 +70,8 @@ class TestWireguardApp(functional.BaseAppTests): # Start the server on FreedomBox, if needed. start_server_button = browser.find_by_css('.btn-start-server') if start_server_button: - start_server_button.first.click() + 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) @@ -135,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') @@ -147,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') @@ -161,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/utils.py b/plinth/modules/wireguard/utils.py index c7915bac3..5917ade72 100644 --- a/plinth/modules/wireguard/utils.py +++ b/plinth/modules/wireguard/utils.py @@ -65,7 +65,9 @@ def get_nm_info(): 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 diff --git a/plinth/modules/wireguard/views.py b/plinth/modules/wireguard/views.py index 545acfbc1..e561bd245 100644 --- a/plinth/modules/wireguard/views.py +++ b/plinth/modules/wireguard/views.py @@ -101,8 +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 - if not domain.endswith('.local') + for domain in domains if not domain.endswith('.local') ] return context @@ -227,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'] diff --git a/plinth/network.py b/plinth/network.py index 873bcd5bb..657d73363 100644 --- a/plinth/network.py +++ b/plinth/network.py @@ -507,12 +507,8 @@ def _update_wireguard_settings(connection, wireguard): peer.set_preshared_key_flags(nm.SettingSecretFlags.NONE) peer.set_preshared_key(wireguard['preshared_key'], False) - if wireguard['default_route']: - peer.append_allowed_ip('0.0.0.0/0', False) - peer.append_allowed_ip('::/0', False) - else: - ip_addr = wireguard['ip_address'] - peer.append_allowed_ip(f'{ip_addr}/24', False) + for allowed_ip in wireguard['allowed_ips']: + peer.append_allowed_ip(allowed_ip, False) settings.clear_peers() settings.append_peer(peer) From 72005d62051c79c4d34981f0570b05890a06ab3b Mon Sep 17 00:00:00 2001 From: Frederico Gomes Date: Thu, 26 Feb 2026 10:51:11 +0000 Subject: [PATCH 087/127] miniflux: Revert workaround for a packaging bug with DB connection This reverts commit 9af9a504e09b8021041a7d8fe4540574f42edc1c. This workaround is no longer needed as the file is no longer used. Reverted as per: https://salsa.debian.org/freedombox-team/freedombox/-/merge_requests/2752#note_728315 **plinth/modules/miniflux/__init__.py** - Keep version bump **plinth/modules/miniflux/privileged.py** - Keep docstring fix Reviewed-by: Sunil Mohan Adapa --- plinth/modules/miniflux/__init__.py | 1 - plinth/modules/miniflux/privileged.py | 15 --------------- 2 files changed, 16 deletions(-) diff --git a/plinth/modules/miniflux/__init__.py b/plinth/modules/miniflux/__init__.py index 1a4083379..509d8a48d 100644 --- a/plinth/modules/miniflux/__init__.py +++ b/plinth/modules/miniflux/__init__.py @@ -105,7 +105,6 @@ class MinifluxApp(app_module.App): 'shared-daemon-miniflux-postgresql').ensure_running(): super().setup(old_version) - privileged.setup(old_version) if not old_version: self.enable() diff --git a/plinth/modules/miniflux/privileged.py b/plinth/modules/miniflux/privileged.py index e30b09170..4490a5946 100644 --- a/plinth/modules/miniflux/privileged.py +++ b/plinth/modules/miniflux/privileged.py @@ -4,7 +4,6 @@ import json import os import pathlib -import shutil from typing import Tuple from urllib.parse import urlparse @@ -55,20 +54,6 @@ def pre_setup(): vars_file.write_text(_dict_to_env_file(new_settings)) -@privileged -def setup(old_version: int): - """Perform post-install actions for Miniflux.""" - # Fix incorrect permissions on database file in version 2.2.0-2. See - # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1081562 . Can be - # removed after the fix for the bug reaches Trixie/testing. - shutil.chown(DATABASE_FILE, user='miniflux', group='root') - if not old_version or action_utils.service_is_enabled('miniflux'): - # If the service was tried too many times already, it won't - # successfully restart. - action_utils.service_reset_failed('miniflux') - action_utils.service_restart('miniflux') - - def _run_miniflux_interactively(command: str, username: str, password: str) -> Tuple[str, dict]: """Fill interactive terminal prompt for username and password.""" From 9a524b331be8c715df5e368a7b4e3e5b6f4d348c Mon Sep 17 00:00:00 2001 From: Frederico Gomes Date: Thu, 26 Feb 2026 16:08:05 +0000 Subject: [PATCH 088/127] db: Create a utility to get credentials from dbconfig Create helper function that uses Augeas Shellvars to parse dbconfig-common files. Signed-off-by: Frederico Gomes fredericojfgomes@gmail.com [sunil: Fix quotes not getting removed from values] [sunil: Add test case] Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa --- plinth/db/dbconfig.py | 40 ++++++++++++++++++++++++++++++++++++++++ plinth/tests/test_db.py | 20 ++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 plinth/db/dbconfig.py 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/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', + } From af6d1d9a4c61e7e74b506756fa1c66d69e343ecb Mon Sep 17 00:00:00 2001 From: Frederico Gomes Date: Thu, 26 Feb 2026 17:41:35 +0000 Subject: [PATCH 089/127] miniflux: Get credentials from dbconfig-common directly Fixes: #2562 Newer miniflux package does not create a separate file called /etc/miniflux/database. Instead it write the database URL directly into /etc/miniflux/miniflux.conf. It is easier to create the database settings from dbconfig-common that to read them from miniflux.conf. Signed-off-by: Frederico Gomes Reviewed-by: Sunil Mohan Adapa --- plinth/modules/miniflux/privileged.py | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/plinth/modules/miniflux/privileged.py b/plinth/modules/miniflux/privileged.py index 4490a5946..4a0b5f4c3 100644 --- a/plinth/modules/miniflux/privileged.py +++ b/plinth/modules/miniflux/privileged.py @@ -5,13 +5,12 @@ import json import os import pathlib from typing import Tuple -from urllib.parse import urlparse import pexpect from plinth import action_utils from plinth.actions import privileged, secret_str -from plinth.db import postgres +from plinth.db import postgres, dbconfig from plinth.utils import is_non_empty_file STATIC_SETTINGS = { @@ -21,7 +20,7 @@ STATIC_SETTINGS = { } ENV_VARS_FILE = '/etc/miniflux/freedombox.conf' -DATABASE_FILE = '/etc/miniflux/database' +DBCONFIG_PATH = '/etc/dbconfig-common/miniflux.conf' DB_BACKUP_FILE = '/var/lib/plinth/backups-data/miniflux-database.sql' @@ -117,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']) From 284a384d3a0f373ad068084c3b21fd738622b238 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 17 Nov 2025 14:00:03 -0800 Subject: [PATCH 090/127] README/HACKING: Update weblate project path to /freedombox Tests: - The news links work. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- HACKING.md | 2 +- plinth/locale/README | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/HACKING.md b/HACKING.md index 36f263581..9c76f3dcc 100644 --- a/HACKING.md +++ b/HACKING.md @@ -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/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 From bf83cb5a5ba7d01a60d3febbd43e5d05d0239827 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 17 Nov 2025 13:19:28 -0800 Subject: [PATCH 091/127] *: Remove some absolute file paths in SVGs - They are not useful. Tests: - All the modified SVG files load and show as expected. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../modules/bepasty/static/icons/bepasty.svg | 2 +- plinth/modules/coturn/static/icons/coturn.svg | 2 +- plinth/modules/deluge/static/icons/deluge.svg | 2 +- .../infinoted/static/icons/infinoted.svg | 51 ++----------------- .../mediawiki/static/icons/mediawiki.svg | 2 +- plinth/modules/searx/static/icons/searx.svg | 2 +- .../static/icons/transmission.svg | 2 +- .../wordpress/static/icons/wordpress.svg | 2 +- .../themes/default/img/network-ethernet.svg | 3 +- .../themes/default/img/network-wireless.svg | 3 +- 10 files changed, 12 insertions(+), 59 deletions(-) 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"> + 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/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"> 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"> Date: Wed, 12 Nov 2025 20:30:45 -0800 Subject: [PATCH 092/127] matrixsynapse: Update apache config to proxy Synapse client API - Use the recommended configuration from Matrix Synapse documentation. - Preserve Host: header. - Set the X-Forwarded-Proto header. - Don't decode encoded slashes in the URLs during proxying. - Also proxy Synapse client API. Tests: - Web app at app.element.io is able to connect to a local server using browser. Two client can chat with each other. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../conf-available/matrix-synapse-plinth.conf | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) 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 + From a7ec37dbce6e40181c78688325f7a7425b97b7ba Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 17 Nov 2025 11:52:04 -0800 Subject: [PATCH 093/127] cfg: Drop unused config_dir option Tests: - Unit tests pass. - When file /usr/share/freedombox/freedombox.conf is created, we can see log message 'Configuration loaded from file - /usr/share/freedombox/freedombox.conf' - When running in develop mode, we can see log message 'Configuration loaded from file - /freedombox/plinth/develop.conf' Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/cfg.py | 2 -- plinth/conftest.py | 6 +++--- plinth/develop.config | 1 - plinth/tests/data/configs/freedombox.config | 1 - plinth/tests/test_cfg.py | 1 - 5 files changed, 3 insertions(+), 8 deletions(-) diff --git a/plinth/cfg.py b/plinth/cfg.py index 0ab90174c..4accf0845 100644 --- a/plinth/cfg.py +++ b/plinth/cfg.py @@ -12,7 +12,6 @@ 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' @@ -111,7 +110,6 @@ 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'), diff --git a/plinth/conftest.py b/plinth/conftest.py index a67589b22..e3b77b8f3 100644 --- a/plinth/conftest.py +++ b/plinth/conftest.py @@ -64,9 +64,9 @@ 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', + keys = ('file_root', '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') saved_state = {} for key in keys: diff --git a/plinth/develop.config b/plinth/develop.config index e2a61f89a..b3edf47d9 100644 --- a/plinth/develop.config +++ b/plinth/develop.config @@ -1,5 +1,4 @@ [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/tests/data/configs/freedombox.config b/plinth/tests/data/configs/freedombox.config index db6fc00ff..30cb3d2ee 100644 --- a/plinth/tests/data/configs/freedombox.config +++ b/plinth/tests/data/configs/freedombox.config @@ -1,6 +1,5 @@ [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 diff --git a/plinth/tests/test_cfg.py b/plinth/tests/test_cfg.py index 6c5d81223..feaf7b75a 100644 --- a/plinth/tests/test_cfg.py +++ b/plinth/tests/test_cfg.py @@ -102,7 +102,6 @@ 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 From 4371e2475d0c3887511d816fbd4062703d4d716d Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 17 Nov 2025 12:05:59 -0800 Subject: [PATCH 094/127] cfg: Drop unused actions_dir option Tests: - Unit tests pass Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/cfg.py | 2 -- plinth/conftest.py | 6 +++--- plinth/develop.config | 1 - plinth/tests/data/configs/freedombox.config | 1 - plinth/tests/test_cfg.py | 1 - 5 files changed, 3 insertions(+), 8 deletions(-) diff --git a/plinth/cfg.py b/plinth/cfg.py index 4accf0845..b53d2df71 100644 --- a/plinth/cfg.py +++ b/plinth/cfg.py @@ -15,7 +15,6 @@ file_root = '/usr/share/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' @@ -113,7 +112,6 @@ def read_file(config_path): ('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 e3b77b8f3..a4ce1bbec 100644 --- a/plinth/conftest.py +++ b/plinth/conftest.py @@ -65,9 +65,9 @@ def fixture_load_cfg(): from plinth import cfg keys = ('file_root', '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') + '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/develop.config b/plinth/develop.config index b3edf47d9..f8b70135c 100644 --- a/plinth/develop.config +++ b/plinth/develop.config @@ -1,4 +1,3 @@ [Path] file_root = %(parent_parent_dir)s -actions_dir = %(file_root)s/actions doc_dir = %(file_root)s/doc diff --git a/plinth/tests/data/configs/freedombox.config b/plinth/tests/data/configs/freedombox.config index 30cb3d2ee..30cfb0aad 100644 --- a/plinth/tests/data/configs/freedombox.config +++ b/plinth/tests/data/configs/freedombox.config @@ -2,7 +2,6 @@ file_root = %(parent_dir)s data_dir = %(file_root)s/data/var/lib/plinth server_dir = /plinth -actions_dir = %(file_root)s/actions 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/test_cfg.py b/plinth/tests/test_cfg.py index feaf7b75a..9dddf5c56 100644 --- a/plinth/tests/test_cfg.py +++ b/plinth/tests/test_cfg.py @@ -105,7 +105,6 @@ def compare_configurations(parser): 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 From 0eca1394c06e81a71643c507799c046b12ac393e Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 11 Feb 2026 13:23:51 -0800 Subject: [PATCH 095/127] Vagrantfile: Drop unnecessary sudo configuration for actions - Actions have been completed removed due to implementation of privileged daemon. Tests: - None Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .vagrant-scripts/plinth-user-permissions.py | 16 ---------------- Vagrantfile | 6 ------ 2 files changed, 22 deletions(-) delete mode 100755 .vagrant-scripts/plinth-user-permissions.py 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/Vagrantfile b/Vagrantfile index 366097b57..c78a26ab3 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -34,11 +34,5 @@ $ 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 From 82d7cd0e8f9d5d473866c0d1e1a47bbd2423bcc3 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 11 Feb 2026 13:33:39 -0800 Subject: [PATCH 096/127] pyproject: Use new format to specify licenses See: https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license This eliminates the following warning messages when building the package: ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2026-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** Tests: - Debian package can be built successfully. Two fewer warning during python package build step were noticed. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- pyproject.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7c0cf690f..e04778dbf 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", From 185559b43fcd1aeb78670dde9e434c054d691322 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 15 Feb 2026 12:24:41 -0800 Subject: [PATCH 097/127] action_utils: Drop support for link-local IPv6 addresses Tests: - Diagnostics page for Calibre app does not show a test for link-local IPv6 address anymore. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/action_utils.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/plinth/action_utils.py b/plinth/action_utils.py index fca5bddcb..168e390b0 100644 --- a/plinth/action_utils.py +++ b/plinth/action_utils.py @@ -371,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 @@ -398,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 From fde0a620f908a6e49952d4cd6668558bc7e453f7 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 11 Feb 2026 12:56:01 -0800 Subject: [PATCH 098/127] debian: Ensure that gbp creates a clean tarball prior to build - Without the --git-export-dir option, gbp builds from the current directory which contains .container and many other large files. All of these files will get included into the tarball by default when 'gbp buildpackage' is executed in an unclean folder. - With the --git-export-dir option set, 'git export' is first executed to a temporary directory and this git operation respects patterns in .gitignore. Thus only expected files end up in the freedombox package source tarball. Tests: - When the source directory contains files in ./container, running 'gbp buildpackage' results in freedombox*.tar.xz containing the disk images of the containers. With this change, the tarball is clean and none of the files in .gitignore endup in the tarball. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- debian/gbp.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/debian/gbp.conf b/debian/gbp.conf index 85d542409..4209d43e2 100644 --- a/debian/gbp.conf +++ b/debian/gbp.conf @@ -1,6 +1,9 @@ [DEFAULT] debian-branch = main +[buildpackage] +export-dir = ../build-area/ + [dch] git-log = --no-merges multimaint-merge = True From 854916c54c12f5181ad9c7522d1e16f1de369550 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 18 Feb 2026 13:15:11 -0800 Subject: [PATCH 099/127] syncthing: tests: Fix tests by allowing rapid restarts Tests: - Functional tests for syncthing pass. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../system/syncthing@syncthing.service.d/freedombox.conf | 7 +++++++ 1 file changed, 7 insertions(+) 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 From 0d579012d7068d12769b95d21225e62f2c77b754 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Tue, 17 Feb 2026 12:38:52 -0800 Subject: [PATCH 100/127] web_server: Log requests to WSGI app - This is quite useful for debugging even on production machines. - CherryPy can't be used for logging as grafting a WSGI application bypasses the usual mechanisms of logging. - Keep requests for static files turned off in CherryPy as these are not very useful. Tests: - Making a request print an INFO message on the log with method and path after the /freedombox part. Logs can be seen in systemd journal. - Requests for static files are not logged. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/web_server.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/plinth/web_server.py b/plinth/web_server.py index e7cb458d1..d22f11f51 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()) From 168f662a179543dcab62bb89fe53cb32dac633f5 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 17 Nov 2025 14:14:41 -0800 Subject: [PATCH 101/127] *: Update URL base from /plinth to /freedombox - Since we are going to be an OpenID Provider, we need to fix the URLs that other apps will be configured with for authentication. So change now from /plinth to /freedombox. If done later, it will be harder since all the configuration files for all dependent apps will need to be updated. Tests: - App availability checking works. Request goes to /freedombox URL - Favicon is served properly and through /favicon.ico URL - Redirection happens from / to /freedombox directly - UI is available on /freedombox and on /plinth - Manual page show /freedombox as the URL in two places - Static files are successfully served from /freedombox URLs. URLs inside page start with /freedombox - backup, bepasty, calibre, config, dynamicdns, ejabberd, featherwiki, gitweb, ikiwiki, kiwix, miniflux, names, openvpn, shadowsocks, shadowsocksserver, sharing, shapshot, tiddlywiki, users, wireguard, jsxc, matrixsynapse, first wizard, storage, samba, tags functional tests work. Backup/restore test for matrixsynapse fails due to an unrelated bug (server not restarted after restore). - Setting the home page works: - Having /plinth in the home page configuration works. Shows selection correctly. - Setting to app works. Shows selection correctly. - Setting to user home page (sets /freedombox). Shows selection correctly. - Setting to apache default works. Shows selection correctly. - Changing back to FreedomBox service works. Shows selection correctly. - Unit tests work - Configuration page shows /freedombox in description but not /plinth - Diagnostics show /freedombox in tests - Roundcube URL link in email app has /freedombox - email loads the page /.well-known/autoconfig/mail/config-v1.1.xml correctly - email app shows /freedombox/apps/roundcube for /roundcube if roundcube is not installed. - networks: router configuration page shows URL starting with /freedombox. - snapshot: Shows URL starting with /freedombox on the app page - js licenses page uses /freedombox prefix for JSXC. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- INSTALL.md | 2 +- Makefile | 2 +- Vagrantfile | 2 +- .../apache2/conf-available/freedombox.conf | 12 ++--- doc/plinth.xml | 6 +-- doc/scripts/wikiparser.py | 22 ++++----- plinth/cfg.py | 2 +- .../modules/backups/tests/test_functional.py | 20 ++++---- .../modules/bepasty/tests/test_functional.py | 2 +- .../modules/calibre/tests/test_functional.py | 6 +-- plinth/modules/config/__init__.py | 8 ++-- plinth/modules/config/forms.py | 8 ++-- plinth/modules/config/tests/test_config.py | 17 ++++--- .../modules/config/tests/test_functional.py | 8 ++-- plinth/modules/diagnostics/__init__.py | 2 +- .../dynamicdns/tests/test_functional.py | 6 +-- .../modules/ejabberd/tests/test_functional.py | 2 +- plinth/modules/email/__init__.py | 2 +- .../conf-available/email-freedombox.conf | 4 +- .../featherwiki/tests/test_functional.py | 8 ++-- .../modules/gitweb/tests/test_functional.py | 13 ++--- .../modules/ikiwiki/tests/test_functional.py | 4 +- plinth/modules/kiwix/tests/test_functional.py | 5 +- .../modules/miniflux/tests/test_functional.py | 3 +- plinth/modules/names/tests/test_functional.py | 2 +- .../router_configuration_content.html | 2 +- .../modules/openvpn/tests/test_functional.py | 3 +- .../shadowsocks/tests/test_functional.py | 4 +- .../tests/test_functional.py | 4 +- .../modules/sharing/tests/test_functional.py | 6 +-- plinth/modules/snapshot/__init__.py | 2 +- .../modules/snapshot/tests/test_functional.py | 6 +-- .../includes/freedombox-single-sign-on.conf | 6 +-- .../tiddlywiki/tests/test_functional.py | 12 ++--- plinth/modules/users/tests/test_functional.py | 20 ++++---- .../wireguard/tests/test_functional.py | 2 +- plinth/settings.py | 4 +- plinth/tests/data/configs/freedombox.config | 2 +- plinth/tests/data/shortcuts/dotd.json | 2 +- .../data/shortcuts/dotd.json.d/01_extra.json | 2 +- plinth/tests/data/shortcuts/nextcloud.json | 2 +- plinth/tests/functional/__init__.py | 47 ++++++++++--------- plinth/tests/tags/test_functional.py | 12 ++--- plinth/tests/test_middleware.py | 14 +++--- plinth/tests/test_notification.py | 6 +-- plinth/tests/test_utils.py | 2 +- plinth/tests/test_views.py | 10 ++-- plinth/tests/test_web_server.py | 4 +- plinth/web_server.py | 4 +- static/jslicense.html | 2 +- static/themes/default/js/main.js | 2 +- 51 files changed, 182 insertions(+), 168 deletions(-) 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 9d0f1c705..e5e5673b7 100644 --- a/Makefile +++ b/Makefile @@ -230,7 +230,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 c78a26ab3..7534b7549 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -28,7 +28,7 @@ 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 diff --git a/data/etc/apache2/conf-available/freedombox.conf b/data/etc/apache2/conf-available/freedombox.conf index fffff0490..14d2b85fb 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,7 @@ ## mod_proxy_http ## - ProxyPass http://127.0.0.1:8000/plinth + ProxyPass http://127.0.0.1:8000/freedombox ## 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 +70,7 @@ RequestHeader unset X-Forwarded-For - ProxyPass http://127.0.0.1:8000/plinth + ProxyPass http://127.0.0.1:8000/freedombox RequestHeader set X-Forwarded-Proto 'https' env=HTTPS RequestHeader unset X-Forwarded-For @@ -82,7 +82,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/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/cfg.py b/plinth/cfg.py index b53d2df71..d95ff07dc 100644 --- a/plinth/cfg.py +++ b/plinth/cfg.py @@ -16,7 +16,7 @@ data_dir = '/var/lib/plinth' custom_static_dir = '/var/www/plinth/custom/static' store_file = data_dir + '/plinth.sqlite3' doc_dir = '/usr/share/freedombox' -server_dir = '/plinth' +server_dir = '/freedombox' # [Network] section host = '127.0.0.1' diff --git a/plinth/modules/backups/tests/test_functional.py b/plinth/modules/backups/tests/test_functional.py index 7a109288d..0377239b2 100644 --- a/plinth/modules/backups/tests/test_functional.py +++ b/plinth/modules/backups/tests/test_functional.py @@ -85,7 +85,8 @@ def test_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): @@ -126,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') @@ -158,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() @@ -192,7 +193,7 @@ 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 @@ -201,22 +202,23 @@ def _download(browser, archive_name=None): 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') @@ -233,7 +235,7 @@ def _add_remote_backup_location(browser, ssh_use_password=True): _remove_remote_backup_location(browser) browser.links.find_by_href( - '/plinth/sys/backups/repositories/add-remote/').first.click() + '/freedombox/sys/backups/repositories/add-remote/').first.click() browser.find_by_name('repository').fill(REMOTE_PATH) password = functional.get_password( functional.config['DEFAULT']['username']) diff --git a/plinth/modules/bepasty/tests/test_functional.py b/plinth/modules/bepasty/tests/test_functional.py index 222d5db1d..a1e0dc1c5 100644 --- a/plinth/modules/bepasty/tests/test_functional.py +++ b/plinth/modules/bepasty/tests/test_functional.py @@ -68,7 +68,7 @@ def _set_default_permissions(browser, permissions=''): def _add_password(browser): - functional.visit(browser, '/plinth/apps/bepasty/add/') + functional.visit(browser, '/freedombox/apps/bepasty/add/') for permission in ['read', 'create', 'list', 'delete', 'admin']: browser.find_by_css('#id_bepasty-permissions input[value="{}"]'.format( permission)).check() 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/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/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..59421bc7e 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 @@ -25,12 +25,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/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/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/kiwix/tests/test_functional.py b/plinth/modules/kiwix/tests/test_functional.py index c23644b5d..504efbb81 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!') 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/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/openvpn/tests/test_functional.py b/plinth/modules/openvpn/tests/test_functional.py index 4c8aeda47..dc7f58675 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] @@ -64,5 +65,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/shadowsocks/tests/test_functional.py b/plinth/modules/shadowsocks/tests/test_functional.py index 1ed8fc38e..14a50d6f8 100644 --- a/plinth/modules/shadowsocks/tests/test_functional.py +++ b/plinth/modules/shadowsocks/tests/test_functional.py @@ -38,7 +38,7 @@ class TestShadowsocksApp(functional.BaseAppTests): def _configure(browser, server, password): """Configure shadowsocks client with given server details.""" - functional.visit(browser, '/plinth/apps/shadowsocks/') + functional.visit(browser, '/freedombox/apps/shadowsocks/') browser.find_by_id('id_server').fill(server) browser.find_by_id('id_password').fill(password) functional.submit(browser, form_class='form-configuration') @@ -46,7 +46,7 @@ def _configure(browser, server, password): def _get_configuration(browser): """Return the server and password currently configured in shadowsocks.""" - functional.visit(browser, '/plinth/apps/shadowsocks/') + functional.visit(browser, '/freedombox/apps/shadowsocks/') server = browser.find_by_id('id_server').value password = browser.find_by_id('id_password').value return server, password diff --git a/plinth/modules/shadowsocksserver/tests/test_functional.py b/plinth/modules/shadowsocksserver/tests/test_functional.py index 4b0cc2c07..02e302d37 100644 --- a/plinth/modules/shadowsocksserver/tests/test_functional.py +++ b/plinth/modules/shadowsocksserver/tests/test_functional.py @@ -38,13 +38,13 @@ class TestShadowsocksServerApp(functional.BaseAppTests): def _configure(browser, password): """Configure Shadowsocks Server with given details.""" - functional.visit(browser, '/plinth/apps/shadowsocksserver/') + functional.visit(browser, '/freedombox/apps/shadowsocksserver/') browser.find_by_id('id_password').fill(password) functional.submit(browser, form_class='form-configuration') def _get_configuration(browser): """Return the password currently configured in Shadowsocks Server.""" - functional.visit(browser, '/plinth/apps/shadowsocksserver/') + functional.visit(browser, '/freedombox/apps/shadowsocksserver/') password = browser.find_by_id('id_password').value return password 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/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 index 09cb21ba6..6ced5ea9f 100644 --- 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 @@ -1,11 +1,11 @@ TKTAuthPublicKey /etc/apache2/auth-pubtkt-keys/pubkey.pem - TKTAuthLoginURL /plinth/accounts/sso/login/ + TKTAuthLoginURL /freedombox/accounts/sso/login/ TKTAuthBackArgName next TKTAuthDigest SHA512 - TKTAuthRefreshURL /plinth/accounts/sso/refresh/ - TKTAuthUnauthURL /plinth + TKTAuthRefreshURL /freedombox/accounts/sso/refresh/ + TKTAuthUnauthURL /freedombox AuthType mod_auth_pubtkt AuthName "FreedomBox Single Sign On" Require valid-user 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/users/tests/test_functional.py b/plinth/modules/users/tests/test_functional.py index a56cbf11e..b18f537c9 100644 --- a/plinth/modules/users/tests/test_functional.py +++ b/plinth/modules/users/tests/test_functional.py @@ -303,7 +303,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 +311,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 +320,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 +332,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 +348,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 +360,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 +379,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/wireguard/tests/test_functional.py b/plinth/modules/wireguard/tests/test_functional.py index bc2714440..b9ed811fa 100644 --- a/plinth/modules/wireguard/tests/test_functional.py +++ b/plinth/modules/wireguard/tests/test_functional.py @@ -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.""" diff --git a/plinth/settings.py b/plinth/settings.py index b15b2190c..436e5f277 100644 --- a/plinth/settings.py +++ b/plinth/settings.py @@ -114,7 +114,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 = [ @@ -190,7 +190,7 @@ 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/', ) diff --git a/plinth/tests/data/configs/freedombox.config b/plinth/tests/data/configs/freedombox.config index 30cfb0aad..99bb30bd3 100644 --- a/plinth/tests/data/configs/freedombox.config +++ b/plinth/tests/data/configs/freedombox.config @@ -1,7 +1,7 @@ [Path] file_root = %(parent_dir)s data_dir = %(file_root)s/data/var/lib/plinth -server_dir = /plinth +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/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 2b89ed6e3..85300f5c2 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/', @@ -377,7 +377,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 @@ -398,7 +398,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') @@ -409,7 +409,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) @@ -423,7 +423,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'): @@ -436,13 +436,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') @@ -603,7 +603,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') @@ -613,8 +613,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') @@ -624,15 +624,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] @@ -659,12 +659,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') @@ -674,7 +674,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() @@ -690,7 +690,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') @@ -708,7 +708,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') @@ -742,7 +742,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) @@ -763,7 +763,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( @@ -775,13 +775,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 @@ -789,7 +790,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/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_middleware.py b/plinth/tests/test_middleware.py index 1c57b74f5..47d46ab24 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 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/web_server.py b/plinth/web_server.py index d22f11f51..70ebe617a 100644 --- a/plinth/web_server.py +++ b/plinth/web_server.py @@ -162,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/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/js/main.js b/static/themes/default/js/main.js index 31d4bd1c9..94aa8862a 100644 --- a/static/themes/default/js/main.js +++ b/static/themes/default/js/main.js @@ -227,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 }); From bbbe2cf9503d91f98ce070f86d295016d1509ba4 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 12 Feb 2026 13:17:28 -0800 Subject: [PATCH 102/127] tests: functional: Fix expecting FreedomBox to be home page In some cases, we are visiting / and expecting to reach the home page of FreedomBox UI. When due to failed tests in config app, the home page is set to something other than FreedomBox UI, these tests fail. Fix this by visiting /freedombox explicitly instead. Tests: - When hope page is set to Syncthing, kiwix functional tests pass. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/kiwix/tests/test_functional.py | 2 +- plinth/modules/openvpn/tests/test_functional.py | 6 ++++-- plinth/tests/functional/__init__.py | 5 +++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/plinth/modules/kiwix/tests/test_functional.py b/plinth/modules/kiwix/tests/test_functional.py index 504efbb81..5912c4622 100644 --- a/plinth/modules/kiwix/tests/test_functional.py +++ b/plinth/modules/kiwix/tests/test_functional.py @@ -115,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/openvpn/tests/test_functional.py b/plinth/modules/openvpn/tests/test_functional.py index dc7f58675..dd901c5e1 100644 --- a/plinth/modules/openvpn/tests/test_functional.py +++ b/plinth/modules/openvpn/tests/test_functional.py @@ -31,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) diff --git a/plinth/tests/functional/__init__.py b/plinth/tests/functional/__init__.py index 85300f5c2..78d3f348a 100644 --- a/plinth/tests/functional/__init__.py +++ b/plinth/tests/functional/__init__.py @@ -368,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']) @@ -560,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 From a8e2d4cd6979bd466c28aefc8178bdf33f71730c Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 19 Nov 2025 16:31:20 -0800 Subject: [PATCH 103/127] web_framework: Allow FreedomBox apps to override templates Tests: - Functional tests of many apps pass with this change. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/web_framework.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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'} From bced133d909c8e981fba6424a53fca39b41305a2 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 19 Nov 2025 16:32:16 -0800 Subject: [PATCH 104/127] templates: Allow building pages without navigation bar and footer Tests: - Functional tests of many apps pass with the patch. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/templates/base.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plinth/templates/base.html b/plinth/templates/base.html index 7e07b2a41..daa2556c5 100644 --- a/plinth/templates/base.html +++ b/plinth/templates/base.html @@ -84,6 +84,7 @@ {% if refresh_page_sec is not None %} data-refresh-page-sec="{{ refresh_page_sec }}" {% endif %}> +{% block wrapper %}
@@ -283,5 +284,6 @@
+{% endblock %} From f0b1aa34ac2d575fa7006338d38eda0dceadf3ce Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Fri, 21 Nov 2025 21:40:45 -0800 Subject: [PATCH 105/127] apache: Preserve host header when proxying to service - This allows us to perform some checks before redirecting for OpenID Connect. Tests: - Functional tests of many apps pass with the patch. - OIDC related changes introduced later work due to this change. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- data/etc/apache2/conf-available/freedombox.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data/etc/apache2/conf-available/freedombox.conf b/data/etc/apache2/conf-available/freedombox.conf index 14d2b85fb..645d11173 100644 --- a/data/etc/apache2/conf-available/freedombox.conf +++ b/data/etc/apache2/conf-available/freedombox.conf @@ -57,6 +57,7 @@ ## 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 @@ -71,6 +72,7 @@ ProxyPass http://127.0.0.1:8000/freedombox + ProxyPreserveHost On RequestHeader set X-Forwarded-Proto 'https' env=HTTPS RequestHeader unset X-Forwarded-For From 45076cc603fbd9f1844f795c7858c35d42fbcea8 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 29 Sep 2025 10:56:58 -0700 Subject: [PATCH 106/127] oidc: New app to implement OpenID Connect Provider - Add a component to easily manage registration of client applications. Tests: - Package build is successful has dependency on python3-django-auto-toolkit - python3-django-oauth-toolkit can be installed on stable, testing and unstable containers - /.well-known/openid-configuration and /.well-known/jwks.json are servered properly. - /o/ URLs don't require login to access - When logging in list of claims includes 'sub', email, freedombox_groups. - Logging in using IP address works. Also works with a port. - Logging in using 127.0.0.1 address works. Also works with a port. - Logging in using localhost works. Also works with a port. - Logging in with IPv6 address works. Also works with a port. - Logging in with IPv6 [::1] address works. Also works with a port. - Logging in with IPv6 link-local address with zone ID is not possible (as browsers don't support them). - When authorization page is enabled, scopes show description as expected. - When domain name is added/removed, all OIDC components are updated with expected domains Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../apache2/conf-available/freedombox.conf | 12 ++ debian/control | 2 + plinth/middleware.py | 20 ++- plinth/modules/names/__init__.py | 17 ++ plinth/modules/oidc/__init__.py | 79 ++++++++ plinth/modules/oidc/components.py | 169 ++++++++++++++++++ .../usr/share/freedombox/modules-enabled/oidc | 1 + plinth/modules/oidc/tests/__init__.py | 0 plinth/modules/oidc/tests/test_components.py | 104 +++++++++++ plinth/modules/oidc/urls.py | 31 ++++ plinth/modules/oidc/validators.py | 124 +++++++++++++ plinth/settings.py | 19 +- plinth/tests/data/django_test_settings.py | 3 + plinth/tests/test_middleware.py | 10 ++ plinth/urls.py | 9 +- pyproject.toml | 1 + 16 files changed, 593 insertions(+), 8 deletions(-) create mode 100644 plinth/modules/oidc/__init__.py create mode 100644 plinth/modules/oidc/components.py create mode 100644 plinth/modules/oidc/data/usr/share/freedombox/modules-enabled/oidc create mode 100644 plinth/modules/oidc/tests/__init__.py create mode 100644 plinth/modules/oidc/tests/test_components.py create mode 100644 plinth/modules/oidc/urls.py create mode 100644 plinth/modules/oidc/validators.py diff --git a/data/etc/apache2/conf-available/freedombox.conf b/data/etc/apache2/conf-available/freedombox.conf index 645d11173..292189481 100644 --- a/data/etc/apache2/conf-available/freedombox.conf +++ b/data/etc/apache2/conf-available/freedombox.conf @@ -76,6 +76,18 @@ 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 + ## ## Serve FreedomBox icon as /favicon.ico for apps that don't present their own diff --git a/debian/control b/debian/control index 5a45dd0b9..854dbeba5 100644 --- a/debian/control +++ b/debian/control @@ -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, @@ -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/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/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/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/tests/__init__.py b/plinth/modules/oidc/tests/__init__.py new file mode 100644 index 000000000..e69de29bb 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/settings.py b/plinth/settings.py index 436e5f277..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 = ['*'] @@ -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', @@ -192,7 +209,7 @@ SESSION_FILE_PATH = '/var/lib/plinth/sessions' # Overridden based on configuration key server_dir STATIC_URL = '/freedombox/static/' -# STRONGHOLD_PUBLIC_URLS=(r'^captcha/', ) +STRONGHOLD_PUBLIC_URLS = (r'^/o/', ) STRONGHOLD_PUBLIC_NAMED_URLS = ( 'captcha-image', 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/test_middleware.py b/plinth/tests/test_middleware.py index 47d46ab24..7895ba51a 100644 --- a/plinth/tests/test_middleware.py +++ b/plinth/tests/test_middleware.py @@ -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/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/pyproject.toml b/pyproject.toml index e04778dbf..436ab5e1c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -170,6 +170,7 @@ module = [ "django.*", "gi.*", "numpy.*", + "oauth2_provider.*", "pam.*", "pexpect.*", "pgi.*", From cdfbff0b6b5a8c5645ec4d08f019bb3b35112e1b Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 19 Nov 2025 16:29:50 -0800 Subject: [PATCH 107/127] oidc: Style the page for authorizing an OIDC app Tests: - Appearance is acceptable: top margin, width of the readable text, heading centering, list top/bottom margins, SVG icon for application, md mode icon size, submit button width, margins. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- debian/copyright | 1 + .../templates/oauth2_provider/authorize.html | 69 +++ static/themes/default/css/main.css | 39 ++ static/themes/default/img/application.svg | 515 ++++++++++++++++++ 4 files changed, 624 insertions(+) create mode 100644 plinth/modules/oidc/templates/oauth2_provider/authorize.html create mode 100644 static/themes/default/img/application.svg diff --git a/debian/copyright b/debian/copyright index d3fb07094..52aac5e7c 100644 --- a/debian/copyright +++ b/debian/copyright @@ -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 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/static/themes/default/css/main.css b/static/themes/default/css/main.css index d6d7ec504..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 { @@ -1028,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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 64f1a1c9185d2b2451bdfca184e8003a856bb0de Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 20 Nov 2025 08:51:51 -0800 Subject: [PATCH 108/127] apache: Implement protecting apps using OpenID Connect - Use the excellent Apache module auth_openidc. - Implement macros that can be easily used to configure OpenID Connect. Tests: - Accessing /freedombox/apache/discover-idp/ shows - 'method' other than 'get' throw a 'bad request' error - oidc_callback should match host. Otherwise 'bad request' error is raised. - Mismatched host header is not allowed - Invalid domain setup is not allowed - target_link_uri is returned as is - method is returned as is and only 'get' is allowed. - x_csrf is returned as is - oidc_scopes is returned as 'email freedombox_groups' - HTTP request is answered and not redirected to https - When logging in with OIDC, authorization is skipped. When authorization is shown, it is shown as 'Web app protected by FreedomBox'. - libapache2-mod-auth-openidc is added a dependency for freedombox package. It is installable in stable, testing, and unstable distributions. - On applying patches, Apache setup configuration is run and OpenIDC component is created. - When patches are applied and setup install is run, auth_openidc module, 10-freedombox, freedombox-openidc config is enabled in Apache. - When setup is rerun, passphrase is not changed - metadata directory and parent are created when apache setup is run. Mode is 0o700 and ownership is www-data. - freedombox-openidc is created when apache setup is run and has 0o700 permissions. - Metadata directory will contain the client id and client passphrase when discovery happens for a particular domain. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../conf-available/freedombox-tls.conf | 1 + plinth/modules/apache/__init__.py | 115 ++++++++++++++- .../apache2/conf-available/10-freedombox.conf | 28 ++++ plinth/modules/apache/privileged.py | 134 +++++++++++++++++- plinth/modules/apache/urls.py | 14 +- plinth/modules/apache/views.py | 71 ++++++++++ plinth/tests/functional/__init__.py | 4 +- 7 files changed, 355 insertions(+), 12 deletions(-) create mode 100644 plinth/modules/apache/data/usr/share/freedombox/etc/apache2/conf-available/10-freedombox.conf create mode 100644 plinth/modules/apache/views.py 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/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/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/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/tests/functional/__init__.py b/plinth/tests/functional/__init__.py index 78d3f348a..a3f21564e 100644 --- a/plinth/tests/functional/__init__.py +++ b/plinth/tests/functional/__init__.py @@ -239,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 From 483f28de831052a067d4d7fa58862af8112e65a3 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 20 Nov 2025 08:56:38 -0800 Subject: [PATCH 109/127] featherwiki: Use OpenID Connect instead of pubtkt based SSO Tests: - Functional tests work. - Admin user is able to access the application - User belonging to special group is able to access the application - Regular user is not able to access the application - Anonymous user is not able to access the application Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../etc/apache2/conf-available/featherwiki-freedombox.conf | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 From cad6bc8ca08b130feab154ab497c2b5b6ff22f94 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 23 Nov 2025 22:39:17 -0800 Subject: [PATCH 110/127] syncthing: Use OpenID Connect instead of pubtkt based SSO Tests: - Functional tests work. - Admin user is able to access the application - User belonging to special group is able to access the application - Regular user is not able to access the application - Anonymous user is not able to access the application Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../etc/apache2/conf-available/syncthing-plinth.conf | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 From ce62fdb142a083aef41ae5bb4dbe28b39888c007 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 23 Nov 2025 22:40:58 -0800 Subject: [PATCH 111/127] searx: Use OpenID Connect instead of pubtkt based SSO Tests: - Application is not installable in stable and testing. It is not functional in unstable. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../etc/apache2/conf-available/searx-freedombox-auth.conf | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) 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 From e2da29cf25bc02e4c056358f4a0d70a6e94154f4 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 23 Nov 2025 22:42:50 -0800 Subject: [PATCH 112/127] rssbridge: Use OpenID Connect instead of pubtkt based SSO Tests: - Functional tests work. - Admin user is able to access the application - User belonging to special group is able to access the application - Regular user is not able to access the application - Anonymous user is not able to access the application Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../freedombox/etc/apache2/conf-available/rss-bridge.conf | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 From 3c1d801e1559930ecdc8efa3996c108171f0bbf9 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 23 Nov 2025 22:43:46 -0800 Subject: [PATCH 113/127] email: Use OpenID Connect instead of pubtkt based SSO Tests: - Functional tests work. - Admin user is able to access the application - Regular user is not able to access the application - Anonymous user is not able to access the application Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../etc/apache2/conf-available/email-freedombox.conf | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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 59421bc7e..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: From 4ab2007c9946c3bcaa891d3fcf62cc29efc27887 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 24 Nov 2025 08:56:27 -0800 Subject: [PATCH 114/127] calibre: Use OpenID Connect instead of pubtkt based SSO Tests: - Functional tests work. - Admin user is able to access the application - User belonging to special group is able to access the application - Regular user is not able to access the application - Anonymous user is not able to access the application Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../apache2/conf-available/calibre-freedombox.conf | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plinth/modules/calibre/data/usr/share/freedombox/etc/apache2/conf-available/calibre-freedombox.conf b/plinth/modules/calibre/data/usr/share/freedombox/etc/apache2/conf-available/calibre-freedombox.conf index e423f2134..8187c95ed 100644 --- a/plinth/modules/calibre/data/usr/share/freedombox/etc/apache2/conf-available/calibre-freedombox.conf +++ b/plinth/modules/calibre/data/usr/share/freedombox/etc/apache2/conf-available/calibre-freedombox.conf @@ -3,8 +3,13 @@ ## 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" From af892adb5ef90031e34fb62faef128dc4d380628 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 24 Nov 2025 08:56:57 -0800 Subject: [PATCH 115/127] deluge: Use OpenID Connect instead of pubtkt based SSO Tests: - Functional tests work. - Admin user is able to access the application - User belonging to special group is able to access the application - Regular user is not able to access the application - Anonymous user is not able to access the application Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../etc/apache2/conf-available/deluge-plinth.conf | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plinth/modules/deluge/data/usr/share/freedombox/etc/apache2/conf-available/deluge-plinth.conf b/plinth/modules/deluge/data/usr/share/freedombox/etc/apache2/conf-available/deluge-plinth.conf index f89dd42a2..efd742b0b 100644 --- a/plinth/modules/deluge/data/usr/share/freedombox/etc/apache2/conf-available/deluge-plinth.conf +++ b/plinth/modules/deluge/data/usr/share/freedombox/etc/apache2/conf-available/deluge-plinth.conf @@ -8,10 +8,8 @@ ## 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 From 64272a2befa418592b2b8b4329ce6cd9fdfb96fa Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 24 Nov 2025 08:57:24 -0800 Subject: [PATCH 116/127] gitweb: Use OpenID Connect instead of pubtkt based SSO - Regression: Users who to don't have git-access permission can't access the public repositories. Tests: - Functional tests work. - Admin user is able to view and access the repos when there are some public repos and when there no public repos. - User belonging to git-access are regular usrs are unable to access private repos. But they are also not able to access the public repos. They have to logout to be able to do that. - Anonymous user is not able to access the application if all repos are private. If there is at least one public repo, the repo listing can be accessed and public repos can be seen and accessed. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../apache2/conf-available/gitweb-freedombox-auth.conf | 6 ++---- .../etc/apache2/conf-available/gitweb-freedombox.conf | 9 ++++----- .../data/usr/share/freedombox/etc/gitweb-freedombox.conf | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) 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 { From efe2bccb1171ca4fd5efee2892e29d50c5046bc5 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 24 Nov 2025 08:57:51 -0800 Subject: [PATCH 117/127] tiddlywiki: Use OpenID Connect instead of pubtkt based SSO Tests: - Functional tests work. - Admin user is able to access the application - User belonging to special group is able to access the application - Regular user is not able to access the application - Anonymous user is not able to access the application Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../etc/apache2/conf-available/tiddlywiki-freedombox.conf | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 From 29ef56b51ef652e9babcc791b047b5689ebf133a Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 24 Nov 2025 08:58:15 -0800 Subject: [PATCH 118/127] wordpress: Use OpenID Connect instead of pubtkt based SSO when private Tests: - Functional tests work. - Admin user is able to access the application - User belonging to special group is able to access the application - Regular user is not able to access the application - Anonymous user is not able to access the application Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../apache2/conf-available/wordpress-freedombox.conf | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) 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 From 68126c3ec666a904551923e37fc5f5e5e3352b5c Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 24 Nov 2025 08:58:41 -0800 Subject: [PATCH 119/127] transmission: Use OpenID Connect instead of pubtkt based SSO Tests: - Functional tests work. - Admin user is able to access the application - User belonging to special group is able to access the application - Regular user is not able to access the application - Anonymous user is not able to access the application Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../etc/apache2/conf-available/transmission-plinth.conf | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 From 31e7997d2b8469c5a6938cdc9aa78e666ef896b9 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 24 Nov 2025 08:59:05 -0800 Subject: [PATCH 120/127] doc/dev: Use OpenID Connect instead of pubtkt based SSO Tests: - The built documentation has been updated as expected. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- doc/dev/tutorial/components.rst | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 From 6fd85e3e4681940d2d15ee98c5b1921fe702715b Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 24 Nov 2025 09:00:24 -0800 Subject: [PATCH 121/127] sharing: Use OpenID Connect instead of pubtkt based SSO - Migrate old configuration file to new format. Tests: - Admin user is able to access a share. - User belonging to a group allowed to access the share is able to access the application. - Regular user is not able to access the application. - Anonymous user is not able to access the application. - Setup is run after applying patches. - Old shares are migrated from old style auth from authpubtkt to oidc. Name, path, is_public, groups are presevered Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/sharing/__init__.py | 2 +- plinth/modules/sharing/privileged.py | 76 ++++++++++++++++++++-------- 2 files changed, 56 insertions(+), 22 deletions(-) diff --git a/plinth/modules/sharing/__init__.py b/plinth/modules/sharing/__init__.py index 3836c6073..5161f84b1 100644 --- a/plinth/modules/sharing/__init__.py +++ b/plinth/modules/sharing/__init__.py @@ -25,7 +25,7 @@ class SharingApp(app_module.App): app_id = 'sharing' - _version = 3 + _version = 4 def __init__(self) -> 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"]' From a7584b465dadd1909abc0ac1039927b1ddf44d6c Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 24 Nov 2025 20:44:06 -0800 Subject: [PATCH 122/127] sso: Merge into users module, drop pubtkt related code Tests: - 'make install' removes enabled sso module - Already logged in users stay logged in after update - Apps need to re-authenticate of update (but this is transparent) - Login and logout work as expected - Failed login attempts lead to CAPTCHA form - CAPTCHA form can't be skipped - Answering CAPTCHA form will lead back to login page - Users functional tests work Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- Makefile | 3 +- plinth/modules/sso/__init__.py | 43 -------- .../includes/freedombox-single-sign-on.conf | 21 ---- .../usr/share/freedombox/modules-enabled/sso | 1 - plinth/modules/sso/forms.py | 28 ----- plinth/modules/sso/privileged.py | 104 ------------------ plinth/modules/sso/tests/__init__.py | 0 plinth/modules/sso/tests/test_functional.py | 30 ----- plinth/modules/sso/tests/test_privileged.py | 55 --------- plinth/modules/sso/urls.py | 22 ---- plinth/modules/sso/views.py | 97 ---------------- plinth/modules/users/__init__.py | 10 +- .../includes/freedombox-single-sign-on.conf | 1 + plinth/modules/users/forms.py | 21 ++++ .../templates/users_captcha.html} | 0 .../templates/users_login.html} | 0 plinth/modules/users/tests/test_functional.py | 21 ++++ plinth/modules/users/urls.py | 9 +- plinth/modules/users/views.py | 72 +++++++++++- 19 files changed, 124 insertions(+), 414 deletions(-) delete mode 100644 plinth/modules/sso/__init__.py delete mode 100644 plinth/modules/sso/data/usr/share/freedombox/etc/apache2/includes/freedombox-single-sign-on.conf delete mode 100644 plinth/modules/sso/data/usr/share/freedombox/modules-enabled/sso delete mode 100644 plinth/modules/sso/forms.py delete mode 100644 plinth/modules/sso/privileged.py delete mode 100644 plinth/modules/sso/tests/__init__.py delete mode 100644 plinth/modules/sso/tests/test_functional.py delete mode 100644 plinth/modules/sso/tests/test_privileged.py delete mode 100644 plinth/modules/sso/urls.py delete mode 100644 plinth/modules/sso/views.py create mode 100644 plinth/modules/users/data/usr/share/freedombox/etc/apache2/includes/freedombox-single-sign-on.conf rename plinth/modules/{sso/templates/captcha.html => users/templates/users_captcha.html} (100%) rename plinth/modules/{sso/templates/login.html => users/templates/users_login.html} (100%) diff --git a/Makefile b/Makefile index e5e5673b7..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)) 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 6ced5ea9f..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 /freedombox/accounts/sso/login/ - TKTAuthBackArgName next - TKTAuthDigest SHA512 - TKTAuthRefreshURL /freedombox/accounts/sso/refresh/ - TKTAuthUnauthURL /freedombox - 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/__init__.py b/plinth/modules/sso/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 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/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 b18f537c9..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') 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: From e2047ec3a033962094d20da7b0b96743684e1ae9 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 2 Mar 2026 15:22:28 -0800 Subject: [PATCH 123/127] apache: Fix diagnosing URLs protected by OpenID Connect Tests: - Clear out the directory /var/cache/apache2/mod_auth_openidc/metadata/. Then run diagnostics on Calibre app without the patch. Several URLs fail because 404 has been returned on /calibre URL. With the patch the diagnostics succeed. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/apache/components.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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 From 5ccb332ce6327541afe6983bc7feb7c72d16abfa Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 2 Mar 2026 21:01:26 -0500 Subject: [PATCH 124/127] locale: Update translation strings Signed-off-by: James Valleroy --- plinth/locale/ar/LC_MESSAGES/django.po | 652 +++++++++------- plinth/locale/ar_SA/LC_MESSAGES/django.po | 654 +++++++++------- plinth/locale/be/LC_MESSAGES/django.po | 650 +++++++++------- plinth/locale/bg/LC_MESSAGES/django.po | 709 ++++++++++------- plinth/locale/bn/LC_MESSAGES/django.po | 654 +++++++++------- plinth/locale/ca/LC_MESSAGES/django.po | 720 +++++++++++------- plinth/locale/cs/LC_MESSAGES/django.po | 731 +++++++++++------- plinth/locale/da/LC_MESSAGES/django.po | 608 +++++++++------ plinth/locale/de/LC_MESSAGES/django.po | 662 ++++++++++------ plinth/locale/django.pot | 650 +++++++++------- plinth/locale/el/LC_MESSAGES/django.po | 637 ++++++++++------ plinth/locale/es/LC_MESSAGES/django.po | 644 ++++++++++------ plinth/locale/et/LC_MESSAGES/django.po | 661 +++++++++------- plinth/locale/fa/LC_MESSAGES/django.po | 590 +++++++++------ plinth/locale/fake/LC_MESSAGES/django.po | 586 +++++++++------ plinth/locale/fr/LC_MESSAGES/django.po | 737 +++++++++++------- plinth/locale/gl/LC_MESSAGES/django.po | 652 +++++++++------- plinth/locale/gu/LC_MESSAGES/django.po | 581 ++++++++------ plinth/locale/hi/LC_MESSAGES/django.po | 712 +++++++++++------- plinth/locale/hu/LC_MESSAGES/django.po | 643 ++++++++++------ plinth/locale/id/LC_MESSAGES/django.po | 604 +++++++++------ plinth/locale/it/LC_MESSAGES/django.po | 735 +++++++++++------- plinth/locale/ja/LC_MESSAGES/django.po | 650 +++++++++------- plinth/locale/kn/LC_MESSAGES/django.po | 650 +++++++++------- plinth/locale/lt/LC_MESSAGES/django.po | 650 +++++++++------- plinth/locale/lv/LC_MESSAGES/django.po | 650 +++++++++------- plinth/locale/nb/LC_MESSAGES/django.po | 640 ++++++++++------ plinth/locale/nl/LC_MESSAGES/django.po | 646 ++++++++++------ plinth/locale/pl/LC_MESSAGES/django.po | 610 +++++++++------ plinth/locale/pt/LC_MESSAGES/django.po | 738 +++++++++++------- plinth/locale/ru/LC_MESSAGES/django.po | 742 +++++++++++------- plinth/locale/si/LC_MESSAGES/django.po | 650 +++++++++------- plinth/locale/sl/LC_MESSAGES/django.po | 579 ++++++++------ plinth/locale/sq/LC_MESSAGES/django.po | 732 +++++++++++------- plinth/locale/sr/LC_MESSAGES/django.po | 577 ++++++++------ plinth/locale/sv/LC_MESSAGES/django.po | 700 ++++++++++------- plinth/locale/ta/LC_MESSAGES/django.po | 793 ++++++++++++-------- plinth/locale/te/LC_MESSAGES/django.po | 734 +++++++++++------- plinth/locale/tr/LC_MESSAGES/django.po | 735 +++++++++++------- plinth/locale/uk/LC_MESSAGES/django.po | 733 +++++++++++------- plinth/locale/vi/LC_MESSAGES/django.po | 590 +++++++++------ plinth/locale/zh_Hans/LC_MESSAGES/django.po | 694 ++++++++++------- plinth/locale/zh_Hant/LC_MESSAGES/django.po | 588 +++++++++------ 43 files changed, 17553 insertions(+), 11000 deletions(-) diff --git a/plinth/locale/ar/LC_MESSAGES/django.po b/plinth/locale/ar/LC_MESSAGES/django.po index 0a733e7d6..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8821,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8873,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 "" @@ -8908,6 +9002,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8956,19 +9054,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9128,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 "" @@ -9290,35 +9404,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9411,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 "" @@ -9570,7 +9688,7 @@ msgstr "" 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 5b2d04819..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8827,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8877,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 "" @@ -8912,6 +9008,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8960,19 +9060,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9132,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 "" @@ -9294,35 +9410,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9415,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 "" @@ -9574,7 +9694,7 @@ msgstr "" 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 d07f44d28..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: 2026-02-03 01:14+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:124 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "" -#: plinth/menu.py:117 plinth/templates/base.html:133 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:142 +#: 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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8772,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8826,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 "" @@ -8861,6 +8953,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8909,19 +9005,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9081,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 "" @@ -9231,35 +9343,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9352,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 "" @@ -9509,6 +9625,6 @@ msgstr "" 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 244311ab8..d02263a33 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+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" @@ -106,15 +106,15 @@ msgstr "Език на интерфейса" msgid "Use the language preference set in the browser" msgstr "Използване на предпочитания от четеца език" -#: plinth/menu.py:116 plinth/templates/base.html:124 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Начало" -#: plinth/menu.py:117 plinth/templates/base.html:133 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "Приложения" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:142 +#: 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 @@ -3149,8 +3209,8 @@ msgstr "Обратна връзка" msgid "Contribute" msgstr "Допринасяне" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:222 -#: plinth/templates/base.html:225 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:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "" @@ -3762,9 +3822,9 @@ msgid "" "target=\"_blank\" rel=\"noopener noreferrer\">create your own." msgstr "" "Можете да изтеглите пакети със съдържание от проекта Kiwix " -"или да създадете свои собствени." +"rel=\"noopener\">да изтеглите пакети със съдържание от проекта 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Рестартиране" @@ -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:101 +#: 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,77 +9353,97 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, fuzzy, python-format -#| msgid "Page not found - %(box_name)s" -msgid "Endpoints for this %(box_name)s:" -msgstr "Страницата не е намерена - %(box_name)s" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -9380,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 "" @@ -9415,6 +9540,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9463,21 +9592,21 @@ msgstr "Настройките на сървъра са променени." msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "Паролата е променена." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9639,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 "Инсталиране на приложение" @@ -9794,35 +9939,35 @@ msgstr "" "данни. Това е безплатен софтуер, който ви позволява да инсталирате и " "управлявате сървърни приложения с лекота." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Начало" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Приложения" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Системни" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Промяна на парола" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Изключване" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Изход" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Избор на език" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Вход" @@ -9915,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 "" @@ -10078,10 +10227,20 @@ msgstr "Настройките не са променени" 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 d86d03c19..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8853,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8903,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 "" @@ -8938,6 +9034,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8986,19 +9086,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9158,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 "" @@ -9309,35 +9425,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9430,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 "" @@ -9589,7 +9709,7 @@ msgstr "" 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 9ea38650e..dc3010da9 100644 --- a/plinth/locale/ca/LC_MESSAGES/django.po +++ b/plinth/locale/ca/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+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 " #: 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" @@ -552,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" @@ -598,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 @@ -623,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.
" @@ -635,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ó" @@ -769,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" @@ -954,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" @@ -1043,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" @@ -1122,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" @@ -1425,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 " @@ -1909,10 +1965,11 @@ msgid "" "use a subdomain, add it as a static domain in the Names app." msgstr "" "Si busques un compte de DNS dinàmic gratuït, pots trobar un servei gratuït " -"de GnuDIP a " -"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." +"de GnuDIP a 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 msgid "" @@ -2037,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" @@ -2328,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" @@ -2396,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." @@ -3316,8 +3377,8 @@ msgstr "Enviar comentaris" msgid "Contribute" msgstr "Contribueix" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:222 -#: plinth/templates/base.html:225 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" @@ -3979,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:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Informació de la llicència de JavaScript" @@ -4424,9 +4485,9 @@ msgid "" "requires uninstalling and reinstalling the app which will wipe app's data." msgstr "" "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ó." +"em>. 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 "" @@ -5229,9 +5290,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:172 plinth/templates/base.html:173 +#: 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" @@ -5661,8 +5722,8 @@ msgstr "" "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ó.

" +"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 @@ -5708,8 +5769,8 @@ 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.

" +"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" @@ -5814,6 +5875,7 @@ msgstr "Elimina la connexió" #: 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 "Connexió" @@ -6029,6 +6091,7 @@ msgid "Edit Connection" 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 "Error:" @@ -6154,9 +6217,9 @@ 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." +"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 @@ -6208,8 +6271,8 @@ msgid "" "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." +"VLAN, són proporcionades per l’aplicació Cockpit." #: plinth/modules/networks/templates/router_configuration_content.html:10 #, python-format @@ -6236,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 @@ -6609,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 "" @@ -6897,8 +6991,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:187 -#: plinth/templates/base.html:188 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "" @@ -7555,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 "" @@ -7808,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 @@ -8122,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 "" @@ -8907,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 "" @@ -9136,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 " @@ -9173,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 "" @@ -9272,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" @@ -9285,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 "" @@ -9327,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 "" @@ -9336,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" @@ -9372,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 "" @@ -9422,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:101 +#: 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, " @@ -9478,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 "" @@ -9505,76 +9602,92 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -9632,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 "" @@ -9667,6 +9784,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9715,19 +9836,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9887,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 "" @@ -10037,35 +10174,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -10158,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 "" @@ -10317,10 +10458,17 @@ msgstr "" 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 24cc1bc8f..2148046dd 100644 --- a/plinth/locale/cs/LC_MESSAGES/django.po +++ b/plinth/locale/cs/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+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 " #: 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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +10029,97 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Zatím není nakonfigurováno." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "Endpointy pro tento %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "Spustit WireGuard Server" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: 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:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Přidat nový server" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: 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" @@ -10034,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:" @@ -10072,6 +10221,10 @@ msgstr "Veřejný klíč tohoto stroje:" msgid "IP address of this machine:" msgstr "IP adresa tohoto počítače:" +#: 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." @@ -10120,19 +10273,19 @@ msgstr "Aktualizovaný server." msgid "Modify Connection to Server" msgstr "Změnit připojení k serveru" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Odstranit připojení k serveru" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Server smazán." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "Server WireGuard se úspěšně spustil." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "Spuštění serveru WireGuard selhalo: {}" @@ -10327,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í" @@ -10493,35 +10664,35 @@ msgstr "" "Jedná se o bezplatný software, který umožňuje snadnou instalaci a správu " "serverových aplikací." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Domů" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplikace" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Systém" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Změnit heslo" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Vypnout" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Odhlásit" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Vyberte jazyk" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Přihlásit" @@ -10620,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" @@ -10792,10 +10967,25 @@ msgstr "Nastavení se nezměnila" 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" @@ -12193,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 edcedfb39..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,82 +10183,102 @@ 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:102 +#: 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:" +#: plinth/modules/wireguard/templates/wireguard.html:87 +msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 +msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" +#: 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:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: 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:81 -msgid "Add a new peer" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:85 -#: plinth/modules/wireguard/views.py:59 -msgid "Add Allowed Client" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" @@ -10230,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 "" @@ -10267,6 +10389,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -10337,25 +10463,25 @@ msgstr "Opdater indstillinger" msgid "Modify Connection to Server" msgstr "Rediger Forbindelse" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "Slet Forbindelse" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "{name} deleted." msgid "Server deleted." msgstr "{name} slettet." -#: plinth/modules/wireguard/views.py:286 +#: 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:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10523,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" @@ -10719,39 +10861,39 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Apps" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " System" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Ændr kodeord" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: 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:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Log ud" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "Sprog" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Log ind" @@ -10853,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 "" @@ -11030,10 +11176,17 @@ msgstr "Indstilling uændret" 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" @@ -12662,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 abb30edd2..e090b17f0 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+0000\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 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 " @@ -2054,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" @@ -2348,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" @@ -2413,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." @@ -2659,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 @@ -3277,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" @@ -3343,8 +3406,8 @@ msgstr "Feedback geben" msgid "Contribute" msgstr "Mitwirken" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:222 -#: plinth/templates/base.html:225 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" @@ -4012,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:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "JavaScript-Lizenzinformation" @@ -5244,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:172 plinth/templates/base.html:173 +#: 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" @@ -5823,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" @@ -6035,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:" @@ -6245,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, " @@ -6663,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 "" @@ -6998,8 +7103,8 @@ msgstr "Neustart" msgid "Shutdown" msgstr "Herunterfahren" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:187 -#: plinth/templates/base.html:188 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Neu starten" @@ -7808,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" @@ -8102,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 @@ -8463,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 "" @@ -9407,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 "" @@ -9692,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 " @@ -9737,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." @@ -9760,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 " @@ -9790,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." @@ -9803,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" @@ -9849,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" @@ -9862,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" @@ -9913,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" @@ -9922,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" @@ -9964,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." @@ -10021,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:101 +#: 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= ." @@ -10036,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 ." @@ -10048,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= ." @@ -10060,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, " @@ -10091,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: " @@ -10105,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 " @@ -10125,78 +10246,99 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Noch nicht konfiguriert." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "Endpunkte für diese %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "WireGuard-Server starten" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Hinzufügen eines neuen Peers" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Neuen Server hinzufügen" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Verbindung zum Server hinzufügen" @@ -10256,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:" @@ -10295,6 +10441,10 @@ msgstr "Öffentlicher Schlüssel dieses Computers:" msgid "IP address of this machine:" msgstr "IP-Adresse dieses Rechners:" +#: 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." @@ -10343,19 +10493,19 @@ msgstr "Aktualisierter Server." msgid "Modify Connection to Server" msgstr "Ändern der Verbindung zum Server" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Verbindung zum Server löschen" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Server gelöscht." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "Der WireGuard-Server wurde erfolgreich gestartet." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "Starten des WireGuard-Servers fehlgeschlagen: {}" @@ -10557,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" @@ -10728,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:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Startseite" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Apps" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " System" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Passwort ändern" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Herunterfahren" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Abmelden" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Sprache wählen" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Anmelden" @@ -10855,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" @@ -11028,10 +11200,27 @@ msgstr "Einstellung unverändert" 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" @@ -13302,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 4d9e480f1..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: 2026-02-03 01:14+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:124 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "" -#: plinth/menu.py:117 plinth/templates/base.html:133 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:142 +#: 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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8773,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8827,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 "" @@ -8862,6 +8954,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8910,19 +9006,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9082,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 "" @@ -9232,35 +9344,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9353,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 "" @@ -9510,6 +9626,6 @@ msgstr "" 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 bb92e0ac9..2cab3e97a 100644 --- a/plinth/locale/el/LC_MESSAGES/django.po +++ b/plinth/locale/el/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+0000\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 χρήστης@υπολογιστής:~/μονοπάτι/για/το/αποθετήριο/" #: 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 "Επαναφορά" @@ -563,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 "Δημιουργία νέου αντιγράφου ασφαλείας" @@ -609,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 @@ -634,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.
username@%(domain_name)s. You can setup your domain on the " "system Name Services page." msgstr "" -"To όνομα διαδικτύου για το διακομιστή XMPP έχει ρυθμιστεί ως το %" -"(domain_name)s. Ταυτότητες χρηστών θα είναι όπως: username@%" -"(domain_name)s. Μπορείτε να ρυθμίσετε το όνομα της υπηρεσίας στο Ρυθμίστε page." +"To όνομα διαδικτύου για το διακομιστή XMPP έχει ρυθμιστεί ως το " +"%(domain_name)s. Ταυτότητες χρηστών θα είναι όπως: " +"username@%(domain_name)s. Μπορείτε να ρυθμίσετε το όνομα της " +"υπηρεσίας στο Ρυθμίστε page." #: plinth/modules/ejabberd/templates/ejabberd.html:30 #, fuzzy, python-format @@ -2532,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 @@ -3467,8 +3520,8 @@ msgstr "Υποβάλετε σχόλια" msgid "Contribute" msgstr "Συνεισφέρετε" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:222 -#: plinth/templates/base.html:225 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 "Σχετικά με" @@ -4115,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:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Πληροφορίες άδειας χρήσης JavaScript" @@ -5387,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:172 plinth/templates/base.html:173 +#: 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 "Επεξεργασία" @@ -5910,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 "Σύνδεση" @@ -6122,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 "" @@ -6312,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 @@ -6773,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 "" @@ -7125,8 +7214,8 @@ msgstr "" msgid "Shutdown" msgstr "ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣ" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:187 -#: plinth/templates/base.html:188 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Κάνετε επανεκκίνηση" @@ -7561,8 +7650,8 @@ msgid "" "When enabled, RSS-Bridge can be accessed by any " "user belonging to the feed-reader group." msgstr "" -"Όταν είναι ενεργοποιημένο, το Tiny RSS είναι προσβάσιμο από κάθε χρήστη με πιστοποιητικά." +"Όταν είναι ενεργοποιημένο, το Tiny RSS είναι προσβάσιμο από κάθε χρήστη με πιστοποιητικά." #: plinth/modules/rssbridge/__init__.py:28 #, python-brace-format @@ -7974,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 "Όχι" @@ -8300,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 διαμέρισμα. Τα στιγμιότυπα δεν αποτελούν αντικατάσταση για " @@ -8675,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 "" @@ -9580,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 "" @@ -9859,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 " @@ -9909,50 +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 +#: 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 " @@ -9963,54 +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 +#: 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 "Ο λογαριασμός χρήστη δημιουργήθηκε, τώρα είστε συνδεδεμένοι" @@ -10026,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" @@ -10039,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 "Δημιουργία χρήστη" @@ -10089,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 "Χρήστες" @@ -10098,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" @@ -10140,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 "Ο κωδικός πρόσβασης άλλαξε με επιτυχία." @@ -10193,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:101 +#: 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, " @@ -10253,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 "" @@ -10284,88 +10384,106 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -#, fuzzy -#| msgid "No shares currently configured." -msgid "Not configured yet." -msgstr "Δεν έχουν ρυθμιστεί μερίσματα." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 #, fuzzy #| msgid "Add new introducer" msgid "Add a new peer" msgstr "Προσθέστε νέο εισαγωγέα" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 #, fuzzy #| msgid "Add new introducer" msgid "Add a new server" msgstr "Προσθέστε νέο εισαγωγέα" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" @@ -10439,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 "" @@ -10476,6 +10598,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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" @@ -10546,25 +10672,25 @@ msgstr "Ενημέρωση ρυθμίσεων" msgid "Modify Connection to Server" msgstr "Επεξεργασία σύνδεσης" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "Διαγραφή σύνδεσης" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "Share deleted." msgid "Server deleted." msgstr "Το μέρισμα διαγράφηκε." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "Ο κωδικός πρόσβασης άλλαξε με επιτυχία." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10730,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" @@ -10890,8 +11032,9 @@ msgstr "" "Αυτό είναι ένα εσωτερικό σφάλμα και όχι κάτι που προκαλέσατε ή μπορείτε να " "διορθώσετε. Αναφέρετε το σφάλμα στο κατάλογος σφαλμάτων ώστε να " -"μπορούμε να το διορθώσουμε. Επίσης, Παρακαλούμε επισυνάψτε το αρχείο καταγραφής κατάστασης στην αναφορά σφάλματος." +"μπορούμε να το διορθώσουμε. Επίσης, Παρακαλούμε επισυνάψτε το αρχείο καταγραφής κατάστασης στην αναφορά " +"σφάλματος." #: plinth/templates/app-header.html:26 msgid "Installation" @@ -10939,35 +11082,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Κεντρική σελίδα" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Εφαρμογές" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Σύστημα" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Αλλαγή κωδικού πρόσβασης" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣ" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Αποσύνδεση" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Επιλογή γλώσσας" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Σύνδεση" @@ -11069,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 "" @@ -11261,10 +11408,25 @@ msgstr "Οι ρυθμίσεις δεν άλλαξαν" 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" @@ -12615,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 02049da0a..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,77 +10310,97 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Sin configurar todavía." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, fuzzy, python-format -#| msgid "Public key for this %(box_name)s:" -msgid "Endpoints for this %(box_name)s:" -msgstr "Clave pública para esta %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Añadir nuevo par" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Añadir nuevo servidor" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: 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" @@ -10320,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:" @@ -10358,6 +10504,10 @@ msgstr "Clave pública para este dispositivo:" msgid "IP address of this machine:" msgstr "Dirección IP para este dispositivo:" +#: 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." @@ -10406,21 +10556,21 @@ msgstr "Servidor actualizado." msgid "Modify Connection to Server" msgstr "Cambiar conexión al servidor" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Eliminar conexión al servidor" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Servidor eliminado." -#: plinth/modules/wireguard/views.py:286 +#: 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:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10618,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" @@ -10805,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:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Inicio" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplicaciones" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistema" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Cambiar clave de acceso" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Apagar" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Cerrar sesión" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Seleccionar idioma" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Iniciar sesión" @@ -10932,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 "" @@ -11112,10 +11284,27 @@ msgstr "Configuración sin cambio" 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" @@ -13350,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 114ac1b20..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: 2026-02-03 01:14+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 "" @@ -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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8829,95 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8881,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 "" @@ -8916,6 +9016,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8964,21 +9068,21 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: 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:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9138,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 "" @@ -9288,35 +9408,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9409,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 "" @@ -9569,6 +9693,9 @@ msgstr "" 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 4c9c23069..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,79 +9710,99 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" @@ -9762,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 "" @@ -9799,6 +9910,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9861,25 +9976,25 @@ msgstr "به‌روزرسانی وضعیت" msgid "Modify Connection to Server" msgstr "ویرایش اتصال" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "پاک‌کردن اتصال" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "{name} deleted." msgid "Server deleted." msgstr "{name} پاک شد." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 #, fuzzy #| msgid "Partition expanded successfully." msgid "WireGuard server started successfully." msgstr "پارتیشن با موفقیت بزرگ شد." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10046,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 "" @@ -10212,38 +10343,38 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 #, fuzzy msgid " Apps" msgstr "برنامه‌ها" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "زبان" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -10339,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 "" @@ -10508,7 +10643,7 @@ msgstr "" msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" @@ -11396,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 098eda69b..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,82 +10195,100 @@ 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:102 +#: 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:" +#: plinth/modules/wireguard/templates/wireguard.html:87 +msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 +msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" +#: 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:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: 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:81 -msgid "Add a new peer" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:85 -#: plinth/modules/wireguard/views.py:59 -msgid "Add Allowed Client" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" @@ -10253,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 "" @@ -10290,6 +10399,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -10360,25 +10473,25 @@ msgstr "UPDATE SETUP" msgid "Modify Connection to Server" msgstr "EDIT CONNECTION" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "DELETE CONNECTION" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "{name} deleted." msgid "Server deleted." msgstr "{name} DELETED." -#: plinth/modules/wireguard/views.py:286 +#: 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:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10551,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" @@ -10747,43 +10876,43 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 #, fuzzy #| msgid "Apps" msgid " Apps" msgstr "APPS" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 #, fuzzy #| msgid "System" msgid " System" msgstr "SYSTEM" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "CHANGE PASSWORD" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: 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:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "LOG OUT" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "LANGUAGE" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "LOG IN" @@ -10883,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 "" @@ -11066,7 +11199,7 @@ msgstr "SETTING UNCHANGED" msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" @@ -12477,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 c80162ab8..15bc36254 100644 --- a/plinth/locale/fr/LC_MESSAGES/django.po +++ b/plinth/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+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 " #: 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:222 -#: plinth/templates/base.html:225 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:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Information de licence JavaScript" @@ -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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Redémarrer" @@ -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 "" @@ -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:101 +#: 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,78 +10302,99 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Pas encore configuré." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "Points de terminaison de cette %(box_name)s :" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "Démarrer le serveur WireGuard" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Ajouter un nouveau pair" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Ajouter un nouveau serveur" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Ajouter une connexion à un serveur" @@ -10311,18 +10454,22 @@ msgstr "Points de terminaison du serveur :" 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 ») :" @@ -10349,6 +10496,10 @@ msgstr "Clé publique de cette machine :" msgid "IP address of this machine:" msgstr "Adresse IP de cette machine :" +#: 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é." @@ -10397,19 +10548,19 @@ msgstr "Serveur mis à jour." msgid "Modify Connection to Server" msgstr "Modifier la connexion à un serveur" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Supprimer la connexion à un serveur" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Serveur supprimé." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "Le serveur WireGuard a été démarré." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "Échec du démarrage du serveur WireGuard : {}" @@ -10611,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" @@ -10780,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:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Accueil" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Applis" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Système" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Changer le mot de passe" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Éteindre" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Se déconnecter" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Choisir la langue" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "S’identifier" @@ -10909,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" @@ -11084,10 +11257,27 @@ msgstr "Paramètre inchangé" 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" @@ -13339,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 4ab23d046..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8836,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8888,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 "" @@ -8923,6 +9017,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8971,19 +9069,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9144,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 "" @@ -9306,35 +9420,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9427,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 "" @@ -9588,7 +9706,7 @@ msgstr "" 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 53ebfe4d8..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +9303,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -9349,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 "" @@ -9386,6 +9492,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9442,21 +9552,21 @@ msgstr "સેટઅપ અપડેટ કરો" msgid "Modify Connection to Server" msgstr "એપ્લીકેશન પ્રસ્થાપિત કરતાં ભૂલ થઇ છે: {error}" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Direct connection to the Internet." msgid "Delete Connection to Server" msgstr "ઇન્ટરનેટ સાથે સીધો જોડાણ." -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9619,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" @@ -9787,39 +9913,39 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 #, fuzzy #| msgid "BitTorrent Web Client" msgid " Apps" msgstr "બીટ ટોરેન્ટ વેબ ક્લાયન્ટ" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "ભાષા" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9914,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 "" @@ -10084,7 +10214,7 @@ msgstr "સેટિંગ યથાવત" msgid "before uninstall of {app_id}" msgstr "" -#: plinth/web_framework.py:122 +#: plinth/web_framework.py:126 msgid "Gujarati" msgstr "" @@ -10454,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 ac899c70a..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,86 +10219,104 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -#, fuzzy -#| msgid "No shares currently configured." -msgid "Not configured yet." -msgstr "वर्तमान में कोई शेयर कॉन्फ़िगर नहीं किया गया है." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 #, fuzzy #| msgid "Add new introducer" msgid "Add a new peer" msgstr "नया इंट्रोड्यूसर जोड़ें" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 #, fuzzy #| msgid "Add new introducer" msgid "Add a new server" msgstr "नया इंट्रोड्यूसर जोड़ें" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" @@ -10268,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 "" @@ -10305,6 +10427,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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" @@ -10375,25 +10501,25 @@ msgstr "सेटअप अपडेट" msgid "Modify Connection to Server" msgstr "कनेक्शन संपादित करें" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "कनेक्शन हटाएँ" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "Share deleted." msgid "Server deleted." msgstr "शेयर हटाया गया." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "पासवर्ड सफलतापूर्वक बदल गया." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10561,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" @@ -10762,35 +10904,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " होम" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " ऐप्स" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " सिस्टम" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "पासवर्ड बदलें" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "शट डाउन" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "लॉग आउट" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "भाषा चुनें" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "लॉग इन" @@ -10886,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 "" @@ -11076,10 +11222,23 @@ msgstr "सेटिंग स्थिर है" 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 "मैइनटेस्ट" @@ -12223,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 8012d8ef4..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: 2026-02-03 01:14+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:124 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "Kezdőlap" -#: plinth/menu.py:117 plinth/templates/base.html:133 +#: 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:142 +#: 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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,77 +10417,97 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Még nincs konfigurálva." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, fuzzy, python-format -#| msgid "Public key for this %(box_name)s:" -msgid "Endpoints for this %(box_name)s:" -msgstr "A %(box_name)s nyilvános kulcsa:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: 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:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Új szerver hozzáadása" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: 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" @@ -10426,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:" @@ -10464,6 +10611,10 @@ msgstr "A gép nyilvános kulcsa:" msgid "IP address of this machine:" msgstr "A gép IP-címe:" +#: 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." @@ -10512,21 +10663,21 @@ msgstr "Szerver frissítve." msgid "Modify Connection to Server" msgstr "Szerverrel létesített kapcsolat módosítása" -#: plinth/modules/wireguard/views.py:254 +#: 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:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Szerver törölve." -#: plinth/modules/wireguard/views.py:286 +#: 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:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10727,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" @@ -10932,35 +11101,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Kezdőlap" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Alkalmazások" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Rendszer" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Jelszómódosítás" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Leállítás" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Kijelentkezés" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Válassz nyelvet" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Bejelentkezés" @@ -11062,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 "" @@ -11249,10 +11422,27 @@ msgstr "A beállítás változatlan" 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" @@ -12650,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 2cc5dbe61..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +9658,94 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Add Connection" @@ -9692,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 "" @@ -9727,6 +9848,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9779,23 +9904,23 @@ msgstr "Server yang diperbarui." msgid "Modify Connection to Server" msgstr "Sunting Koneksi" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "Hapus Koneksi" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "{name} deleted." msgid "Server deleted." msgstr "{name} dihapus." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9960,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" @@ -10156,35 +10299,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Beranda" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplikasi" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " sistem" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Ganti kata sandi" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Matikan" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Keluar" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Pilih bahasa" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Masuk" @@ -10281,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 "" @@ -10457,10 +10604,16 @@ msgstr "" 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" @@ -11387,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 8b9f60890..046263680 100644 --- a/plinth/locale/it/LC_MESSAGES/django.po +++ b/plinth/locale/it/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+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 " #: 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,7 +665,7 @@ 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.
" @@ -627,7 +677,7 @@ msgstr "" "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" @@ -758,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" @@ -941,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" @@ -1027,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" @@ -1106,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" @@ -1411,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 " @@ -2021,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" @@ -2310,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" @@ -2375,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." @@ -3297,8 +3361,8 @@ msgstr "Invia feedback" msgid "Contribute" msgstr "Collabora" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:222 -#: plinth/templates/base.html:225 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" @@ -3955,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:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Informazioni sulla licenza JavaScript" @@ -5180,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:172 plinth/templates/base.html:173 +#: 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" @@ -5758,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" @@ -5970,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:" @@ -6176,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 " @@ -6590,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 "" @@ -6919,8 +7025,8 @@ msgstr "Riavvia" msgid "Shutdown" msgstr "Spegni" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:187 -#: plinth/templates/base.html:188 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Riavvio" @@ -7723,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" @@ -8013,10 +8121,17 @@ 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 %(username)s" @@ -9741,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" @@ -9791,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" @@ -9800,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" @@ -9840,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." @@ -9896,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:101 +#: 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= ." @@ -9911,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 ." @@ -9923,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= ." @@ -9935,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, " @@ -9965,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: " @@ -9979,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 " @@ -9997,76 +10119,97 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Non ancora configurato." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "Punti di accesso per %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "Avvia WireGuard server" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Aggiungi un nuovo nodo" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Aggiungi un nuovo server" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Aggiungi Connessione a Server" @@ -10126,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:" @@ -10164,6 +10311,10 @@ msgstr "Chiave pubblica di questa macchina:" msgid "IP address of this machine:" msgstr "Indirizzo IP di questa macchina:" +#: 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." @@ -10212,19 +10363,19 @@ msgstr "Aggiornato server." msgid "Modify Connection to Server" msgstr "Modifica Concessione a server" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Cancella Connessione a server" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Server cancellato." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "Il server WireGuard è stato correttamente avviato." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "Avvio del server WireGuard non riuscito: {}" @@ -10422,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" @@ -10589,35 +10758,35 @@ msgstr "" "proprietà dei dati. Software libero che semplifica l'installazione e la " "gestione di applicazioni server." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Home" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " App" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistema" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Cambia password" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Spegni" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Esci" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Seleziona la lingua" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Accedi" @@ -10716,11 +10885,15 @@ msgstr "" "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" @@ -10888,10 +11061,27 @@ msgstr "Impostazioni invariate" 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" @@ -11823,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 3377e45b6..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8780,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8834,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 "" @@ -8869,6 +8961,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8917,19 +9013,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9089,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 "" @@ -9239,35 +9351,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " ホーム" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " アプリ" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " システム" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "パスワードを変更" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "シャットダウン" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "ログアウト" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9360,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 "" @@ -9517,7 +9633,7 @@ msgstr "" 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 a717c7059..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8777,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8831,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 "" @@ -8866,6 +8958,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8914,19 +9010,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9086,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 "" @@ -9236,35 +9348,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9357,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 "" @@ -9514,6 +9630,6 @@ msgstr "" 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 fea91a53b..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8801,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8855,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 "" @@ -8890,6 +8982,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8938,19 +9034,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9110,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 "" @@ -9260,35 +9372,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9381,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 "" @@ -9538,7 +9654,7 @@ msgstr "" 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 46c807818..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8800,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8854,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 "" @@ -8889,6 +8981,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8937,19 +9033,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9109,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 "" @@ -9259,35 +9371,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9380,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 "" @@ -9537,7 +9653,7 @@ msgstr "" 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 5681a61cd..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,87 +10305,105 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -#, 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 -#, fuzzy, python-format -#| msgid "Public key for this %(box_name)s:" -msgid "Endpoints for this %(box_name)s:" -msgstr "Offentlig nøkkel for denne %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: 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:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Legg til ny tjener" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Legg til tilkobling til tjener" @@ -10339,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:" @@ -10377,6 +10511,10 @@ msgstr "Offentlig nøkkel tilhørende denne maskinen:" msgid "IP address of this machine:" msgstr "IP-adresse tilhørende denne maskinen:" +#: 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." @@ -10433,23 +10571,23 @@ msgstr "Tjener oppdatert." msgid "Modify Connection to Server" msgstr "Endre oppkobling til tjener" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 #, fuzzy #| msgid "Delete Connection" msgid "Delete Connection to Server" msgstr "Slett tilkobling" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Tjener slettet." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "Vellykket passordbytte." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10623,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" @@ -10825,35 +10979,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Hjem" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Programmer" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " System" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Endre passord" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Slå av" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Logg ut" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Velg språk" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Logg inn" @@ -10953,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 "" @@ -11137,10 +11295,29 @@ msgstr "Oppsett uendret" 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" @@ -13293,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 9eb1909ff..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,81 +9978,101 @@ 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:102 +#: 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:87 +msgid "Add a new peer" +msgstr "Nieuwe partner toevoegen" -#: plinth/modules/wireguard/templates/wireguard.html:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Nog niet geconfigureerd." +#: 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:59 -#, fuzzy, python-format -#| msgid "Public key for this %(box_name)s:" -msgid "Endpoints for this %(box_name)s:" -msgstr "Openbare sleutel voor deze %(box_name)s:" +#: 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:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: 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:81 -msgid "Add a new peer" -msgstr "Nieuwe partner toevoegen" - -#: plinth/modules/wireguard/templates/wireguard.html:85 -#: plinth/modules/wireguard/views.py:59 -msgid "Add Allowed Client" -msgstr "Geef toestemming voor client" - -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Als Cliënt" -#: plinth/modules/wireguard/templates/wireguard.html:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Nieuwe server toevoegen" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Verbinding toevoegen aan server" @@ -9992,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:" @@ -10030,6 +10176,10 @@ msgstr "Openbare sleutel van deze machine:" msgid "IP address of this machine:" msgstr "IP-adres van deze machine:" +#: 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." @@ -10078,21 +10228,21 @@ msgstr "Server geaktualiseerd." msgid "Modify Connection to Server" msgstr "Wijzig verbinding met server" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Verwijder verbinding met server" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Server verwijderd." -#: plinth/modules/wireguard/views.py:286 +#: 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:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10288,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" @@ -10468,35 +10636,35 @@ msgstr "" "gegevenseigendom. Het is gratis software waarmee u eenvoudig server-apps " "kunt installeren en beheren." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Startpagina" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Toepassingen" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Systeem" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Wijzig wachtwoord" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Uitschakelen" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Afmelden" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Selecteer taal" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Aanmelden" @@ -10595,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" @@ -10772,10 +10944,27 @@ msgstr "Instelling onveranderd" 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" @@ -13025,9 +13214,6 @@ msgstr "Gujarati" #~ "BitTorrent \n" #~ " (Transmission)" -#~ msgid "Applications" -#~ msgstr "Programma's" - #~ 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/pl/LC_MESSAGES/django.po b/plinth/locale/pl/LC_MESSAGES/django.po index 6e075e3c9..c33b42d0f 100644 --- a/plinth/locale/pl/LC_MESSAGES/django.po +++ b/plinth/locale/pl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2024-07-13 12:09+0000\n" "Last-Translator: Monika \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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,80 +9641,100 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Connection refused" @@ -9686,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 "" @@ -9721,6 +9843,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9791,25 +9917,25 @@ msgstr "Aktualizuj ustawienia" msgid "Modify Connection to Server" msgstr "Błąd podczas ustanawiania połączenia z serwerem: {error}" -#: plinth/modules/wireguard/views.py:254 +#: 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:274 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "Archive deleted." msgid "Server deleted." msgstr "Archiwum zostało usunięte." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 #, fuzzy #| msgid "Partition expanded successfully." msgid "WireGuard server started successfully." msgstr "Partycja rozszerzona." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9972,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" @@ -10172,37 +10314,37 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Dom" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplikacje" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Zmień hasło" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Wyłącz" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Wyloguj się" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "Język" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Zaloguj się" @@ -10304,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 "" @@ -10478,10 +10624,17 @@ msgstr "Ustawienie bez zmian" 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" @@ -11411,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 d72541092..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,77 +10163,97 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Ainda não configurado." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, fuzzy, python-format -#| msgid "Public key for this %(box_name)s:" -msgid "Endpoints for this %(box_name)s:" -msgstr "Chave pública para este %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Adicionar um novo par" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Adicionar um novo servidor" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Adicionar conexão ao servidor" @@ -10173,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:" @@ -10211,6 +10357,10 @@ msgstr "Chave pública desta máquina:" msgid "IP address of this machine:" msgstr "Endereço IP desta máquina:" +#: 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." @@ -10259,21 +10409,21 @@ msgstr "Servidor atualizado." msgid "Modify Connection to Server" msgstr "Modificar conexão com o servidor" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Excluir conexão com o servidor" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Servidor excluído." -#: plinth/modules/wireguard/views.py:286 +#: 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:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10470,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" @@ -10648,35 +10816,35 @@ msgstr "" "dados. É um software gratuito que permite instalar e gerenciar aplicativos " "de servidor com facilidade." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Início" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplicações" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistema" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Alterar palavra-passe" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Desligar" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Terminar sessão" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Selecionar idioma" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Iniciar sessão" @@ -10775,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 "" @@ -10952,10 +11124,27 @@ msgstr "Definição inalterada" 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" @@ -11358,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 0841fb0f4..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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" @@ -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:101 +#: 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,80 +10105,100 @@ 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:102 +#: 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:87 +msgid "Add a new peer" +msgstr "Добавление нового однорангового узла" -#: plinth/modules/wireguard/templates/wireguard.html:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Еще не настроен." +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 +msgid "Add Allowed Client" +msgstr "Добавить разрешенный клиент" -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, fuzzy, python-format -#| msgid "Public key for this %(box_name)s:" -msgid "Endpoints for this %(box_name)s:" -msgstr "Открытый ключ для этого %(box_name)s:" +#: 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:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: 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:81 -msgid "Add a new peer" -msgstr "Добавление нового однорангового узла" - -#: plinth/modules/wireguard/templates/wireguard.html:85 -#: plinth/modules/wireguard/views.py:59 -msgid "Add Allowed Client" -msgstr "Добавить разрешенный клиент" - -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "Как клиент" -#: plinth/modules/wireguard/templates/wireguard.html:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Подключения к удаленным серверам пока не настроены." -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Добавить новый сервер" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Добавить подключение к серверу" @@ -10118,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 "Последнее рукопожатие:" @@ -10156,6 +10302,10 @@ msgstr "Открытый ключ этой машины:" msgid "IP address of this machine:" msgstr "IP-адрес этой машины:" +#: 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 "Добавлен новый клиент." @@ -10204,21 +10354,21 @@ msgstr "Обновленный сервер." msgid "Modify Connection to Server" msgstr "Изменить подключение к серверу" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Удалить соединение с сервером" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Сервер удален." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "Пароль успешно изменён." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10415,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 "Установка приложения" @@ -10584,35 +10752,35 @@ msgstr "" "обеспечение, позволяющее легко устанавливать серверные приложения и " "управлять ими." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Главная" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Приложения" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Система" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Изменить пароль" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Завершить работу" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Выход" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Выбрать язык" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Войти" @@ -10712,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 назад" @@ -10883,10 +11055,27 @@ msgstr "Настройки без изменений" 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" @@ -13051,9 +13240,6 @@ msgstr "Гуджарати" #~ "BitTorrent\n" #~ " (Transmissiоn)" -#~ 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/si/LC_MESSAGES/django.po b/plinth/locale/si/LC_MESSAGES/django.po index 17d759380..0f1bfcea7 100644 --- a/plinth/locale/si/LC_MESSAGES/django.po +++ b/plinth/locale/si/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2021-04-27 13:32+0000\n" "Last-Translator: HelaBasa \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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +8775,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -8829,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 "" @@ -8864,6 +8956,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -8912,19 +9008,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9084,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 "" @@ -9234,35 +9346,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9355,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 "" @@ -9512,6 +9628,6 @@ msgstr "" 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 a411bffb0..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +9224,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 #, fuzzy #| msgid "Connection refused" @@ -9282,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 "" @@ -9319,6 +9417,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9379,23 +9481,23 @@ msgstr "" msgid "Modify Connection to Server" msgstr "Napaka ob nameščanju aplikacije: {error}" -#: plinth/modules/wireguard/views.py:254 +#: 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:274 +#: plinth/modules/wireguard/views.py:275 #, fuzzy #| msgid "Archive deleted." msgid "Server deleted." msgstr "Arhiv je izbrisan." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9556,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 "" @@ -9722,35 +9840,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9843,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 "" @@ -10007,10 +10129,17 @@ msgstr "" 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 fc1efb786..521330137 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+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 " #: 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:222 -#: plinth/templates/base.html:225 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:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "Hollësi licence JavaScript" @@ -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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +10148,97 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Ende e paformësuar." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "Pikëmbarime për këtë %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "Nis Shërbyes WireGuard" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Shtoni ortak të ri" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: 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:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Shtoni Lidhje me Shërbyesin" @@ -10155,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:" @@ -10193,6 +10340,10 @@ msgstr "Kyç publik i kësaj makine:" msgid "IP address of this machine:" msgstr "Adresë IP e kësaj makine:" +#: 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." @@ -10241,19 +10392,19 @@ msgstr "Shërbyesi u përditësua." msgid "Modify Connection to Server" msgstr "Ndryshoni Lidhjen me Shërbyesin" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Fshije Lidhjen me Shërbyesin" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Shërbyesi u fshi." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "Shërbyesi WireGuard u nis me sukses." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "S’u arrit të niset shërbyes WireGuard: {}" @@ -10450,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" @@ -10618,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:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Kreu" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Aplikacione" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistem" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Ndryshoni fjalëkalimin" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Fike" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Dil" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Përzgjidhni gjuhën" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Hyni" @@ -10745,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ë" @@ -10916,10 +11089,27 @@ msgstr "Rregullim i pandryshuar" 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 eca20e294..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +9088,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -9134,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 "" @@ -9169,6 +9269,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9217,19 +9321,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9389,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 "" @@ -9551,35 +9671,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9672,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 "" @@ -9835,10 +9959,17 @@ msgstr "" 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 41d097424..7cb53d981 100644 --- a/plinth/locale/sv/LC_MESSAGES/django.po +++ b/plinth/locale/sv/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+0000\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 " #: 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 +#, fuzzy +#| msgid "Disable password authentication" +msgid "SSH password is needed for password-based authentication." +msgstr "Inaktivera lösenordsautentisering" + +#: 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:281 +#: 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" @@ -543,17 +577,17 @@ msgstr "Backupsystemet är upptaget med en annan process." msgid "Not enough space left on the disk or remote location." 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" @@ -589,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 @@ -614,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.
" @@ -626,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" @@ -757,109 +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 +#: plinth/modules/backups/views.py:230 msgid "Upload successful." 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 +#: plinth/modules/backups/views.py:364 msgid "Added new repository." msgstr "Lade till nytt kodförråd." -#: plinth/modules/backups/views.py:364 +#: 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" @@ -942,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" @@ -1031,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" @@ -1109,6 +1161,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" @@ -1409,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 " @@ -1889,10 +1949,11 @@ msgid "" "use a subdomain, add it as a static domain in the Names app." msgstr "" "Om du letar efter ett gratis dynamiskt DNS-konto kan du hitta en gratis " -"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." +"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 msgid "" @@ -1900,8 +1961,8 @@ msgid "" "href='http://freedns.afraid.org/' target='_blank'>freedns.afraid.org." msgstr "" "Alternativt kan du hitta en gratis URL-baserad tjänst med gratis uppdatering " -"på " -"freedns.afraid.org." +"på freedns.afraid.org." #: plinth/modules/dynamicdns/__init__.py:50 msgid "" @@ -2017,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" @@ -2306,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 "Status" @@ -2371,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." @@ -2983,8 +3048,8 @@ msgstr "Uppdatera nu" msgid "" "Review privacy options." msgstr "" -"Granska sekretessalternativ" -"." +"Granska sekretessalternativ." #: plinth/modules/first_boot/templates/firstboot_complete.html:49 #, python-format @@ -3017,8 +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." +"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" @@ -3286,8 +3351,8 @@ msgstr "Skicka feedback" msgid "Contribute" msgstr "Bidrar" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:222 -#: plinth/templates/base.html:225 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" @@ -3736,9 +3801,10 @@ msgid "" "href=\"%(dynamic_dns_url)s\">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." +"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 @@ -3939,7 +4005,7 @@ msgstr "Webbkonferens" #: plinth/modules/janus/templates/janus_video_room.html:204 #: plinth/modules/jsxc/templates/jsxc_launch.html:117 -#: plinth/templates/base.html:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "JavaScript-licensinformation" @@ -5145,9 +5211,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:172 plinth/templates/base.html:173 +#: 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" @@ -5714,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" @@ -5926,6 +5993,7 @@ 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 msgid "Error:" msgstr "Fel:" @@ -6132,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 " @@ -6542,6 +6616,40 @@ msgstr "Groupware" 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 "" @@ -6876,8 +6984,8 @@ msgstr "Omstart" msgid "Shutdown" msgstr "Avstängning" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:187 -#: plinth/templates/base.html:188 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Starta om" @@ -7074,8 +7182,8 @@ msgid "" msgstr "" "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." +"downloads\">desktop och mobila enheter är tillgängliga." #: plinth/modules/quassel/__init__.py:51 plinth/modules/quassel/manifest.py:9 msgid "Quassel" @@ -7430,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å lagring modulsidan och konfigurera åtkomst till delningarna på användare modul sida." +"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" @@ -7672,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,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 manuell sida för förväntade förändringar och övergångar under " -"distributionsuppgraderingen." +"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 msgid "Go to Distribution Update" msgstr "Gå till distributionsduppdatering" -#: 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" - #: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15 #, python-format msgid "" @@ -9256,11 +9347,11 @@ msgstr "" "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." +"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 "" @@ -9508,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 " @@ -9552,22 +9647,22 @@ msgstr "" "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." @@ -9575,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 " @@ -9603,11 +9698,11 @@ 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 +#: plinth/modules/users/forms.py:273 msgid "Delete user" 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." @@ -9616,41 +9711,41 @@ msgstr "" "användaren. Att ta bort filer kan undvikas genom att ange användarkontot som " "inaktivt." -#: plinth/modules/users/forms.py:305 +#: plinth/modules/users/forms.py:326 msgid "Failed to delete user." 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" @@ -9662,6 +9757,10 @@ msgstr "Hantera konton" msgid "App permissions" 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 msgid "Change Password for %(username)s" @@ -9675,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" @@ -9725,7 +9824,7 @@ 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" @@ -9734,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" @@ -9775,30 +9878,34 @@ msgstr "Ta bort användare och filer" 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 +#: plinth/modules/users/views.py:177 #, python-format msgid "User %(username)s deleted." 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." @@ -9830,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:101 +#: 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= ." @@ -9845,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 ." @@ -9857,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= ." @@ -9869,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, " @@ -9899,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: " @@ -9913,11 +10038,11 @@ 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." @@ -9930,78 +10055,99 @@ msgstr "VPN-klient" 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Inte konfigurerad än." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "Slutpunkter för detta %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "Starta WireGuard-server" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: 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:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: 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:138 +#: 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" @@ -10061,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:" @@ -10099,6 +10249,10 @@ msgstr "Offentlig nyckel för denna maskin:" msgid "IP address of this machine:" msgstr "IP-adressen för denna maskin:" +#: 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." @@ -10147,19 +10301,19 @@ msgstr "Uppdaterad server." msgid "Modify Connection to Server" msgstr "Ändra Anslutningen till Servern" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Ta bort anslutning till server" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Servern har tagits bort." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "WireGuard-server startades framgångsrikt." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "Misslyckades att starta WireGuard-server: {}" @@ -10354,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" @@ -10522,35 +10694,35 @@ msgstr "" "Det är gratis programvara som låter dig enkelt installera och hantera " "serverappar." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Hem" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Appar" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " System" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Ändra lösenord" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Stänga ner" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Logga ut" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Välj språk" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Logga in" @@ -10651,11 +10823,15 @@ 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 "%(time_since)s sedan" @@ -10822,10 +10998,27 @@ msgstr "Instänllningar oförändrade" 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" @@ -12657,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 b85400389..9163ea6c5 100644 --- a/plinth/locale/ta/LC_MESSAGES/django.po +++ b/plinth/locale/ta/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+0000\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 " #: 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 "மீட்டமை" @@ -544,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 "புதிய காப்புப்பிரதியை உருவாக்கவும்" @@ -590,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 @@ -615,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.
" @@ -626,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 "இருப்பிடத்தை உருவாக்கவும்" @@ -756,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 "பெருகிவரும் தோல்வியுற்றது" @@ -937,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 "அனுமதிகள்" @@ -1022,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 "நீக்கு" @@ -1100,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 "சேவையகம்" @@ -1398,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} ஐ யாராவது பார்வையிடும்போது வழங்கப்பட வேண்டிய இயல்புநிலை " "பக்கத்தைத் தேர்வுசெய்க. டொமைன் பெயரை யாராவது பார்வையிடும்போது உங்கள் வலைப்பதிவு அல்லது " @@ -1885,9 +1945,9 @@ msgid "" "Alternatively, you may find a free update URL based service at freedns.afraid.org." msgstr "" -"மாற்றாக, " -"freedns.afraid.org இல் இலவச புதுப்பிப்பு முகவரி அடிப்படையிலான சேவையை நீங்கள் " -"காணலாம்." +"மாற்றாக, freedns.afraid.org இல் இலவச புதுப்பிப்பு முகவரி " +"அடிப்படையிலான சேவையை நீங்கள் காணலாம்." #: plinth/modules/dynamicdns/__init__.py:50 msgid "" @@ -2004,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 "பயனர்பெயர்" @@ -2293,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 "நிலை" @@ -2357,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 "" " ரவுண்ட்கியூப் பயன்பாடு பயனர்களுக்கு " "மின்னஞ்சலை அணுக வலை இடைமுகத்தை வழங்குகிறது." @@ -3267,8 +3331,8 @@ msgstr "கருத்துக்களை சமர்ப்பிக்க msgid "Contribute" msgstr "பங்களிப்பு" -#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:222 -#: plinth/templates/base.html:225 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 "பற்றி" @@ -3625,9 +3689,9 @@ msgid "" "setup if such hardware is added or removed." msgstr "" "உள்ளக நெட்வொர்க்கில் உள்ள பல்வேறு சாதனங்களைக் கண்டறியவும், உள்ளமைக்கவும் மற்றும் பயன்படுத்தவும் " -"முகப்பு உதவியாளரால் முடியும். ZigBee போன்ற பிற நெறிமுறைகளைப் பயன்படுத்தும் சாதனங்களுக்கு, " -"பொதுவாக ZigBee USB டாங்கிள் போன்ற கூடுதல் வன்பொருள் தேவைப்படுகிறது. அத்தகைய வன்பொருள் " -"சேர்க்கப்பட்டாலோ அல்லது அகற்றப்பட்டாலோ நீங்கள் அமைப்பை மீண்டும் இயக்க வேண்டும்." +"முகப்பு உதவியாளரால் முடியும். ZigBee போன்ற பிற நெறிமுறைகளைப் பயன்படுத்தும் " +"சாதனங்களுக்கு, பொதுவாக ZigBee USB டாங்கிள் போன்ற கூடுதல் வன்பொருள் தேவைப்படுகிறது. " +"அத்தகைய வன்பொருள் சேர்க்கப்பட்டாலோ அல்லது அகற்றப்பட்டாலோ நீங்கள் அமைப்பை மீண்டும் இயக்க வேண்டும்." #: plinth/modules/homeassistant/__init__.py:39 msgid "" @@ -3636,8 +3700,8 @@ msgid "" "its own user accounts." msgstr "" "ஆப்ச் நிறுவப்பட்டவுடன், வீடு Assistant இணைய இடைமுகம் விரைவில் அமைக்கப்பட வேண்டும். இந்த " -"நேரத்தில் ஒரு நிர்வாகி கணக்கு உருவாக்கப்பட்டது. வீட்டு உதவியாளர் அதன் சொந்த பயனர் கணக்குகளை " -"பராமரிக்கிறது." +"நேரத்தில் ஒரு நிர்வாகி கணக்கு உருவாக்கப்பட்டது. வீட்டு உதவியாளர் அதன் சொந்த பயனர் " +"கணக்குகளை பராமரிக்கிறது." #: plinth/modules/homeassistant/__init__.py:43 #, python-brace-format @@ -3697,8 +3761,8 @@ 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 கிடைக்கக்கூடிய டொமைனைத் தேர்ந்தெடுக்கவும். மற்ற " "டொமைன்களில் வீடு Assistant கிடைக்காது." #: plinth/modules/homeassistant/templates/homeassistant.html:28 @@ -3710,9 +3774,9 @@ msgid "" "href=\"%(dynamic_dns_url)s\">Dynamic DNS app for configuring subdomains." msgstr "" "homeassistant.mydomain.example போன்ற துணை டொமைனை உள்ளமைப்பதன் மூலம் வீட்டு " -"உதவியாளருக்கு ஒரு தனி டொமைனைக் கிடைக்கச் செய்யலாம். துணை டொமைன்களை உள்ளமைக்க பெயர்கள் பயன்பாடு மற்றும் " -"டைனமிக் DNS பயன்பாட்டைப் பார்க்கவும்." +"உதவியாளருக்கு ஒரு தனி டொமைனைக் கிடைக்கச் செய்யலாம். துணை டொமைன்களை உள்ளமைக்க பெயர்கள் பயன்பாடு மற்றும் டைனமிக் DNS பயன்பாட்டைப் பார்க்கவும்." #: plinth/modules/homeassistant/templates/homeassistant.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:18 @@ -3913,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:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "சாவாச்கிரிப்ட் உரிம செய்தி" @@ -4406,8 +4470,9 @@ msgstr "" "மேட்ரிக்ச் சினாப்ச் இணையத்தில் உள்ள மற்ற மேட்ரிக்ச் சேவையகங்களுடன் வேலை செய்ய " "கட்டமைக்கப்பட்டுள்ளது. இது %(box_name)s பயனர்கள் வேறு இடங்களில் புரவலன் செய்யப்பட்ட " "அறைகளில் பங்கேற்கவும், மற்ற சேவையகங்களில் உள்ள அணி பயனர்கள் இங்கு புரவலன் செய்யப்பட்ட " -"அறைகளில் பங்கேற்கவும் அனுமதிக்கிறது. கூட்டமைப்பில் நீங்கள் சிக்கலை எதிர்கொண்டால், கூட்டமைப்பு சோதனை கருவியை முயற்சிக்கவும்." +"அறைகளில் பங்கேற்கவும் அனுமதிக்கிறது. கூட்டமைப்பில் நீங்கள் சிக்கலை எதிர்கொண்டால், கூட்டமைப்பு சோதனை கருவியை " +"முயற்சிக்கவும்." #: plinth/modules/matrixsynapse/templates/matrix-synapse.html:99 #, python-format @@ -4594,9 +4659,9 @@ msgid "" "www.luanti.org/downloads/\">Luanti client is needed." msgstr "" "லுவான்டி, முறையாக Minetest என அறியப்படுகிறது, இது ஒரு மல்டிபிளேயர் எல்லையற்ற உலகத் " -"தொகுதி சாண்ட்பாக்ச் ஆகும். இந்த தொகுதியானது, இயல்புநிலை போர்ட்டில் (30000) இந்த {box_name} " -"இல் Luanti சேவையகத்தை இயக்க உதவுகிறது. சேவையகத்துடன் இணைக்க, Luanti கிளையன்ட் தேவை." +"தொகுதி சாண்ட்பாக்ச் ஆகும். இந்த தொகுதியானது, இயல்புநிலை போர்ட்டில் (30000) இந்த " +"{box_name} இல் Luanti சேவையகத்தை இயக்க உதவுகிறது. சேவையகத்துடன் இணைக்க, Luanti கிளையன்ட் தேவை." #: plinth/modules/minetest/__init__.py:57 plinth/modules/minetest/manifest.py:9 msgid "Luanti" @@ -5092,8 +5157,8 @@ msgid "" "AAAA records) to the public IP addresses of the %(box_name)s." msgstr "" "நீங்கள் டொமைன் பதிவாளரிடமிருந்து டொமைன் பெயரை வாங்கியிருந்தால், அதை இங்கே உள்ளமைக்கலாம். " -"டொமைனுக்குப் பொறுப்பான பெயர் சேவையகங்கள் %(box_name)s இன் பொது IP முகவரிகளை (A மற்றும் " -"AAAA பதிவுகள்) சுட்டிக்காட்டி இருக்க வேண்டும்." +"டொமைனுக்குப் பொறுப்பான பெயர் சேவையகங்கள் %(box_name)s இன் பொது IP முகவரிகளை (A " +"மற்றும் AAAA பதிவுகள்) சுட்டிக்காட்டி இருக்க வேண்டும்." #: plinth/modules/names/templates/names-domain-add.html:18 #, python-format @@ -5110,9 +5175,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:172 plinth/templates/base.html:173 +#: 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 "தொகு" @@ -5666,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 "இணைப்பு" @@ -5876,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 "பிழை:" @@ -6078,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 "" "உங்கள் திசைவி மீது உங்களுக்கு கட்டுப்பாடு இல்லையென்றால், அதை உள்ளமைக்க வேண்டாம் என்பதைத் " "தேர்வுசெய்க. இந்த வரம்பைக் கடக்க விருப்பங்களைக் காண, 'எனக்கு பொது ஐபி முகவரி இல்லை' " @@ -6487,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 "" @@ -6814,8 +6921,8 @@ msgstr "மறுதொடக்கம் செய்யுங்கள்" msgid "Shutdown" msgstr "பணிநிறுத்தம்" -#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:187 -#: plinth/templates/base.html:188 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "மறுதொடக்கம்" @@ -7605,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 "இல்லை" @@ -7886,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 "" "ச்னாப்சாட்கள் தற்போது பி.டி.ஆர்.எஃப்.எச் கோப்பு முறைமைகளில் மட்டுமே வேலை செய்கின்றன மற்றும் " "ரூட் பகிர்வில் மட்டுமே. ச்னாப்சாட்கள் " @@ -8241,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 "" @@ -9039,10 +9135,10 @@ msgid "" msgstr "" "%(box_name)s பணி மற்றும் மிகக் குறைந்த அளவிலான மென்பொருட்கள், புதிய அம்சங்களை அடிக்கடி " "(பேக்போர்ட்கள் அல்லது நிலையற்ற களஞ்சியத்தில் இருந்து) பெற அடிக்கடி அம்ச புதுப்பிப்புகள் " -"அனுமதிக்கின்றன. இதன் விளைவாக 2 ஆண்டுகளுக்கு ஒருமுறை அல்லது அதற்குப் பதிலாக வாரங்களுக்குள் " -"சில புதிய அம்சங்களைப் பெறுகிறது. டெபியன் பாதுகாப்புக் குழுவின் ஆதரவை அடிக்கடி " -"மேம்படுத்தும் மென்பொருளுக்கு இல்லை என்பதை நினைவில் கொள்ளவும். மாறாக, டெபியன் மற்றும் %" -"(box_name)s சமூகத்தின் பங்களிப்பாளர்களால் அவை பராமரிக்கப்படுகின்றன." +"அனுமதிக்கின்றன. இதன் விளைவாக 2 ஆண்டுகளுக்கு ஒருமுறை அல்லது அதற்குப் பதிலாக " +"வாரங்களுக்குள் சில புதிய அம்சங்களைப் பெறுகிறது. டெபியன் பாதுகாப்புக் குழுவின் ஆதரவை " +"அடிக்கடி மேம்படுத்தும் மென்பொருளுக்கு இல்லை என்பதை நினைவில் கொள்ளவும். மாறாக, டெபியன் " +"மற்றும் %(box_name)s சமூகத்தின் பங்களிப்பாளர்களால் அவை பராமரிக்கப்படுகின்றன." #: plinth/modules/upgrades/templates/backports-firstboot.html:26 msgid "" @@ -9150,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 "" @@ -9424,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 " @@ -9468,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 " @@ -9517,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." @@ -9529,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 "பயனர் கணக்கு உருவாக்கப்பட்டது, நீங்கள் இப்போது உள்நுழைந்துள்ளீர்கள்" @@ -9574,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" @@ -9587,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 "பயனரை உருவாக்கு" @@ -9627,17 +9724,17 @@ msgid "" "already usable with %(box_name)s, skip this step." msgstr "" "கட்டளை வரியிலிருந்து இந்தக் கணக்குகளை நீக்கி, %(box_name)s உடன் பயன்படுத்தக்கூடிய கணக்கை " -"உருவாக்க பக்கத்தைப் புதுப்பிக்கவும். கட்டளை வரியில் \"echo '{\"args\" கட்டளையை இயக்கவும்: " -"[\"USERNAME\", \"AUTH_USER\", \"AUTH_PASSWORD\"], \"kwargs\": {}}' | sudo " -"freedombox-cmd பயனர்கள் remove_user\". ஒரு கணக்கு ஏற்கனவே %(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 "பயனர்கள்" @@ -9646,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" @@ -9686,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 "கடவுச்சொல் வெற்றிகரமாக மாற்றப்பட்டது." @@ -9741,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:101 +#: 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= ." @@ -9756,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 ." @@ -9768,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= ." @@ -9780,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, " @@ -9809,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: " @@ -9823,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 சேவைக்கு சரிபார்க்கப்படும்." @@ -9839,76 +9962,97 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "இன்னும் கட்டமைக்கப்படவில்லை." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "இதற்கான முடிவுப்புள்ளிகள் %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "WireGuard சேவையகத்தைத் தொடங்கவும்" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "புதிய சகாக்களைச் சேர்க்கவும்" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "அனுமதிக்கப்பட்ட கிளையன்ட் சேர்க்கவும்" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "தொலை சேவையகங்களுக்கான தொடர்புகள் இன்னும் கட்டமைக்கப்படவில்லை." -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "புதிய சேவையகத்தைச் சேர்க்கவும்" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "சேவையகத்திற்கு இணைப்பைச் சேர்க்கவும்" @@ -9968,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 "அண்மைக் கால ஏண்ட்சேக்:" @@ -10006,6 +10154,10 @@ msgstr "இந்த இயந்திரத்தின் பொது வி msgid "IP address of this machine:" msgstr "இந்த இயந்திரத்தின் ஐபி முகவரி:" +#: 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 "புதிய கிளையன்ட் சேர்க்கப்பட்டது." @@ -10054,19 +10206,19 @@ msgstr "புதுப்பிக்கப்பட்ட சேவையக msgid "Modify Connection to Server" msgstr "சேவையகத்திற்கான இணைப்பை மாற்றவும்" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "சேவையகத்திற்கான இணைப்பை நீக்கு" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "சேவையகம் நீக்கப்பட்டது." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "WireGuard சேவையகம் வெற்றிகரமாக தொடங்கப்பட்டது." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "WireGuard சேவையகத்தைத் தொடங்குவதில் தோல்வி: {}" @@ -10259,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,8 +10554,8 @@ msgid "" msgstr "" "இது ஒரு உள் பிழை மற்றும் நீங்கள் ஏற்படுத்திய அல்லது சரிசெய்யக்கூடிய ஒன்று அல்ல. பிழையை பிழை " -"டிராக்கரில் புகாரளிக்கவும், அதை நாங்கள் சரிசெய்ய முடியும். மேலும், பிழை அறிக்கையுடன் " -"பதிவுகளை இணைக்கவும்." +"டிராக்கரில் புகாரளிக்கவும், அதை நாங்கள் சரிசெய்ய முடியும். மேலும், பிழை " +"அறிக்கையுடன் பதிவுகளை இணைக்கவும்." #: plinth/templates/app-header.html:26 msgid "Installation" @@ -10424,35 +10594,35 @@ msgstr "" "சேவையகமாகும். இது இலவச மென்பொருளாகும், இது சேவையக பயன்பாடுகளை எளிதாக நிறுவவும் " "நிர்வகிக்கவும் உங்களை அனுமதிக்கிறது." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " வீடு" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " பயன்பாடுகள்" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " அமைப்பு" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "கடவுச்சொல்லை மாற்றவும்" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "மூடு" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "விடுபதிகை" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "மொழியைத் தேர்ந்தெடுக்கவும்" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "புகுபதிகை" @@ -10550,11 +10720,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 "%(time_since)s முன்பு" @@ -10719,10 +10893,27 @@ msgstr "மாறாமல் அமைத்தல்" 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 118d927df..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,79 +9775,99 @@ 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:102 +#: 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:87 +msgid "Add a new peer" +msgstr "కొత్త పరిచయకర్తని జోడించండి" -#: plinth/modules/wireguard/templates/wireguard.html:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "ప్రస్తుతం ఏ షేర్లు ఏర్పాటు చేయబడలేదు." +#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/views.py:59 +msgid "Add Allowed Client" +msgstr "అనుమతించబడిన క్లయింట్‌ను జోడించండి" -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, fuzzy, python-format -#| msgid "Public key for this %(box_name)s:" -msgid "Endpoints for this %(box_name)s:" -msgstr "ఈ %(box_name)s కోసం స్వయం తాళం :" +#: 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:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 +#: 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:81 -msgid "Add a new peer" -msgstr "కొత్త పరిచయకర్తని జోడించండి" - -#: plinth/modules/wireguard/templates/wireguard.html:85 -#: plinth/modules/wireguard/views.py:59 -msgid "Add Allowed Client" -msgstr "అనుమతించబడిన క్లయింట్‌ను జోడించండి" - -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: plinth/modules/wireguard/templates/wireguard.html:108 msgid "As a Client" msgstr "చాట్ క్లయింట్" -#: plinth/modules/wireguard/templates/wireguard.html:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "రిమోట్ సర్వర్ లకు కనెక్షన్ లు ఇంకా కాన్ఫిగర్ చేయబడలేదు." -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "కొత్త సర్వర్ జోడించండి" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "అనుసంధానాన్ని జతచేయండి" @@ -9785,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 "తాజా హ్యాండ్‌షేక్:" @@ -9822,6 +9970,10 @@ msgstr "ఈ యంత్రం యొక్క పబ్లిక్ కీ:" msgid "IP address of this machine:" msgstr "ఈ యంత్రం యొక్క IP చిరునామా:" +#: 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 "కొత్త క్లయింట్ జోడించబడింది." @@ -9870,21 +10022,21 @@ msgstr "నవీకరించబడిన సర్వర్." msgid "Modify Connection to Server" msgstr "సర్వర్‌కి కనెక్షన్‌ని సవరించండి" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "సర్వర్‌కు కనెక్షన్‌ని తొలగించండి" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "సర్వర్ తొలగించబడింది." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "పాస్‌వర్డ్ విజయవంతంగా మార్చబడినది." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10070,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 "యాప్‌ను ఇన్‌స్టాల్ చేస్తోంది" @@ -10244,35 +10414,35 @@ msgstr "" "FreedomBox అనేది గోప్యత మరియు డేటా యాజమాన్యం కోసం రూపొందించబడిన వ్యక్తిగత సర్వర్. ఇది సర్వర్ యాప్‌లను " "సులభంగా ఇన్‌స్టాల్ చేయడానికి మరియు నిర్వహించడానికి మిమ్మల్ని అనుమతించే ఉచిత సాఫ్ట్‌వేర్." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " నివాసం" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " కార్యక్షేత్రం" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " కార్యవ్యవస్థ" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "పాస్స్ వర్ద మార్చుము" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "మూసివేయి" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "నిష్క్రమించు" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "బాషను ఎంచుకోండి" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "లోనికి ప్రవేశించండి" @@ -10370,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 "" @@ -10543,10 +10717,25 @@ msgstr "మారకుండా అమర్చుతోంది" 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 "మైన్ టెస్ట్" @@ -12483,9 +12672,6 @@ msgstr "గుజరాతీ" #~ " (repro)" #~ msgstr "సేవిక చిరునామా GnudIP" -#~ 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/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index 2da5e625c..6b65fd23c 100644 --- a/plinth/locale/tr/LC_MESSAGES/django.po +++ b/plinth/locale/tr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2026-02-04 06:01+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish 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:222 -#: plinth/templates/base.html:225 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:282 +#: plinth/templates/base.html:283 msgid "JavaScript license information" msgstr "JavaScript lisans bilgileri" @@ -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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: plinth/modules/power/templates/power.html:15 plinth/templates/base.html:188 +#: plinth/templates/base.html:189 msgid "Restart" msgstr "Yeniden başlat" @@ -7694,10 +7800,12 @@ msgid "N/A" 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:101 +#: 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,77 +10080,98 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Henüz yapılandırılmadı." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "Bu %(box_name)s için uç noktalar:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "WireGuard Sunucusunu Başlat" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Yeni bir kişi ekle" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: 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:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: 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:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Yeni bir sunucu ekleyin" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Sunucuya Bağlantı Ekle" @@ -10088,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:" @@ -10126,6 +10273,10 @@ msgstr "Bu makinenin ortak anahtarı:" msgid "IP address of this machine:" msgstr "Bu makinenin IP adresi:" +#: 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." @@ -10174,19 +10325,19 @@ msgstr "Sunucu güncellendi." msgid "Modify Connection to Server" msgstr "Sunucuya Bağlantıyı Değiştir" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Sunucuya Bağlantıyı Sil" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Sunucu silindi." -#: plinth/modules/wireguard/views.py:286 +#: 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:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "WireGuard sunucusunu başlatma başarısız oldu: {}" @@ -10381,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" @@ -10548,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:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Giriş" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Uygulamalar" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Sistem" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Parolayı değiştir" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Kapat" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Oturumu kapat" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Dil seçin" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Oturum aç" @@ -10674,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" @@ -10847,10 +11020,27 @@ msgstr "Ayar değişmedi" 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" @@ -13067,9 +13257,6 @@ msgstr "Gujarati" #~ "BitTorrent\n" #~ " (Transmission)" -#~ msgid "Applications" -#~ msgstr "Uygulamalar" - #~ 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/uk/LC_MESSAGES/django.po b/plinth/locale/uk/LC_MESSAGES/django.po index 0635f5040..3e39cf9de 100644 --- a/plinth/locale/uk/LC_MESSAGES/django.po +++ b/plinth/locale/uk/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+0000\n" +"POT-Creation-Date: 2026-03-03 02:00+0000\n" "PO-Revision-Date: 2025-12-17 07:00+0000\n" "Last-Translator: Максим Горпиніч \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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,77 +10071,97 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "Ще не сконфіґуровано." - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, fuzzy, python-format -#| msgid "Public key for this %(box_name)s:" -msgid "Endpoints for this %(box_name)s:" -msgstr "Публічний ключ для цього %(box_name)s:" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "Додати новий вузол" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "Додати дозволений клієнт" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "Ще не сконфіґуровано зʼєднань до віддалених серверів." -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "Додати новий сервер" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "Додати зʼєднання зі сервером" @@ -10081,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 "Останнє рукостискання:" @@ -10119,6 +10265,10 @@ msgstr "Публічний ключ цієї машини:" msgid "IP address of this machine:" msgstr "IP-адреса цієї машини:" +#: 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 "Додано нового клієнта." @@ -10167,21 +10317,21 @@ msgstr "Оновлено сервер." msgid "Modify Connection to Server" msgstr "Змінити зʼєднання до сервера" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "Видалити зʼєднання до сервера" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "Сервер видалено." -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "Пароль змінено успішно." -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10377,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 "Встановлення застосунку" @@ -10544,35 +10712,35 @@ msgstr "" "конфіденційності та володіння даними. Це безплатне програмне забезпечення, " "яке дозволяє легко встановлювати та керувати серверними програмами." -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " Домівка" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " Застосунки" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " Система" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "Змінити пароль" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "Вимкнути" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "Вийти" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "Вибрати мову" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "Увійти" @@ -10671,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 тому" @@ -10842,10 +11014,27 @@ msgstr "Налаштування не змінено" 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 ba22a6508..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +9257,93 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -9294,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 "" @@ -9329,6 +9440,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9377,19 +9492,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9550,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 "" @@ -9712,35 +9843,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9835,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 "" @@ -9999,10 +10134,17 @@ msgstr "" 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 df6e51e2b..f50f4ed52 100644 --- a/plinth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hans/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Plinth\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 01:14+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" @@ -103,15 +103,15 @@ msgstr "此 web 管理界面的语言" msgid "Use the language preference set in the browser" msgstr "使用浏览器中设置的语言首选项" -#: plinth/menu.py:116 plinth/templates/base.html:124 +#: plinth/menu.py:116 plinth/templates/base.html:125 msgid "Home" msgstr "主页" -#: plinth/menu.py:117 plinth/templates/base.html:133 +#: plinth/menu.py:117 plinth/templates/base.html:134 msgid "Apps" msgstr "应用程序" -#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:142 +#: plinth/menu.py:119 plinth/menu.py:126 plinth/templates/base.html:143 msgid "System" msgstr "系统" @@ -134,36 +134,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 "Apache HTTP 服务" -#: plinth/modules/apache/__init__.py:47 +#: plinth/modules/apache/__init__.py:112 msgid "Web Server" msgstr "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} 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}" @@ -209,34 +213,34 @@ 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 "转到 {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 " @@ -244,7 +248,7 @@ msgid "" msgstr "" "定时备份失败,尝试{error_count}次备份未成功。最后的错误是:{error_message}" -#: plinth/modules/backups/__init__.py:226 +#: plinth/modules/backups/__init__.py:297 msgid "Error During Backup" msgstr "备份时出错" @@ -385,7 +389,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 @@ -423,27 +429,57 @@ msgid "" msgstr "新的或已有存储库的路径。例如: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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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 "" @@ -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:101 +#: 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,76 +9051,96 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "启动 WireGuard 服务器" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "尚未配置到远程服务器的连接。" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "添加到服务器的连接" @@ -9078,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 "" @@ -9113,6 +9237,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9161,19 +9289,19 @@ msgstr "已更新服务器。" msgid "Modify Connection to Server" msgstr "修改到服务器的连接" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "删除与服务器的连接" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "服务器已删除。" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "WireGuard 服务器启动成功。" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9333,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 "安装应用中" @@ -9492,35 +9636,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr " 主页" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr " 应用程序" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr " 系统" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "更改密码" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "关闭" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "登出" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "选择语言" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "登录" @@ -9616,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 "" @@ -9773,10 +9921,15 @@ msgstr "设置未改变" 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 " @@ -11238,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 9dc1ca54d..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: 2026-02-03 01:14+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:222 -#: plinth/templates/base.html:225 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:282 +#: 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:172 plinth/templates/base.html:173 +#: 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:187 -#: plinth/templates/base.html:188 +#: 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:101 +#: 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,76 +9158,91 @@ 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:102 +#: 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:55 -#: plinth/modules/wireguard/templates/wireguard.html:67 -msgid "Not configured yet." -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:59 -#, python-format -msgid "Endpoints for this %(box_name)s:" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:75 -#: plinth/modules/wireguard/templates/wireguard.html:77 -msgid "Start WireGuard Server" -msgstr "" - -#: plinth/modules/wireguard/templates/wireguard.html:81 +#: plinth/modules/wireguard/templates/wireguard.html:87 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:85 +#: plinth/modules/wireguard/templates/wireguard.html:91 #: plinth/modules/wireguard/views.py:59 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:91 +#: 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:93 +#: 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:100 +#: 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:124 +#: plinth/modules/wireguard/templates/wireguard.html:141 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:134 +#: plinth/modules/wireguard/templates/wireguard.html:151 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:138 +#: plinth/modules/wireguard/templates/wireguard.html:155 #: plinth/modules/wireguard/views.py:178 msgid "Add Connection to Server" msgstr "" @@ -9191,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 "" @@ -9226,6 +9339,10 @@ msgstr "" msgid "IP address of this machine:" msgstr "" +#: 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 "" @@ -9274,19 +9391,19 @@ msgstr "" msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:254 +#: plinth/modules/wireguard/views.py:255 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:274 +#: plinth/modules/wireguard/views.py:275 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:286 +#: plinth/modules/wireguard/views.py:287 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:290 +#: plinth/modules/wireguard/views.py:291 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -9447,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 "" @@ -9609,35 +9742,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: plinth/templates/base.html:121 +#: plinth/templates/base.html:122 msgid " Home" msgstr "" -#: plinth/templates/base.html:129 +#: plinth/templates/base.html:130 msgid " Apps" msgstr "" -#: plinth/templates/base.html:138 +#: plinth/templates/base.html:139 msgid " System" msgstr "" -#: plinth/templates/base.html:179 plinth/templates/base.html:180 +#: plinth/templates/base.html:180 plinth/templates/base.html:181 msgid "Change password" msgstr "" -#: plinth/templates/base.html:193 plinth/templates/base.html:194 +#: plinth/templates/base.html:194 plinth/templates/base.html:195 msgid "Shut down" msgstr "" -#: plinth/templates/base.html:204 plinth/templates/base.html:242 +#: plinth/templates/base.html:205 plinth/templates/base.html:243 msgid "Log out" msgstr "" -#: plinth/templates/base.html:213 plinth/templates/base.html:216 +#: plinth/templates/base.html:214 plinth/templates/base.html:217 msgid "Select language" msgstr "" -#: plinth/templates/base.html:231 plinth/templates/base.html:233 +#: plinth/templates/base.html:232 plinth/templates/base.html:234 msgid "Log in" msgstr "" @@ -9730,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 "" @@ -9897,10 +10034,15 @@ msgstr "" 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} " From af70c73f247073df994778ce8090063dc925e879 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 2 Mar 2026 21:35:03 -0500 Subject: [PATCH 125/127] doc: Fetch latest manual Signed-off-by: James Valleroy --- doc/manual/en/ReleaseNotes.raw.wiki | 94 ++++++++++++++++++++++++++ doc/manual/en/Sharing.raw.wiki | 2 +- doc/manual/es/Hardware.raw.wiki | 13 +++- doc/manual/es/PioneerEdition.raw.wiki | 2 +- doc/manual/es/ReleaseNotes.raw.wiki | 94 ++++++++++++++++++++++++++ doc/manual/es/Sharing.raw.wiki | 16 ++--- doc/manual/es/images/libre-crafts.png | Bin 0 -> 83013 bytes 7 files changed, 210 insertions(+), 11 deletions(-) create mode 100644 doc/manual/es/images/libre-crafts.png diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 3aa7b09e4..e5c23ea66 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,100 @@ 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 === diff --git a/doc/manual/en/Sharing.raw.wiki b/doc/manual/en/Sharing.raw.wiki index c552b2a9d..906b938d3 100644 --- a/doc/manual/en/Sharing.raw.wiki +++ b/doc/manual/en/Sharing.raw.wiki @@ -20,7 +20,7 @@ The content can be shared publicly or restricted to the users of listed allowed === Setting Up Shares === - * In Plinth 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. + * 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. 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 3aa7b09e4..e5c23ea66 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,100 @@ 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 === 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 0000000000000000000000000000000000000000..ebd6453490b2ad6be6a1a78134437e4415be0152 GIT binary patch literal 83013 zcmafbcRbaL|Nk+PWM!|AtnBP0n{1K2H%T@jTaul zPbE+$y4ZZ-59n6nO5zAaMbzyJlN<17S~FQSB?Q8g5rOb~i$I*gxBONS2v;ryV%->l z5K2NINF6>ls0zbhV3;aAl|o!2|NYdM7YpCH9 zjzU6=c<@q2UJPCYAtxoS?moHM=;1(h?8$e`-1U#t*ZUS1IynVpSlXlRI=w!5CG>JvF1o75RZ zXu`47wVzCmeebZSnz;5}Nqa3aH8W%AB$Rf2w^=l2=mmP9xPF}j3V$m5@!wb#`55|F zP3PNRnKs?NW~Dv)-^-;2zu1{+eDrlX^6bphcCz|bL`1~ysTWsj?@x1XOpL%fmoCDx77YFG#lbw&nbFZ6w)9o>;KVoufs=}h1gqN51FN54Tp8G{&o=OJ4CJV8}P_7bT0IjXP zwY99*-}^MtH9Vdh_pI~8ZnKLdRk&`9T0M$%PVKeSF43&h=hzjFauJHK<_#?O2qE z7e&t}`f!)`JxbMC?q&1^u6V?CTl}mHH|GwKqVt!?M5M3GJJpxN0asU7H!tq}Ec^Bk zi$*Wpal)3wNxGv`BH*~G{TEY|(Ic`;Ghx4TN$}+|>6Jc>B zE9R@SaFJnSqN6$prNK9~_4TEgi6q!aB)Q1m(#uJ3C$~M``G!_Bf|b!1JU?#|=%&f% zHv+YZI5<9*jG>Q{&&kPQ=@ic!%2a0&Pq4rYK*V;TXAfZ3PDPxadYE&QV`F1~s;?(c zKRfw~0zEMu%VOMHNG9`eDxmXeZ^fo^KP5py;F75%rmmGn1;pNlo}hQ#sF zcZKl+TM*K!&zOmxv5}}2sME?3UTnwxbWe*``29HL}LV^P<7r*?9S9?qs!=PwbuVP&FB|zLEdhPe9n0J z8}L=h*1G1hAbPbZ%6p~JjcgmY5oAQdVh5^DM3p*A<}+ro82Y2e7Gp%;K3u|Z z-8m2H&`NWBv)ZW&lU5A&J44+6JM@^Y&l0`paIjRJ;$>q{)48u05RCY_WnLn9k&8*F zEj!1HzaQ@mD;FlTAa7TwnQd!(`)g55Vb_KnszPlxi3E$kPLCL;=|cUiQPUTryO+qC z{|Vz&O?)({wKLFuT!p-l?KEEDQBkbXvTup&n0eq0Ret*`n6HWVED)t;n4p;@RD#OR zy)*J|3QDca9qYYd{J_A#KFcbd*L2a(Dks>qI1*Jk5{Y#Z9;Gi58_qq7T%--nGOe9@ z6xN=l%|_z0*by;%Dk&)1VvG+j;aGT(C#1(vKC*ErOHWWfwFTGBN%|eVT=!ptjnR@J zJ0a+PC*F}&R(-lZ<{gYpO;K;(zU{tQ(RuZnmtvX{H#oY>{6nv0bl-|9Gtq7~&E?NF zM=CgmiNOTFz)HTe*W&ovV}oPgk7`8WVl&3xf-k#TN}r~TC@H!qJRBS)k48fm7Z(Q= z;k~xqo&9=fC_Momm{A%Hqf9G)QrsNA!7i-|_0OH$!+oF3X?lHod(`gPe@7LjW#oMr zJ2W(uffXd-z7(&8YFXv+MkwuF7W2sxr*Bt7cz)uHHLrv!(Wt0Ow*g;pzTp*1=#Nk# zxQ3Qh6N;ZCEg9i7#LF+a*Xwuu`9t;ZRQUVF66f`gEjQ> zVNfaMrX+m0AJ%Ro5?Ti9>Cwo9uG{*~E`5eaM}0KD>iJ&wW7pQ4M05^hKh5ww->O}j zvirJKW@%+r8!VA&@#J3styqG^C|*Y23Uu%2UQ0M-aPG*-@_97)@(Y{taw;g?3#_xp zHtwxUC-pFn+wv#%TEZ8`YV}(VA}nZm z*TcN&cBs0&#{}m`TRhkQ5}VYiy$=RhNjVMQwisK-S|r!JP(xuP2%)8jpi5J}AKO(P ze5u=U%HbX$DP5p{Gk@Jp#dWz5V>JHz$|GtlqGdX1F*9BYld6e17omB#uO_?{nL}&Z z39nzhFc@5OAv~UWQ)bLdL8C=vaR$Tf_f_e~bFTU#T!-qCzL= zb~qGz5}HE?MIF#W3w?pra~eh~H2VbKs}$@0vig=_bapZ}d&0eWihI~e@qTW&BUlN1>n>E-SQ1u%Ha$wc>kS{4c-7f3SL#Z2>0nOYl3#MJHB-(1Y2xECv zXzVQUa}I)Yd+ybgde9iJiWY)M4Xs`4^?iNU26Gzol+(C%N;H*Y=;7kS;Yzs zn>US~c%L0OAOCUgv)7Omdic=aslG?-xi?i@MPV>a%sjtiB@u6}LhOsi+I~T8_ED-Q zPo8vKU0va&D(0e*a_IYYnVagr5K8M?H+lPbGJKT-Nr%V z(;qI%#yicL&cy;}m+RL}6Gw1=ZZoGTcfPwt5+)5ZEwiHHP8PESK6=}tBW8f#_VzY) z)x^c0Jdwi!Enmv9)$ixq-5sV6c^+U4cgp!G{Noc!0Qi%VLh&UK2DOD*0gXz~u z1l&~p*a)h?C(!X^*Cdt})9Aa?(l0I33hgT9P<-h-(5>bj$XZ)l0chrzlvs4!`;1lh zE?vRzmyzC}R_RS~*E<_Bi2Bju=a-iymZc+2Unh5BqeB5{2&KvJQb-#Z+=ZbJcq_@7 z7?D$7?;(NzcFV5z@m_MDm&}!tK@q#&7jp(VZbIqu!LYYiQAbZ=yPCJ$7B5cs0b5}k z*V;{={mGOJzS4bz${Q*cHv8<`?vLBE$tfvkXFWaPX)7L3kO1zUF~0=_YhI-THwoYc z%~wWid_GkS7dsYiP7$^2iQNE)V5a|E*%$OaTgN zXh8`q+a0s0?s@w+#hdz7V0Gc=F?A~&R+L{huXobDL`x0q z?aMyO(vKgYo>isLeR6)I%J+g20kqQfI2CICp_veY@uqi)nTkMvhlAZ3@8;Q;`u+xjv!=k^skPi|gb#Ny&2jmOpL3UT(p zNls~L=@<=+G^1`j6BCnpp*|G84}~o?lU0BnD`xK{>pry##wg#3ml;%Up<&C%+TY(- zmR9u)Xqgj|ixEsyz6nrVC&BS>T|-etrPW;5=0Q%dy>z52v7gR~EUCS8 zRJhsD5rDt|K!QnKcX>4Bczt=CotJlWVzW23;Ae{{UdKTeZT3QcTZZzy;@6IjcYsO&I~=cmLD-#Mwx(qU53Y~vUZVCrny}ih zby8|NY3KB@n*HwG7cFmGvL1SL7{MY--DiEsPA zA7{XM{_%AG^nxjCfEk7)Fjg3>aNlq}eAtqYpopv;wKzFHT3&e+juVyH)I{U<^{#<| z0o=Ad<@7{Y^Skq{t2;ZLt$3p0Qgkhq<0Eur*rv9&*gj1(KzMESl|RHpXbLv}5nGDw-BRKW&ANkDT9a?Ccn=?74eJQaxJu zE2s>el8=uM2+PXvwAR0W>4mBBJ}R%cZso-Jm+(0^4)m$1zIQ37>U-D~t4l+PiO$8t z(~52KGjA?smKDfU>%15niQYfKIrq3<3>{CLr~tB+f9{O8fWw5dS`o?EXxL|aN-q~c ziwQ^qrV(2p!|MmAPg#l!!c2<3(`yRe44~y&_iLD7WMp(W{b%9g=9X1eMMx5Mqd*-i zhTc0bFK@;7YHRjt3lClV8+$V6A2>gV=P0d|bD6+n;38|p&zLn+2~8Qa)k!DXiE z1SVw)Wx3{(Qtzt6Ml$*uswW};gBm%p#f#Mpwr-dPNV&tZDk(YHgzB)wvTmeZ{4lH- zIDWM3r<|M{0393zsep%n*6P(O88w@|+lDY5;BX%KpQd+S*!D5Ubd38{Y0O#qf+9 zc>ZfaMNkSzl#PMfu(+_W@bvrHNEu6z#Job(lcVvASQU}eN>9BBTQ?>4 zmJv0+n2C_ApK&B287go5s6gLpIrp0WSpIOsJ(WPN={E-AE(|wj_x0& zu5T@zbv_ThfN#R=258G18jze!4&UMB8XN8N;e<=K-bHbK*N!CmG*augDGTWPL7Oe)%s%OVi5 zgt19UNn#+-z$4mC{h33%LtkHC?OcCvTl}|!d!omVys6iRAHeB?nE)eB<_=ke3^a!M zr9`851J+Xfsf`Q*Wg|U5w79VaK$t2kds?9WBZQEte{3um6oRS=Y*nI)^78%$C~qy0 zE(d+rhYRd`fB#OfJK)xr8xdRiLUA!xcym-D8&jlzFU;s7VBcNX_x0XFJ0}hGEZg&I2GOc{OVnBNe-iJaHWizJM$!Vj7azS?uND{d z5UA98ecb;96Y&^&OY-r7ffku0bruC&eJ5$dgy{jnq<0+{$k`Du|48{*hFrps{;6E!zC7e7Kq_4)I_?QJ`N=2F?Jpy8DVPp<6GM?T*6Gc2>ZJOF8m zX&t0BXb)2}Fp)r9>*gjUA^9}4_Mv+TKdjvt`0Jr3XlM!QH;Hdp)c5$w#n6uz^PgOZ z02%{f)Y8jotn_O+zK)nMbtg<4mUt|frSL_C+sSQE&K!#Dlq>t#Jr+70pq#mqpOl>Z zDMZm$O%Pm!{sE-!qp$}7phq|hn_do7c}ziVx<;X&KN$ate3?;VQBHC5{3bbcz`HHR zyZ)vXCsCQtFmZzepR_@1U)|V{%zP%Mq=ci$Nca**gHyU_`dUj@WG0kO42KR{+2P^g z$(o99s4f5PyrEmts^yN0GQtP_lJ8}*SJ&1|nm->Aekzm5Y-Yx8n#Bui4;VA@y*uxa zgtA_0@O5`C5D&o2;^ssZ+w&zsT;lp4ieE>X;nV_jGv*?50Ft8FKkq?3_2pG75b_AP zE-=8Gt$8_kWK>m3+2iGlW!_fqB@!}VF)313!f zw6_7=0vRCO$sY@cN)Vp#vC_$OHwoHB`YGH4}8vp5MReV61`o zo1=CMFdf@DZ?dBM-{_~G#y0L?1tm0ZP1=>2`^xe(s}&G^Gvoxy3z$5Wx!aM7+V{ed zp5RuS=|e_BJ@%pScGJzUVKM}aVeOW!=%>`;^aP*<>pH*LD{=X8Cx7U}PiT00^Cn%` zjW9`MvZJ@Ip>dELZ%-G6n9Q1CPChu9j$G`FnmXQ`*e5;px*Bh877H7(;d_*(3`!>4 zQ47Nb&!G?Qx(mYq2K1>&rP4hf-~5uD5HYG&u6A6dqNqqqg$qJ3&uvLCAHZ$U=ji0N zwZSvM`MJhpWogOv`0;Jf$!n*2EAce0R(CIg9nx2@@!EoVEjd)@G zpcVQXvRf)C^$t2^kdC`)3gLmY1SUuijeo*OTWe_6`;d@Zpiy+pm%6TfAAKoBRSWov zKUJC~zJXyq*fN)$jjjB=9Y`k4)jSP9imbKDCya8MIx-51O0QK(8XKSWg1jpybMwDe z1?ua-VL@4)#v971tYt=T#QUipsGP* zN+4#^{N?9!m%_Lv=S7a1f9Ik&cniYRFxCR5wq(rA?#Fb|a~OT^;r^k>*qYE4n&o$4 zo~F#Sak(Oh3(8;X#f30D;=uC>lq?{qin_Y@S64p3+@L!rB;Ua#ARAa2(6%odyDb+} zURQ@1+w~TJ6`<1G>zprh@SJ{;y5`cVpbr{1Xr{NDKW6x5s{rUEjh}DN%6{>n0ZV-U)KnNSS3xRV?UGRo^8Sc~ z@g34;u)3hv!c#0TiJsmn)?@{Hf{i3_YO4eOEC*#n^~5vI!u{`b;kJ6#4~-l(ac}P@ zpcDFBEYg73^<#05Hly!8KIU9i#wFV)1e0=lT`5BIQX*4z3gC=qW4bD1mpMVR8s%!9 z=;aHT|KHBmi+Wnco)||1arV_Jl$uME&*`6?#RC@!ED_lx6`y~xpdPqy)r^f-rm+00 zRua-=k-q_y;`i@`gS8>-Khmmg?{Fx04~A6kr}i!!ju}~Xsy`{;wH%9P{3AmbohrY> z{4*m{p9A!UO6Q^B;kV1n%aPenqihgGD4RR>FhvHN9sdNHnVI=!0J;rpr(5LYNyY}I z9A?c6w=+&`SG8iRJl-$euf=vpelx4$xIq#yKmzIIR##WWpjx1^0Z&5ngJ(uIe^XF` z$*8FfB2>$V%{}H4G zLW`b9x)s&N+EAY3-=BA2B%fURbnG2@N0Ec8Yx~6KuaV^H$np}kFD6z4zWHdBZi<;I=;CBF-;D0rVzD`@D&Vnr^ zDsygjP`C|c zi6j`@c$opp9EoO4Dh5gj0FWR!LAgH^5^CrPDy*p?)+{0h9ng%M6_rm7qhIO<3-*9* z(c#7z+`Xo5ZV5WXZmzB^rWJEPqwj<0Wt+?zQ zNiu5^b10hvBYw?)4srcb0_et&0%&hQNP)&$g9cIK^vbOKHWak!M7i#qFkoJ2_j`@Mb#n$SgQ3sJtP6#!obpZ(jxpn@$vZC9bl zesbSj>DTQapcv_BO6%Nzv=WOR!foiZA?h%PNJ&k-6V{GICNP5fe2%Kd>z$c=fEtw- zCvc0X5+(M2$f{QZI}s$<>$9?Jti%f>vWKQ-@O54J3rSF$ej4=11tB`)0#DYZzGoYq@xqiyP!Z6 zgEt)nku5sAsOUCl(*-x0H$s87*O9q<$%6HUXC~Z|i|ZprfIji1qlx#fPNJ^KKs7@` z@LyClm>0K$P{C;U&}FW9K&st!{z;!ByQBmsEG!IAlrc*v2m~;CkOB%2S_@!R6ksVq z*1+>D{mu5Hy?H!e!K^3q6wOzoi*S(doa!%(nTgKcq$!Wd`#lJygDdN>+(Yg_6)Z;U zV8D5z%Xe||>$b3qT zzevFO@F5Do9aT16#6$=b z=UXsRd0Lszne1SNco7w(yFVZHtQHw*#{|O{nP~R{D z{V&{F@kCDMSOHJ6BBLerTLngss$~L?9~pYC<=D5IR``a4b{t@af^yZ3CwyC zR#jCYN7T@oxk7tJI)6-6N?>@!f%0|0THo^7eN0pq`JhJ*(?8z_QIIdMtjy-z zKk(!i0MuH6fjvktv{SI;;L<27C!WmHwK%MV!Arvi8h5fKNP9qIUe9ddA*b!CGzX;W4Fz>M+Yy-H|-1EM<7FDRPVlLnoTc90zfYODO~#j zfHvtXI(b7SDSERu7)8JJN65pK^UPiqsbj;1O`@+ z7s{ywHC!K|G+bbNpxF1+#&I)5E`q-oe0FxW5vo3tCI{duiy1sXBrSu7fHH@zUGQUP z&mFip$_;!M)Q$eEMJ|f)pQQg3f*8`Mv%~=)8&B}a5_39Oqz^h5#fq?$5O}Z1`6Xl&#GgLBshlAa0a_u% zPTUkfH-9QlS_LP?q(&EM415&vPU)p8Dku<#!-kpdxY~aYxZM%zeU@NEEVpS5WlG;l zE2y~H41eqdAk)`BJsr^+j8}CFd$^P;s&hgiv2tIDQsAKF7e-vk`k#3dkb+@;TP z6Y88h4)hFGtx~YsAxu}k#I$G86d60Hi_pXw2Pw_6iX7@g(C0!Bj@g7e86P+Jp@2Xz zpiNAg>yu7LXv7KRYN~Q+H&pk65-y;D2)^E?LL>a8Oalt6*FiQ-dzsH6D-qU>Bf3lm z0Tc?0PtY;o>O$c`=0ZwOkCHAL6Z(WI8_6CBrR7`EqmbYVTycMo5q-G(TvPcw(oR_E z%K&}DGEEDlJ%B!KLn@*XAg_X?!Orf;x?_3DJ3{hn@RW_{He3xr)`BoiV_yvHfv9sc zO86fp5-cE#m|M;0X5sSw#h^Qd4UdTD0W;hhZ%{z||KmDl;Qp_RY3~mq^oQ zx~j^r95y3-^n=60mU#y*zoCsoBw`o2+KXCj_D2J8DV!pj{ucNL5p54CBF4*2(9lf5 z`44MH4Qu~FAtI&vwsX&o?gAd7xinV}M&vmiV!6MQ1NGMF4qwIS791p)&C1>~B(1QZjLOPm-&H zqlS^flQu7i3-yDng0?pFZXqClXl^m#BQT(W(r&r6T2?)@ORO~fb@tN625#pGk$jJ3 z7opzp;L$Q8yu6_h`2RRuKpfQjr(RJThi3y(kP-ELHtetYSC_KWb7ymN6V#6de_47p zvkGnWz!pD=Oh1Uvf(M5I?cCMX)mAySq0Xtuk(B_M7QrGzw-N3$1F}}HA4$$aiH!mG zHPUGyxCNF0ARR7_cRYG8(k5sKlyb}W;01vVArtg$RM(s8z~P^8AGQe< z?oHNr18%@-A>%sK9h&vC(zND4HjOWaH35|R5gUtSZvT)8+jp(=#tP;MEfRb#_&X%N z?45b6zHq{lT zOAx3kAX%{Kk(5>28Wph)_SR_=^i0|EkFL>&(t%0?#pYZr&lrm|{lHRMq==BY4|mG? z`g;G&%=b1UCn~4`sDz;`_!|tr&w)KlPQZa}3*osJRtAE$y0rAR?Q|P=T|MT9`J3zYB)IHg{OzfIwcAS9I`8* z>B;bYV4!mhhUpkXU$HgdRUQ;{LngkTnM}wngUf3OO~3_6#_@$yqiQjO!OYZ>nn3U*_CEnZV&S zFQQSaK)7E*DAfA<*RSUfGWxUz5l3iL0PWKK{rwwdviI7-O5vYY2Y5yuwFrb9cn2{5 zp1t%0ml1>qE8;7~-A~&xSvj8IIVIC;WP&bD*)s-IK=d?LwB>Ib{b2He>s0}I@vulr zmpPfQ@Z-l}NV7LL7X!c~+`eGLoGc48g&1@F+`KMy{kraDz)^7m8%sXFC@SN zC|k$n>cSJqXoiDci{$9KvI!Q98QF;s2GCtZLP$QD6)aB{yqDSPfHx1`5~N4M!<6%e zK;}RWV;F{4mcWiU?Z?YApQ4T9J^QxTLCF}_{_nD-rKOWW4(r1_G}2~}Sv)-xN(Edm z@$uD3?~Mx4@5<2yXt=&QpZHg=t5_zI2rmpd1b>LRF~*uyqZv4- zuS6^7?e$CI-6IGoH(Pq-^ML2usFT7}dU|>X$d%n~a_PCtHc&y-9)IsZR$A!L#)_co-CD@qf!z`wwZVjl)d%#JFwj*Q4mmZ5IADAjvAI$6 zSj6H2U?Uv7W>GwG2_`x?xga5BYZi)^>)yBJr9eiJmGhE`@4YaU!yO$Qtn8^*Fu2Gj zecSL)X_?`(<})i__+bzS6gu<#EUpipxP}ZI4c|~&sCpsF9QM-I)_meKbLiOVspb$` zvf?{n}O6fBD6B(Z5vtv@en71@_5aRb2bf?1Mn2U3K5+i)RKd z#kp05W$ZfoYG}%k^BAyxJG2G{gBW)*5vP9L+`ea{?;*h9_sHb0$mt@@wP2}5dDBzi zHw7R^dk7PRc)^NL($C)aGImH{g3x}ms#|paGG4Rfh{rrdB0ILgoe&wiHgCDDuoY9F z9%@l!^CTN`bCQzCSlY`dHj*&ldbYMMRuxIsRV6^;&{9MJD#MvM1qSm`bd&2%?O^tu2-J_*Pg#=>X&bCrw?I*BON&3Tc+g zBi-~xRV|}V_a~_6HcOwKWw(u7d>%zg3R7F@#DaCxw_^6&2&Sr&j*O1sLR=SnxaWEI z5;u$-!ALXqazKdT)R}bTeftVG?!}U0#aTGFZ9#^=A^Wefri z2tIdU*ieHUwW+HHYZWg65_X?88gc^N&E^A7gg@1yQ`QARTtCc-lXZJ|S!#GoLrG7) z34M6^QD_!dUoZ>|WV{Z<1Brrm(+5a0(D^9x&CyWC)j<+QdDEif#mOG&%JTA2?$C=U zfD04m?>-R%ZXKAK0vGWYy`+GRxWR)_)bb+#;w)xlgbmIH2rUedpBN3P_PO-joN1(l z>7U49VA{B5W2o`UUiOqXtxo_XrJe(GD zQ!wQ9=Pbgz&T#ucL*4z?jf{e#Y7Y`YS4Dv#%1I>M0%=(?YtC%OxYrqMaMhVPT%SyX zC60s;XXob=;Z;DqkrNr@$n)bJE5mOBsS6O!Dt|e~fwYuhMa4XbfqMuThM@Z{ZI#sL z5p+s?kFArCn{I+sKsp3)sfFJIN#&Z=g=_@u$FN7DzIH1^4AoI;iDf3hnoaM!5_B zu6y=NXjmQL&q2;?)ZlUp83XFIZ0+g62CNMd7w|r$t_jU{R7L?WTctf@W@?^9mVK96b^k&aUpz8r4PTX@Gi6ErsNli{}0Xr1#S-2lzl>jK)Lzw!I zUAkB@x?+IX`H%Ts*Q1EIuEC~QS|8}&#Ocgvi-NdNZL=540{7$yUdlduY2c9_Y?xnu zcNB!6@0D<@Z3*Mp{S>JfdRP@>oT6(@0h`Cmbb`9B1@(hQ|Ko z+dTBV&Mhg~TI%!Oc5WhVFUMoMc@CAADgt|USH@0G|K3n_dPmNby9~jU(SrmSl(8=3 zUi|>s2IcnxP4Wn@>}c=-H`mr$Agsc}m6;&z8Mfl|C_Ey<1Q0>brf#pV<__|Z;mVp+ zXln=KT37?Q0}z3Rh6YBVF?%w)_6Svqavm~J1&3bOW1gzZ1Plv;6Ohq<5AsmQN?~pG z)mK_f0GjRaGQjtNqqWW>`0V23k;yKou}|6Affj~wEt(k$#xFX?z?k5fVH_gJB8T1t zI$;0saN97BO*1&v#Pz5-l`c_`STl2RAyUqZwXm>Be+1?%z(jxq&@`UT-H;;9h8MG- zF#e_XLdQT)FANryK$mtSFKe1?gzdg0866_&+!cnUEZNaf&4faX5lDuLG{Zy-|rIfnig zY&rF$iKg~uJ!1xs8mzZJj-7YA73DO$M?=nm03pQ}PL0>{8Z5-Ntyht+B3@%FjMEBVUL(6IgH0GbJ3jdjM%J7VvcSb1O=IhmM>BW1Ognj(R(p z7QW&ETz#hBN%b-yOYwudBTIh4(hCqk6gc$_#dJ70ziJhV25#&9(l5vkb+=T*`G9g_ zQ;0Pwy6%;lkpbqXH1uO0T&Did1&!+Z>VelbX73BXp4y>TkMt#hV9eeOl8P;ZqY?$< zyH=Bo3EQh8IJ}VA>#O6P^MNQI7YM=m1nvzgaNek#*j$9Xd&;1i=Q&%%_(dafkT6 z(z?GPzrffyXpW4Not~arRDFR0h7`mEzxA557nOxr`$7ymO){G^RWQJLwoP*#SnY)E z(jJ9`N=YHZEWP~lc&Mv;w>lk>+otpcCPNl-8*6*+NeaXkr|6b0SD1>hrZQ!;u(w); z=8piwvXZ1fRNw#88&daza%oPEEJgS9r@RyvV%hv0uj}=D&THtjJ`HgaGu^5yFn(&L zpTC*_FOZ(3sUFuJmh}@6Q~Gdk&Adof`W}n5YVF<2kIMZm#`-DtG84i&426`B^Pge( z5fi<*2BZM$5_DHRgAX+fN;Ob-kcp0=f9UCFjTsYFkin33YgLHg?x$SbVa^_#SDeJG z&;Ls|Ic|-FN0yBQoc1@+2dB2mGoxz5LRbHfk zNm%oB+73xPkQzIv_h88WW*Ls_jkY#ybSZ;Me)%$xIdr_%ewO?E2lOM`=>}p5HkUOX zQDl?m&wb9d9>y4lyq!b6{z;dL4^#lUv?@{`Id!hrN4|h7MnxhRnd(AUuz~=a$;L2J zVV#*Jmgg1Bb|eacLfQLwm3VLU?FI%}DbcW-*Y2D+>=FaiZ?!R4|2qk@nSzpXFXQ?& z0~@hc@SH_K1ap1s_BX`q63W+q9B<;@6?zL%77Ro1n8#~glES%v58S?L)GDX)FGemi zmV0Eda+%p!s-ZSAk38QRjNClHsDnfwaz!|)=HA+CSi(?KCF2H55>qN3TB>-f*t zn~+v%2K;Z!PZ`^bJY1w*0G=sN{1>&G|Ca>-Imv>Y&0uE);l@W%(%=CKAstEB!wuPA z-wS9*`}?`RS@orlLGJ9F0mpb&Z*M(BKIb1NtW$^->aV*9!N`X93Ly`4e=!7nfxdSb zLbzMPtG=s=awIb;8o8*Q4ZDfRq+ogGOSFGM!Z7lYN)r&XEqh-|kh;6foszqPJs;DT zB*P#--CubqDheuO7h^6~05U-Yeu3A9-Yjb0K5|vj5V3Cd`3G4<+1l1tI}{vjpJRaH z2C4x}6v)@f#=Pb9n!gQRI*?FfGX-WI2IY9aa4bpamrxF7R2Cu`ov_&nX4xL7GDrss z>T~Bywjr7o>Qm3%g$hASODk9f2$awH(UbdN3S_HhWVi=HzM~VLzw@JiaG_?9`vIgp zR_6|}*u+cz)OHAMhd>|-F5_~HMl|cQpEe5hN9DJLs}3kBDb1do(JL)_P(uhGnN^{n zpn#2wAPX;MVwSaZdOh&8LeyDmY-h9}NDFaedbyMSV3D_gM?Z@Crmuy-%Hx|D2m>GE zbe)3q2Fa+{)q#VMw8yVaAy|O?kO9^JjarSNCz4Z?)YQn}F{nN8sMI#DCr=`P?*VRK zs2MXf<1im_32DIpLeQ+){cZSMlGF2F7U(kLb&mHHJ^`YFK0)n1hq5bt{dcDEO%$Ji zzzQF(8_wR*l>LS%xbiN@P?WEgo!xd5Q>+{-c_bkBk3z0k$i+}#O%R-dE+&#;l+df* z=U;}=o=Tisc<4RSj`k}Kz$bE1M^_pIcztD3sn)^4P(j%4Lh4YKDaA*)v|^vX?>Mjg zHu3aK;S=d+zVi#+Rp>6L9>|<(?!LNJ+4>^LDxeb~89s9;B!!Bb(tKvN+<>Z+z@0O; zm6&3f$*?syM+;Zhgg+HbrDR7;Vq;L}KtKb{?YCbFy(Fsz>rf_=(pzTd8QM@_!`<%& zhzB-s*t_2sHWJ8k3W3oJN?qAl_bLV|UW(@9M~}L&SVp8p(^u}TCJ3qxrowna?l5)5 zz9fF}th2Kdg5)}G1xM~0v%a3w1l9mgS~m{4@fjmic?aP}L2j6R9QqrIoxa$zw(#bBZ!KUm|xT%e||WsJh5O;AC+B8#2JEr%`3%$(B6 zwrofuL7GTOV`R-$Hg8ZiHwI7z#Hx^uCxKmh#NPez2-qX+6Q(|wHud&&gvbOYn%kWw{oF4W}1_m=9E zol|K%hV3cn<=xB_S!%01)^E&1v%bjFhXxp8fQx(RdN_B(XTk;5^WHCuWCKD6W8Rxx z4XZmgLll*c>fPBOzoTin-Xw9{qu<~r!w#R#TYUB6g-I{Hji>yy!za6#@~KUD?`-0< zGkOr1uU0xQN*7TSuA6+DCzPz(M6V_9HY}Q#o~Zf!IhwR8GU4wcgabwNd++bx&(7A? ztC>$}ym>D>DD5vs#gAU6(7}3NzDT?xUkJvYJR1oQlwxG%7wBTJ3yKTTeBhluK?dwj z-v_u_YEq2LM#Y{LsLwgoYm>%;5;C>{AvstlwnSS*7f1GZpeQ6Jz0j_^02yN-U6|PXTf>L%Kp97UhY#|oUB1vMMXSCyh3_8wphqHD~PV_w;JoCW=GH8Aq!V%+?Vq050hYTq3f1G zgwHDE4M7+Zz?5x9M`!0mSiBdd?4}WXU_mr1SF#ee;(LW0#b;ac7Tn1I@Om0f;DaEJ zQBWG2Z5waCn|#*681OO7lv2LpydVBjhri29b+k!htEP z^9~|A#{9_-MIQc6I6VjmZ8yb7_a{eJ9h4kXEE_|r0nX0O;X;l=X`uSRo`@NzQp3BE z_R{q>>m1@7q5mz}0HkX8`W2Qwe;$FKr8-e%r6Q87_{D2Kb@ti{Mt-8i+u5DYRQvDs#l+Ee@{_p@ z`9omG1JT@^ZOS;TeIrbb{2Uob;|IdyAUCevBEDrIFU@r5C?FtkKUx+UHtVL!2Ur4> z;ab$go`Q14BMrxh-fDic^`2GT&f^DaS#Din-+or!-T7@Q@G2(vg&)6c0Eaz(wOA9) zE0pUKtZ$gQw6Au(Wf$9&H`FWHJYw?=;+SIy9>iqHIx+=UIUGgsd?f$fa~vqrdCWuc z%W1*q*%>z`o5DYyKH)z2D3^~L`eUx1NXKRhnO)skEU~0`vafF8x-0BXZ2~r)vA-=PcTbWq8vS&+h z8geG{i?tyN)=J=Hm>>a?_xYE<^-Bxp9gB`ggT%+4i%k20H2K-l)|4YabrC6PR|B6G z%Z_A4#(S(E?omvAo>L_+9kF?In?64e5_qtcM^*|^od=}VVjb(1Dgw6D1YPK&R!y@} zp`lpR12M{Zuuk<%Uq8IeYl#&JQBj-nuL#>Y;KU<0;Q)R^Fa$aVCVYSiWDerviD6y? za7KdK1=o0-2k#mAht1P6GM*Y5QX|c^^>rIio#8`}xRlRp%Diy^BJ_+9Gt5nB`<5#5 zkNFUL!J@!LH1kSgUg|HoA;6Y`V838TJ({+w!wmv>roMWS-SAwx! z)}YJ4jI*2h77|9v`2#ZbSy`w{OG`0(boI8EUxaW(i#*~t`W~QV2GPT3Lx2zkQv~J^ zq^z?a%94p4kHVQ=CU$9fz9!wI$xMXQSgbC7{E&!?i*v~P_!bj#7xD4&1dm>FEO`6) zh=660+@|tT`3Jk)rCHTP|L~tSGEQ;U1=lshm6eq{xWSp4MG!i5=f!@+LmnXmF0#7D z|D)->k$qLaaBYS1fBxI*TCCc8TvO~(A*`z3ukd;IOMT9gcM3L3+ z{(OIa-`nl{ac<`nuh(;2kL$Xx%UoLe^h}Kl!$J>7Bx#=8NByYxzK`#A-Elpv-SOfs z3**#Io2AEzeXV_;9bE$lqYOR28Z8#{gg{r=f9dOjyDVGjTMt}XXw7$v2j{`Kpuj5*e{!RF|mJm&-icW7P(9|qES^c=L zYsMn-pYnWfb5|o#xqMj;r;?%huBSg?Fr-3$6$H0QyLr{^c*<_Z+%mVby9rZWrknu7 z_0PsC(&-tspsOA;9)6R-{p0Ylcs#^{pI(2`%&t|}#&r811(WxSxDj!lj0j_n z>_^imJ0K3}?ZhuXp`0!Zk0;+0VWh(IrzEBRQ(!4tqm7hx?A7lWEuCJ$?~@eas)3EdIt*9)}x*3-!ArBBW5LATuPM$wn>DOLSG)V&PjyHxy75G4er$fWI<$eOg0oO`2`#pKSO~ zu7>S#Tc&%Jqgw>TnaHicyMRezNi(^}3GWVC2&r)&!&nV+ZGHxh7aA2go2S0j@NNeB`?H=+k`qp)BECa&GY1XF=@^325;BeRAK;J zO%(t_9r1Aj>;rUSePez+oT*z7c%0ngVz8G)jLOaSPk!PlJsGj$2&Y?G>f%x>GReb( zM@r_&M7uD|yBI`<8maWgL+)jcazbsbH1Ps18$msv?Kef(9H?n%e2nPyB#Os&=U#Jn z7lCpILv{a95AFjYmxfoHA7CL6a)H%EgFnTQ8f(h{243D#Y+wJ4GYDoFLR?l_Q9+p7 zB}IGh_}ti6GU?G^Lm1a?X$-xwHdzl?Y@@iNlc*!-EW>NZo^av)ugG=>_>veSBO{v= z&z?QIgg~b=fM6iNEOc5Ai3v1$t~ZcS=WTMEZmSrVk%ETfDQucvf99=Y)#W!1#P@T6 zH_6ZEC4LAr0z8p8d*?qq+(+pA@J$gnb!ES7(%A!pRx9ujUVNZA{_E6Z-~T_#;foFx zJ&(Go(yychb(yv~NP8X7Nq+tDBNFn$xHOweO~^Be_?5Ayixi;Tg}WtH?1DI_%SX)* zl)b@=>%BZ{5TxnEZFcI^jgsuERC9B4P_HISiSCZ$y%j5bbrh0)cyd`ZDR+`uojRrA z?JZ5ir9_0qz%(lL&R`+E)G?KXPT3z;a!mVe5ak0ItbOo+JfVvWtp-|bsCWODTatD8 zpZtzn?+BKga9I9n+v<4y?8Ccv@BVHr1PA|KReH(^fv2)**_+|r(FmI&f`p)`@tq%O zEAjIU|6b2%-g-_@jC6XTWkUj=DMM33wg`|Dqy?x%0sl58w2Y1E9BVTQn{J(BU8B6R zAE7(K5)zuw(t>`pu&`iJLlzN1|AY<=nb4>=y%96}h-4s&P&aQrW8*UY zpiPCg;7oyMDlhq&O#SC()#;~$SaHh~OB7<1QFgPmc{@cpXzJU|RaJLvPwv|$!T%Ib z$ME#xB-6e!bQQkldZ;QQBB29crpW~>GnF^$mD}+d1ftn%RqJ&ALaW?~*AHS`BU96M zb8^<|0T|$k<`Ds1uNzBa)1GvJf5Uhxt*97_3sbxE7-vHJXCH_mARuBK}Q+u6Oex~*VlD7&-ANd}&zspsaX z1Jk-IS5PZIOvD<+e7!6>RXJm*>*s|Bnc*kpBkmHZB;F2Fl88wSfx`~=GiK`Si8T9? zt>OmsWS=sdJEBt}u_D#`&e>boBUM;fI3sb-T!I{)#Hg<6PjnyOP#07w92k1z^+NET z>%bSPs4&zzJae;Wjf%B~}f?kUe7iO4<_XyF^eG<>AZ3UP3sbmQwZ^G|CO7|-&gR9LV0bidpQ#2&LwFUTKze>g4DIS3i2h28c;0M3a|}^5x1KQ^UOa`V>RIb%`k{b#I@u5My8D+H4?PHpyy^#UH`ps0|rlG119K|Qz?>l}!4 zNKXbW@JLKnokQ3@-=AYWIfm?VS+~@c85f~A#$A4_okXHiJ$zBnkd-f%q2t6+hroz) zCQ`Xyj<+-59)nW;siVGsqPER`Qu^?lH}v1GV0;1i{(`OB`HaY~42@xNwhdnLc%1)e zVb968B(rbYeXXHum28uYh#YDYXCo0w)6LG)i1s*=7FA~?;&3)*oBY1Zt@LzQ;GpcQ zsjDN!=tDB{@qb<$diLW<4-GtI9xb41gG5G03vh+_=k5u#$v7(!$KgHM`?*#>k<6dN zD12yP6oAS~oe85`R9FIn{LfrH4Fu`}&gMebi1i)FLR8 zRPgviR+0DC104GvG}k`8khxS3#{)FQyntvVgr#Ei1(nid`%>`Tn-~C~^D7r%R0d9Z zSN(d3wgPFUEqQ}Yf3q1|i`GgRU_Thl+!|~yotq2$m>c~+tE4k4Z(2NjKjFe6VWr+0 zq6fb3WWS*a{e5nJe%M~!ZvJRZ#p=q+rF!0VT5n|$BO3(Oj-LmX4iq3auVqJhl{r|x z2TJ^(6B~1T+H!JtJv(-Qh5|MA*YYojZld89wD6%@;jSa^;ObQo8A*C}79JDbNP2-; zdi)IgGiS&k>!&sc$ldc>_^Am=NrS144HXH1ArP}_Xu9v+yO%rYMuY~DALC!@uWA$) zE1py_^~QXI!|M5&3J7xzn+5K%9uvZdz$z`UXO{ku?EC)bHMmQIZZqeVmkeSH3@GIH z@KI42nVEIGrrccx6AnhmNK}GB{Eo|>9w!*<06*9Z3$y+bwqODTS1E02VF6(cR1Rp7 zVfiCRCl20PmnOJ(%6%&Q>jOc~sMWciX7dW}%T5?^K)qPKU8M|HUk3W99xO>ZKQl9P z78c8YJS`z;Qi$iF9YPJs(TG*5npFm;i%Sj~6TQvNM>&*(ICP7WA1_8wDq*rTDt}8H zMi-<8Gh>;l56;8pgpn5T4YU%8CA3Heo*$_tlYFv5k1m$zi2@9gc=@w`BKrj<37m+) zAzrBJ!_`aZRdD2^lf>g^KBX>s>sjjEWRW@u)}W1o(vLNpyC4M-Sh6-|Z_CuP zkzafa@e36d)OHE`|NVU#toz&~JwwlHri_np0RmC!8aUO_Tbjhr7MZ0lh!J`c(p2%B z8=3_upU(-72EmYy_Vyv?7L@k<%IhgyX#J=3+6%)IDm@VfKxFt}*oNLz@mR1%?Jj9H zQBhF>cmieqaTCWAfeI0tL_D&P3u=qAKeQ=Fmj;t*Cp^P|0a$2Yl_OZZ1gh4ctw-ur zVpD03a>ZuCgClPUOFjM;zEaBHe$4_p0Q5(x_Ur+MFT|=X{Bxi8I<#%-8XCKV*x}*m z>m#JEpyE3&4jhaA^~;CAvF;sbqVMTArK-=-js(ZS_wT8|c|)*||IKL+0ArMCo=_2< z;=A(IzUXwYMbWxHS%t#P5)vjH${s+GN%);X3m~j->q*FNbj=%AMAJO76vDrN;u5j* z|IAbzI`jR{RuzZE`q8P<7Dz`3h6x%SQ8BU6sS9{3U`FzTi-CYZKWB`n7IE{@XD1x^ zFUqv!1P|@*#h5)qRxmJ6A)X0d*~CUu=joIAJ68}L2*g_$F%fuGi04znL9gN^$8Z!=;1jH6dFWXu=B#ZRDj$u%yUH5U1qE#{T3ZSbAJ3$ zB>1+G1HLc4dd|x3^CucASe{^)*$iskiT;J<(MQ08pf?C&fznB>H5<(&l&p|h^UI1* zZI9Ae;wW}~d4~|du=|)cRa%r2T?!&)AWH%KqTRwLccFuXGge(nK_Lb_3(bl9@?aT( z=qPQkojLleo6qa1Y*fM69e%y!ZY8(2sw{jIJf_oM)55-~sQj&2tg6PxykdH18tv;-!20vPj( z+|B32<#*c6^oo1MYE%AkWDz3v4ujZAW+X|bzZ(jIYjVH9ZY1m zM%)VM@2oWn2nbxcQ879)LU;^>8Iwzs)SoG+Qb&BC|EYVZRQP1x7ww2^5K;z9kni%~ zjvZgdQF~rDj#Xe+H;NQ;6J}SmY1u;@DQ!$lo((gTQDx=>b=4*flBsoX38&^3OFVbm zBUt83e8nhxyg-$R?-Pc@*Z6W5~(c}*j;^I#|8e~3@kO26q z{cijDn97{M2FVL&k@d%d4woihZ|s!6aW&@PvWjaBI@|ID7)#UPZ>LKPoO^eWBx^dV z^YwC&;hj4r?Lwo12W{xc@=ZG7UIW5`@d-~E*bQ*CguVpnT`20r0CrxR?yvQ{F2m`Y zO665mH%}F6JE`;%qaQp-FdoM4Jtn+nOs@Xm%G7VSd!ojL-G|<}$^NgguC7k^q8EAk z>Yq+mOUlCk(*lH74Z7LaT8*5#&gjBu)KgPfUvHY+pIBYd$SR^H^oZ^9UCNWiO=hU& zAY5NG=F%Hdhd7jWra`*ovm2e6mOI;kjG%q18wu%k7Hwbt^(#@8e9$UY z#1^1)k9u+*hw(4{6P{xthOUXa!5$BF$Yt}#oiIM3gj(CGX1H+EhM@I<2J>Ed`QN)n zByT{9-4=OGxiB!kXt`hVuNJDZ&gFzD=Uf-t8Pue;$aDPA0 zbMy!zd4Lcw;Sc~f1wo@9c0z9`(92A^pi`(adQdR{AQlwtL@HmbAE`z$FQ?A@>V`BL z57`3b@~dz^y}^!lD)S2{2E3-)x<}zf0J#nX0Fg6!&=__Fo8G$H8X3sk)fe=fTs>;5l762_wS9Yth$S( z8Exwx|GmE^A~rBEpoQb=)~#FeX|_4n|8qZgE)t>%RMQV;alJg!rbW-$Pt}7q0AYa9 z$x*}^%{;A8 zDKi2H0VxG%r-3J8tXKH zmhb%{$X>p9VUM=Rzg)I-iTD%QC3HSztX8CQTu2{6$z`N`9#qcKmI8Xk)z za2*_CICkiNdi{BxyCJ}_5x!4pQl#M02!S-=>c~=P7&j&!^GoI?0k;FyFetXftXwA+ z&{V!h|7|XVtwp9r1RBh-Jx{m>vu>Gr;4pR&L>89Ap*biFZoY{>YP)2YW&`5N+MQMN z{7t+>1aAS|E&yEYLhzf-bTzWJj$NGy&LQ*svopj~sTO)vXh;bG>b-lSU?;edlYRHZ zG(!2FqeUdL3VJ^ASM8^&S}}wNRr43WVsYKSx0a_n3CHZ|t?!n};+7l-_^9M!2Jp%t zx+ejA3}Q4ecwwR-xIrQu3}K510QWWg)U`!!b)*p<&BY?gz}SCV4BtP`8wRhxo~2;s zB@}KwXj+(S2Uk8`TW~;(&RFD@_>155Ud$Mufii7=w`_fe=uXTMFk&_ZpgG3T)VZm~e^Hb`5*Qi0<+3`b`XDp7xsi*g6J1b5G*CpsC z2>xW*_NLeEq=0;g6U`|w;i+7$RpF_V5qIH*n}S#tpeu&5fP?60p^5~1kM9CI>`76XMWDg&%FS3>Rb!>bC+9N0&x@1g6Guj6QIvQ>Xs z=H{*aEE2k4)NhOv*N2&&WI;M_k4guHUHXb#-NYe(HgF7tZ3Li)V$0OXZK(f=pGlDF zZ#~kacz!<2Ogqas8WfXDk*YgSD>PyZ7@CSNKCe(_tF+J9PwaxFPkTv9 zs-2RYODPARC~ao-tNgrOdKrwnYEYry1;^`?+VI2aXiN3_3tf;pt1u<)ujOUL7HotpaCl zFZ)aui6>V{D((07Yy!vjFt~TD`;x1_zjZQGoOwhBD-$E5O3CZm8-Yb|x7d(fY<-H7UXk3$dK17D`T%#POFToN#NbHKhGO8t}2*$Om_UYg+U; z-;%sC4`-LjIq7z0R;f#08Pu6z;@CFgX1#bBHQrfCvBu7D| zhQpBNIQpn?+RqW1-n5^)KY4jABJ~b#LLveS$6y~*PoJr$dbRPXQwJ%9 z^Z$t)xGF0hI#Y?6smko!g?_u0szOu1pWn=TKw>PeX%>?H! zhzs;J%~ycV$qO-0rhFILH^$CAdmLV`@$+4n+_+R$j$-OGwzd{o68d{8_3r(Lur*_P zLyyXTX1@B=WBF@a>%S=&!k>73Iu4cC?K}n~xP6-Hj1Q=bAAdTa#`2Qpe!jG1+WMuT z*h_Rt*WN=VgWHM&QPqN5&3&{u8EF%g5QhXz4GHG|6qmcMetHNtI(%1@dW3{7I*vTP zA_?^gP@XfV?d+;@sWXo<3yU#VYpq(sTkwCu5R1*#_#1Hep-G#3euMqaIPKjiDRsxA zwEu-3wQaCD2m#{g*du5OV1h(kGxD<2U-frro_Mg#eB-Eerar+gVyHyjCNl8fzTJfz z^@?hjI9)#NHz(eu7DNL; z1YL{7jZfqW-Ts9Ow|_j<2>ys?9THV&fa`4t%#|RG@RFdhXkzuPrccXuICt(Kx<^6| z=y@IFE%ANWZU8PJkr^!>O5kRF*70qzXs)ul`l1))B=%8S{{D(c=Val`{eI(PrS=DU zivQ@Rqjnwy;Ev`A55fr8qa1Ji;p8W9_07gdU>yb5BxHaoeKt7K{{P5ZOQO*}6 z*S0tR7Hjj%sQs%No`e6)+rr!FqQt`fikCquqdr!(cNm)Pq;@8nEv)~ZBWxbYwG#_k za3Qp8|E{jj5%T^e{DGN=^qEZ0NdhP;t*UbA3ILFa;~pHrpVmL`&r*Q!`pb=6D&5}hvQU3W$zW6gx+Qf60~!NjPf1a+K#ycnE?Uc+h07Q^TAhgf zGgmgS@`e?%9sp=gEp;Q@^nF$~(NN{gAJ#kD3k6`N{#4VKY&BG;o1DjbU+K%UAD{6m zHW4}BICNcX z2;iurJF3ReedcG?+KJuFP2SVwy?uSgCbnVSHUwYo=H~X4aPr}FhZ1M3lWyYsc)-WT zq%96SGJt~cfVxJ}@ZcW+eZ4gJqATK{ddPNN`u%IZ6d z4BiACRSsLsT(A4ZxU7h5Lxjl!dI`s_3eF;fmI~Q_W!2RQhmU@$p5iwe%!Iyg3N^*b z&Q4Q-!(}bp%mAkc;8TLTMBwSEmZ~P^ZxD?To&QVy-O&Z!;ux5asMm!~+e$sTpPY7r zRmZO^UYtq+uXwYaJiI2iV@x!g zU;X}ld0XhzLo_w0!$4yc**WijE4w3jz6PmYFze3S+NP(Or+Hl)n->$iReN7T{dh0{ z3iKg0j~?}=?J-`D*{6H2A}oxQJKSJkgqq)+T&@d*`DkMdn}buG+C+2)b$;f5a*7&z zI&ca>V~{Pa`IaV7LVyA{7LAmHY^{hGx#f4uZ~EJ>o2z5=e>UM3Tc`iC#<7F@UA zZ9OBuPXqcAId=nLyzlj#@^gN~FRG~SY{eR@EHlx!)R%Xa$toeriQvK>{n*%5u<(1) zFRWy8O6~52+Z$?6uSv0VU?TZH+3<*BPWKCS8=-qla*(?u^Tusoe{>r$Y|VM^hKG%z zc?0W>3g|r@Do^eZn;MJNUA`Q;*c)b3i2)vT)R#^hGc)A5h2ccWrU8ZHzkT$e(@;)4 zEBen4@b<0`BTA5dYGz@9&TvLTGg7#3uZQ0{6fKHPbV>)kZ^Yiyh z$&B$#kR7Q|cP9Xk*CS{&*xwjU=0_R^?V9=xIA}CIm4#|5xWr79&=8Hgn7q_K5>&~M~8K`|zAn0+ju<8Cs02KYV4IhkA0WtZ9pD7zM(`lig=cCr z)b$KA*)I2^GGwah$vg*7yF}X#%b0h4ENQ|>0DT}WY!`Ui^MFdsk4WFLMmEYPDA^$J zfh@xz+w*~ttFOH3jbyls?j-EIubTc+y_I-9ENnqi zWRN>3eb{L~+oilMjSNNC0RF!WkHcE^$n|6)>WPLa-Tw0Bv`&(pj$Dw2p8mH!Y(1_a zX)12sIjRCVDnx1EwqQLSdGqee=k_1o%guSp>jlckF@fxR&rr>G%Xa5sFwF?bw{7-I zI#mgJoLx6yYwolbXce3m{JJ8wJ9vJPyH~vi%`g&|5ay4td$H=~Ft{5S0SIwqJoKOz zWu#gQ3=-ax*690#?R9s@^)F@ZhMyKqqotLUB$iCZzekt45GN$=x_D|`HqZpZpG0gh z0drF*%lLT1?7it3#u1Ld<0}=Ar$HGBux|?IybLml0k8|4DR`K_DL_vNScX7304zT- z`ewg@SeKqQgX-Z6iu+HP{a~dgM=qHvP+xT3;IDx~;`t}mXCQ3P+p=C{_^MF-FO1-L zgc11t40}5?L?Kr0+<&@*APYZ!w2Sprw7hWKOb_=9?eUGs!%%z!j3 zWp6zIYBXaF5e_d;XJK7|;o)KL>F0Z6-<>o&8GD1JcZF#3@Bq9_b{~_=93Ojhd5>N7 zegKPi%A6!UdRw5xfF;{6=!x*1+`pFbdjE?nWj`jpCoe=;{xW({2#33i_B%_F5Qox| zAB=9hAW}|r?ijVWaz79DZio@eGfVk}?)U}<9)Kx{cw>;A&!1-OD+l!*1^RFJ7@l*3 zPeQuMg-iI3Xt{G68#8KsmNuLZ?ZhLAajHpG=jUdRI{n$fe)lFY%Rpw)Pdt81kpyDl ze#hk>?;Fk%7?c`q{xvJuSP?^sP&EPx29ngnBjEBZ|6}$W8`-=J8bbN=`Li>@qJ91T z-BDUg{tFd$;4t;ho-pnF?$fjg3@@*tAuVvw>$2m?HzV!&i#;+W%Zj#5aCZr6{ZRLUBYYV4nqRYpM(c!t;?>3Rp zgEhJb-cpwz-ou?32)dtP*|?nbbis}NNU_FW!x*AF|64u5a!C8Nj%$OB^`N>R%V+~0 zd|#E4^wb~sCFGOcJi+Ta+v=x&!D=~9%Iv_&S67(zRO*6Y?5TJ}_tqO*9?|ook|oKG z`1BZSFtO|%VmLS!V{;4620-u69VlD-I8B7*>)d>Hv`OT1hh0AzvyyY{pH88ivCa>l zCO;o{WG#s&Y+sw&7|P?5Z~Ll5>C3HM0@MkTTrAo+G&1k9kCNZV+;oK%AQT9z#j8)6 z->K!%ZthTioIiM7mY%xMG^fs8hF16eN=e&uLs}Ln3$iDx^Vj8u?IwC} zt_00gPi^G&R^fpsYMhn$rYpb00s@^nZ+$gg>XD6YU(r_8)Zxi^O;`TvHp$rkTR5wA{<8SjO#dJvP zR$3H5`+!cNxu?uja=lqFMJEbp$liemS00a3E6#lWqFOST2W2l{qR*W;)dINQ+~@1z zKexN?9MV(pa3ewVIJ!FsDxrBe+#bVooHb3mup~-ImD;X4{R#Q*`oiZ4qn<8moQ^kQ zC}?WsV%Tksj7ZY^B0)2^1hdIG)mk;mGWB^*DZXCMzpU1)ay3deDw<{lNIN?4r5!4? zalrOuS5OEC>hr?~K{@~@ODuG?GdJIb$UcWduYPwPW1-ZN*NPBhimC3x0X_0k8WP0U zC;c@Psjs%5YLnX^{I{MvWW#~N$e!Qu)KpV+yF(TAH=|3B$LEu>^yHgcT5jS}kD`bJ z`q}Dh-RvvIzh`11g};4sd}8as*g{!=Vs@02Y`*fnFZ60GKs)jO0moqIx9SuSP3kbc^HVWRmr%9!0p*o@ zkZ}!2HWD?wPKDYB(nS*e@vi6n8AYt(MI~MeTq&(A%OH&`+DcY^}K6iINVU@Ph=nMc@YAIAF(9{ zFBQ=uo%zmNDfu5?2^As7M^6q>a3|i85QCIOLRkZPqY*PdK)P!xF|_*fj2Z)H@!#;L zoPPv6IPef2@QYtg0Dg1uyhQDBV_o7Zv$EO@Puhvk0ShO4CY23CioU2C8Dnt;m|P_P z0AdMH%IVNerg{6h$hl&~!ta7<2vgZ*R2bB=Ok8w-FYBF*_Doc}2;r+`@NdiHzos); zqcC&<4hF6p%Qa`g@z8ePNq&9T3pBm&0j645S`uxnz0~fzCmt#~Eu_p>f}))G`|=7m z+W5LUAIrZyAK9%pv2GPS9tLl(WpoA4zFh)cKS_ko0Hwu(jP8=NRUvB52faN8ps0>K z-uAH}b*XuKeGX{@T>pLi;_)UnI-~D1v2Yxg_Do?zYfETZ3Dr|cP7oUbb9D;1uunCl z=?dViA$(Xs!fsVVxVf}3|NZ+jD0OZk`V7aFPP)SIEYDjDZrVw1Hmb;x?qZYyBDaPJ zOQ@;gZVTu<8~42sUkE1|G)CvQV_imrH@kuf2{=GZuiy9IwrQ!+p?5(KO<1lu{l57$ zN#Q9V^uR>QAS5cg8*Gjl4$u5QEkM7KLDiStB%h2}u7-1>v4eDLJ_X@`$WA2$##5uN zIh|NL)nuJ>TMo-0mDaU5S19x^X<~M6f{R`yPz9J=8+yFlHVwiPyAC_8?;?<>a>_ z`k$A<7NRTBldALNFyjwsMVOPVMO+F=chyZ9nflRy;b%-jl17V10LVZ?%TmmJ`?f_n zj`eV87@iuV~VJ!_AX$5JF}Rs~#Z^ zxN)XVTGRWOfuZ5_v&cQvZ(r?GRYiMFyzl_qk%l4g*3fq{rSEf1rJO6e2`$ z_cm<(N2>m1$?E#)PP}ov!oBx2eC+ zRG3NPrUS+vZ%N&o`Wf4hrSy)AU+A3W4Q#O}*N|dydJkfHYCf&X+T6U8LajfX$A`+G1g{I;CUr>HMd`;DwDu<{ zo*qcj4)1pfAD&CoKg3*qGAUkM{?GP*r1Sf!=r(_!{&)Fxf7W4F1S$Bx;#AZH+VzP5 ziZLbjvGfSv4!VFxPcP@yz*Ot_+yGS67|A|)De$Z6m%k-e0D#tk7pI8Ux#@lnKHBs# z)N3f0Iw0-TquT?_!Nw*IgLJl;&W@M%Qj2;_=hlRw+$EIGpj|%ZzG+6hE#UasC_-wVLsjr>~5?7J@x&&D9(+9Up(v9;Q0VyC<@2d>DBEm)E`23Q@ns3nm$bm zRv1(92{QDHv7!BVtl9eOcDUQ6ZB_P~|Ed+BBQ{KopZ~H@WF(B)$f{Dy?2yf4UU3zZ zNql%5vzWOphEW5hl8{|I>N$H&uVg4$+_(IgpK|ltO8Xt6p8<#r4h=m!w&Rx=^FEQV z3+ktLKl@6_ncJZLie&5Y$c)GN^VvTZ7J{XuN4U1WY8ilKI0SC1nUcSKUX~58#ZH*z z#wPP>JJBYCw;YS1{jv93-grW=s{C`cP`+!_n!dg&l66pOU1<3$*vD~@c@JSn?cxgN z0D4adaw^hJXi2{=+OK!?Em}Te@`P@Ngy<5GotL%N^d~kpHg4Yk_vnPGtn1IOUx|4L z0f2oU$q?tDaOo>8p{K=8$Jj6p{$5wtbC^v)i4jxzm%CT6x+K>~m=Nq}ar*DXUmyZj z2W;2RJ8DWyH8}NHnwdoqkj8Z#z=#|QUL=Gw95Q3#(X;ZA|0(8j7OGl+wtf)NSbeW} z>j6R`5+dTKpM5@o0!j|IF8pYe$lN~yFI7BN+1NJuL~dQcx8w|3a{x*MD8bJ0jl`|A zrbnM(k&Hz1jjiLvQeb$G(sUzXJi?0aBqpPfIvbZ+p)HuTJ7(Q z9@phw)Yxfd?4`<_1!L<5-_*=!m{#y$tpzAOxcuUInfsF9@&cm&7o>~rUzpeRMee{300`_#>&7WmFgW|qyXPnOc;4hTbRAk9JJVYE zE3Re<>+Yd{0{9TcqH&QwY!8wO1A@4w=9cc9aTk7?9Jd%miojKkD_2(M(Nl4~5F9>} zaLmO=fkU}aL*JTF@x7_YgW6iet&^tdc0S)@c7#6f5#|H(@K8e`o3HtUf3`$bmEz?K z%|yL%KEE4JVW4&Y6noMiq8J25=$YB_-s1CUfNj7pg?>ji8z*!cUi}`T4)sh1`5Y-@ z>&k1BWamp?)eD%iKne-`C8FH{Vl}UHMaz;~Z2O_3@jRxr5UbD#G7@43+lizV zb0cUn_&-Iz*dM2==ngode0_UWV;fFl?09j&hju%E9u(i~^J?Mil*lSJcOJ?-DAey_ zN$I#Nd23;170*6|S^?-s_qn9Z!B2Wvk>e(p$)Dr{_B|=7QmxQytTFB4_PA*rHT3Qs z?sb|Dpx& zd&@X>5lP7e5l|HjaDN@HMPC3W%STBrYd1yV-fV+C{1v0{DnDMr9?8e!$aV>+MuokS znKg4{4GoCtyRY@%0$)`FNF-e9aoXOc1q!LgscEM5af}Wtrzj~(^75MMUNtxOhhA^G zZ8EAKcI~%j-JvsdeCAlPf>8;@WTg8pjj*FD6kq57Kz7>kjZ)}IC|#^-a-3R--&=!< zf}1w6xw(nHe|-aFZZXoSGojU57U!#b$9F*1|C|ZK^+&(KU_jgLIiYp;l!=p({C@}m z)#m5TyBlC98SY8L`9$0!D(N!o;Ayv`y3j6MP+)tf8S?l6Y0L!KAKE~yyo?)7yu;%%ebIe^DjV!-|O zGqehplu2GYSv|l1LSYwBYEhS@C$oUu242xMseA`Nu&drOG8eEL2E+&bwIle+&%0Lc zBH#k0c4H9Dem0-rP%EY+s~4)DIpr9Ekr~z(l~rG=F)d+TyOdji#--EolTMkxzkf^w z->Ywzo8?Py$97F0byqDj<7K2;`s(5Fh>(RrX@$2fOSan3C4lZ){=?G!S{u=x0q%h;um)qs*FJ?ns&(w@2k{mEw+2B>joEL?p zl7Vb&`fls6|M!V&JI~$A%WD=?e6nD=W`RR)U*Aq!4fJ%`X~q_6ErnM z7|kKq26%M|ktY}=Z*(gU&NCiJsA~$n6oX8(Gr+Acv~I}*LDOS^(7=HR;XrKyx3Wpy zxsW-|k^hYvM}yzSkB6Ci4EoFW+xhK)z5!q4%hQ8X=~H>yS=yBr#NIAqp$>ZNrX=_l z!U$KhU8V z{s?z$9LE~h$-}LG_kw4;7_bkJ7Owp?fbbfLlX*s>YX=zas8L7W+DAiLBhF+=s;p}yPGU<5TE167eb;0 zt{&x#(tXf-y|t7?FUNoKY3L}@?Y_2A*C4T6^L4}7VHa&dU49?wr*SV$oUYy(-y!gw zZkJ=yNuBr?PBK_aBkiBXtZ=YpLh$KO6z!=$^;*H`aG;5Egv=c(dCJi@0n&)-UsnDH zYhqe$ui*YdRiWP~Vz^|mXb|XG>{0_ZZ6M=_085CD%h54xA7|15?pqO%XrLLwqe}pQ zTt@dBK?o8N$(E-Bna~*1d#lQ~hh^``R5vs*(BZ!yk%Twp6M^o4B0STPf6?quJ)jKy zeNZJFjos~`Z>0fA`FkXrpZ1H@ znsl4nnH)m)z~YtS>>VQ81nxsLVhgQj@W_kxYX)hBj1 zbtl;;*2qC2kKECCFUsHh|_X zJK3!3AL-uB-hw*{U_gL;!ci?o{yxeS^xkN`uWJ_Ys};2ty#9t=uzl~hY!{?XvIR_a zP@+hIOV6%CHdCYfD8T;B%>Xd|Ey{yWH5h|&{7*x={`A)`8H!3LnVylO{v0r|=K)Pk z(pEpt(C7OQQ#c{#0f}Tdp6kN0b>Ozc+xPF|?4^X;raC=BCaI&xLznlzoN)fGwt8E) zXc6&Ekg11J7{?9M*M8fuFmx$w`)zkmeCnehJtZXRgsTy%_WmWrYu`^OL_?2_rSWo z%f`exW>|oljs%yQSkAS&;Xg9*g!z@lE%&Cc`i@3;r=H_n+C$w@%hORm2Ja={bN-?v zzoEEQ4KqeKQTnC4vtJ`DiCHR%~6DQw-(=EH1C|4_PpI( za39IzU6m*1|D*oqdHtMRyRdcdW_&n`_6(^kcu7=46@?+`AAs4mb<;r5aSwFlw+yYVw{1_V5P6;)kU7K)~VEX%Jy;x*m%G;MykwINUBL3+w5B6jeT z26NJzX5LsygZBcg4|I#BmKNW5LTm=6@94cO`dyeCz)zf@>UN9Lzs%^fi^@Fb-f(HC z)^N#nta$$AsbDf3o7QF#@O7ipn3A`fyS?a|{1#y+MWX@%b%d>i7M`6zm1wfeZ?y5k z8+It*ChR%nA3U#A*=|M8Z|qNr+=$$b<}CZ__p(uJHanKVGEXd1E^cXQ$;9OFv&Mu% z(K4j}xqT;z*l~(cp-RArCV3HX+~@tpY{oxD$=FRr+z!&ec8bfB^a$CjREq9&82JmXy(yuLh#oC z{mCBqjms^oj#nB_IG1IP53E&;URh1P_p!bwO^9g`lVcQVH%ZJr!NH8X&4IDzDPnuJ z{)s&uS{OWr^PLDNtN#at@wYwsNbukEVE0D>e}7S1KN}Z&Y9gq`GW&$IVnn=KVyfY<_H`Pnm>J9=YpO%qbUpK2&Obr5@rF|uNM_#=l@xa-5) zJvp0{K(4W&RG??1vo5hE7?=T0ZP;R^l$2ij2|Lt53$h05O&s5%-6sp{$BmZiOb1UQ$H_b?R9{rA7%w&G$;Plqf{EEjDL|6Bhza&381 zp=#M~W%$@0sgal)J5{`PP@bpV@0~QG{Xp0>tKi@RC%u-N=QNl~KGq))D(mg{IW6kH z@cHAttd3Q|pt7+>lc1YF)|9k#W;&SqlB?(|ZwVXUI_JSB^0SbHwBtBQ#}Sqnms*vd zE-b!iQ!FuDy|mBesXLSIq`k|djTOa-zbzB1fvpn@ps(^CKD?4NL){um7j+nxW%#2t zNlrAhsvq4hGYq667Q#V+P&6zgBL^2GoDgh;y$qMC=G+H)5V+D3F%F0dVKR3$7zJX$2gg|v%X|04 zA-C^1?KLn|eYnut&#S_!T<(6Y=`@)hi?|{SXw;Er|3i8%ODsnZ5WD%LNOCsmchRNy zJ~avZvAwaN{JVp}Fx4e_E|h}PO$k1#3-B(ja3xGT-+4+R!rZan_I4zdSEqv7O!i zc8}f6uZH^K=l_HuQ*rn(!P?!=((Z~XRMh$`(E-r%$=KT zlF`!Cgl4Y>%0T2BHgEiV>|YrrGkx!N?mZg%7Ed<>I-x%Gl`j`;@SO1i|B;LC z?Zp&mWXa1dDxYBl!vi)DH(JJ-Rx?1X>jiD@Pa6@Kv?H&BX?$+BKWnLtf=kMc7xA@Z zdUugAb*h3x?+a_Px?M;w87{SLqRdBAnSfEe%1$r5Es2}Hwr_NsQahOaA13c~TG>kZ1>MupL zn+WFa*nXLwwZu-^^M+W_2ELu($@un`%yAE`U<}D_(>!v)+&nOE+1~l$-7kA|28xMr zI8+~*u`EUj;Ut|)(Pp~}=~q@#qrI2=+Bycxwhxv|83k%qZ-Id;E&@ zo87_c{44ocN1NkFezeRS+($#hi?t-UhT`*_2M+X~X_8#wZvO*uCsE@o>~A+`L3&bQ z(;#Z-o5iIpJ*r+|_HfK+Px;+DnVCI$`Iub~9Y23hKw!!}>BukS3g|l)VNE*nE{L7e z8A1Yf@VQux{{TxP=FKa4_qGO>Ba6 zAEePpHMdwb5YQ`Bm4^%3<~lnYTZWUbICJ~KhhxO%MPhfg3oQw;>~%tCK&kXdJ(rMB z`l(!_d6aaZ#@5r+bhnp39x|_996H=w@5C!m&q&cquJ`U~@_s>4vah}p=Gs$C#b3%y z-`|q``>g)!vTc6EU0`ryUhTvpc&ED#GrN`=l6Zf9kGwF*l9>NBYA<`?V^RNnXyx24 zT<9W>4VMalg#-qDbnz(}AuYS)19b=vmG1Ts|2Xwu?=L+5A-_3?CBQ_noxS1f>pMj( zKF2T;V`=9fN#_aMxYWMz))Ot7e~9Q72uz4vx~L~|va*v<`8^L@9gl`HcN$t2!d8Tz z%+8e^5-C-U0*x54skzhtjsPIFE+Q5I|7_Vf-&hro0XQw`g6SxGPWM#&3{m;!Dj!Zo zD{u0=L~5OGI-r?o*iSz%>}&deS^zGt?ZxONEIa38jt2ok2O*UIr~4V6@mTut-49XKQN$0x$T6f6gGyW`N!*HG;SI`1?W1!!wG9oplb< zkud~+Id(ELz5G|HyF>Dq*KgiLz-x-4whyUp71WyZG}7O8r!Z;ubxU}Dcn%vov8@=^ zVlJ3Hu7?H#mjGXde_!jhYzafWED_ETU-^Eqi3k zijcjs*B6;t*|PT@*|W$Vp{x|8yyyA7@B3#AP-h6_csy9JsL_FV(zh@CMtZ{hRT9X`X6|Af24+&1H$MX|B-u zAt?Y7;1Rz-m`jmFfTWQ}V3Z7G=@WQC52`t^kWc7LJMHTyZ#2v#A6t8~epHB+Lq>0K zw?*QcnY*PLzF4kBswL+0lMAwy6W|HmOQ?xyvsNl8ZE3K~^zc88e#_gzp{(L|65|3G zj5pAr)L(8=uCjh)TaP(@O7l}!p$L*J_BFc0A)Onhm^3)*b8 zXTJ6nuo*;(8Z4d3pEEP}TwMj)c7wAGW5o z<(@dyQ+>DCBmV*iXItCHV8{ptmq=!+ZOj>?Y^9@DIPN`bg1LHE%{=kYHN;&S2!bTU zNoRPtPWH$z5uURVSDO4;n%X;Zn!nE1Kb;Y$)vyeUhG8Ht&j@Um%S6a9rzow%YU#!s z`JY_TZ}y&=f-4>1I@qs2T4Y$?Rb^t=<`S2;k#vHI@^Sme4l{f`YSu0vuOG-lsXsi+#`DsCGc*cl`X}?mM+?DR^F3+n1HppFh;RI5Gh> z`0muqiLVjrUCTNH-DrhVj^s5uV*L$Q2t;1VAC}9uo&Bx2FbQwo`ucj?wBYIDZPOKi zX+bz&UosZsBGoYi1diZgxfRuzAc+p!ylFHppcpz8$<$~ef_)geZB%4kQ&be-GQG2 zHl>$bqMw$L&}7&U!71o*rJ4^?_-*}v9i7Z$=`1qd#=I4=CF2;EZ@Grzg82V@a02&F zzEVo@M#OSL!M^YO9e*lc!PktfQ@hvgUszH@BdJ<6)|T=p^bJ%Co>zN@>FxML(Zo0{ zp&6IozWKyPi7llEOuXSLf%gbuTOlnV2+4dRSp$CIZWvE)0N3cx|Jt3puO>jFKy0Fy zmWH1yM&3%ST}xi0=k0)O5X$FGLHLAP7xTcS5l)3>U7z^Y>I2C+j6NUb`dH|HU~7e# zg`YJkFbscis&8n>`|u%^Tp;R6#GO)LV?d{m;Bf5!b;AEf)_;$jsz(zN=U)Rqu?^J> zM4tzTAgw}-*WvymUmx#y`3LDb5%!Q17plg4lXeOSdF5aOD^By@+JI!MV2pim0+;%m zsaEFa`*TePm90Dv9`s=|T^r3;7$hx_C>gsYKU6N#gm27xHX2kf_x>ynl9_Te$fB5K z>%sQ}GH#tjh44s$(>xC_Y(b`8@Lv(GiujZu*aqR#iAm-rNn_~MAJHmpLZ$T==;el) z?9A>TE_@?m6O|?I7_$F;HA&#hbhB@Dm@p5UoBS1MB@tZ(Sl5}8YqK3C)O^WG9zFij zmnq<&ua^*krI|sLAQ||pb+!Lwb8x8#B6-=rH}BFQECTM%E527~;!6<8%cCA;TJbsv z_|=Hb1CkPiC_Lxa8=zHL_C0uyB;rCos&n<3*5}Hm^@N0*ui#&Gc^dow`MfFz5(&dX zMI(Ya{ARusoJd8k9Af2xH&&ko9Y;-GF+Dug#WuXKzC~O}TQ0sv zO86JA(-vlNaN_LO*3&VfTBc>iC@R~cP}dtOAC0P-dO^r>3ZmZ2*#%ISd}R9C9d@VfjLA?V z=&B4AbKUI<#f1t3&X)>_FI=r~$`DsN$wPC#AW?~hil+~g+u$W`)VEcV1B{&nj_>wJ z3Syyh;|B7QYR`^urfZi3LUjVxKmiy?*%jdb5ocNpfEXF1-!yrB^K@J4$A58DkAh!( z@d=-^(;OsH+y&m#)tu>HV#L>cYxp2yQ)V*|nWn+w1r)z#4JC#7ZG1F-yEx2>R|}i4d67y@JKmPqm`D} zaA9uF{9yil%&$}>BU=IjYvt-m1O|YK2;RZsD@Dqip`D2E9#|e{mJP$S)9D%^{ZMtG z{Jnx5AJ2t_n_J>bYXD||l`98Q^>VVcIZp3Q)jJ>H%n&2(TmgOIYl4)T1_*U(IjDR# z70GIFjbLt-VB_0kP1$mNQ~$RM*bj0pWQK^zrUeiL%k+fkP@h0-u_`A z@GySgnCt81`hHkc)#~+b*^vg3=yqr8o4yv-bc00nRBX-3=pVBG3>lwsE4@1Q^q=)i zj$lEC8TgREE9eG6>VaAgBvlnC?&@qIZG=jNAlkC9_C+WC z%?+I!T+dlPp|h)<5LG_AuuxE39A;jUY)*P!2xX6a{TxII5Dk4CsqTLZMp6|^;21`E z+P*iaLx+y^1_^~2tFr2<`h(X%IICdT2NV_hXbfO~8GPmyu&FR^O;voVl|ky$w6#LG zggb@)e5n=#R@DS+!aQ6L2DfHY@^ezmYF@fpWKu$6zV`n027j2?lD08z_`nKkIq4cQ> zed%joOvl1=XJo;0 zD@Tram2B-H4lp2)HYxBTJg^I3S+dkcn1V29yl=c%@gzmk;h-W`yV6{52@#ZGBAafY z=11=428yfS^oFF)Cb%LI1q%#MGi@o#JgALh>vRZHZ^6HVmC*MDRSLq3`$wNu`2RF|@mvQZqk`_8_Gb%E z4M{~k{3lCs&v(!GI*R`Burd}4Yw%IX>_{nLzyt0=LOc-4Q%zqTHric`%Tz^I>|wml z%bl!?llZ_G*yh7Mb_bdkB%Tnm!AyXcz6^$%Nc99Rb90*-SB_IeRpMLvOCT=skRM%+ zi53^XLwuz-E_ZVW(>i`I!M3V8-!JD#Yq=1LuM1p{R3cv3&^rn(yPz;wAHi3y`nO-T zu>ekBh>Ivvvozaz0<>~-a|fZtiw4F)*!|_iccO5Gfm)@r4|!NXxhF%;^Vz8-dK~s9 zxRN6d=7>0NjIa>rU7CsSop2oL9&lxpbzE-32aVep*6!!0vW}*D_X%e=>AypK4*3hN zZkE}|!SHD)U)U|je9ZoX=E*MEX(Z_*aYJ9Uh6D)YOlr~Roux(`%siJ1Ld|r{nbvKk z^DF{;SQHtZ?cFeuhghal4ja>G*rT+yXeCvvi&oiU_q|?&kp{_AtRI1wCtX|*yh*`# z1X*Mgv+J5|4#Z*`rpAg%;=$B30QXsq@3}pQ4Pa}KV3k?g`}OncKSAVW z(cj%c2ng+t44}~9{27v5q6jEC@5tj*i#yVS23gF;S^=k6IsS|;FDWez($aGsh)xa? z)!c?%n5pfe)zpox^_N~4M6(peuriNHCaH?DxzkB2Z*u`vYTX|$`d;My17KXPoyCi_ zlmN?w+{$+XtZ-lrSp)Z6F+=|gq6GOCcr*i2{YT5Qin3X#fB)s-zPydBjG*^G1R3xx zr#00&Q6g<#hKC|-Z<1u_7K5D+5u03?SzTcFBX=bR%1R{=;$b7o{!B*J)=`$Kl9ph` zE`;a-X3j||)f)0dPF~P}N`Z7{H0SJ&pl{fX#T_6SATv+x6JHOHWS>iq)q9si@(9oz zQ%DhU!wMq+pa&=u@vpMK&7ZU^ww?O%V(XTc+$zr<3J8hGoSE z=hZmK5haCFad_mvUN>Cao3?dqq6Qc%)I*X4i=;HAtx4F5cOgE&u=lLdWHt+W8h^Bf z;HZGNo(jL|dre0E3$_wSV8KN1O(dSm?|U-_Xr3hi=h2^z6>gTnP9L&FHa+lKBEdsF zaAY&cEWk-r{NG9ZGmyb}@5`%0C|rJXGdTc!i`C{RX9{;%-Z@mff8S62VmSyr-cb-+ zzkU0ICt9tOB)&7MLhE2G+zl%w$>}pdWw4d#mb2GrHB#lbUD1Qy?mfcCmfhBsi5wCN zcw+Dcjs@7n!BVb2pM)2mM5l0H_W8GzV>e?`dcG$rl#h4m70)OCtK{iC#4^2*I)gba z@N93Yz(?h2o1@U*W5=f|iNWP!+b>Lrmp(WxX`*wUyfk6tX;}z<&g#M4#({Z_7g<#g zmpvf%95wVxdl$TiEfGQLCJBT7aAk}BIjno=x`B#30=I1?P=sLLy}O>GXVMKo}@EBo&`CsrL8blC$$qn_mx4|BA;|ynXb2HWgBzpi@BXwmSmA>+BejXKUHu&4} z>D`mR*pr3+qepkxSlS;So$zrTAF1zx8U94M^M`VQy4bn)SEYdxGC#{`r$Y6g%e(i~a?DSU2x-B>rzX?9XS8=uhV6rE z>;^@MiI(CEx8dLAa9w9e{>+zTmzN&(+a)S)t&G;z!369KNfiNJ9P&_+QVt2XR*MDt z;SPz9HB!(Y#f3nDTl?_&c`tI}Kr#kP{6zf1H+c|j(+wV>#1riM`^Wv)h zG};rz3cz<@J4!tv_KQkug2~RkB@GsXFsNfd4?H51Vi(uFl@USA5A8gBRMOB+Zbmb4 znQS~oW;>uGC6Vk7H}$@{<&h#{Zk`jmNP2R`riRivNyCH(yNuI9j-uKb&bhqIJ<&V- zN!!(3i9+C;i5Pk(Wg_vp;Neg>hbKuw7#a<~kFaqe$OC!i;Hhi@8#%Z@Ku3yjy}u9| zvnUqBZ_}qJnfFH#j~yVpR_G^be75ibC(8$4p|4>AkiG!*e+peqO|7=<6>u90?G&UP zz*iAgymC;3gHSM#Ru@pXuu-5w!O9u*^uz!!Rj}Vr8%4e_^3KuN0T^Yp&<{NkygtZ6 zV#0ri9}$}Z%r!Fr;-HwXQO<|AXIc}tNmwIo3`oxOZLF=y;!&IgfqMq40pv#ndc=Q& zu`Zm{8ho)SZ9&^7n#5hyg`?$0EU!o<(Yi7GBh#!5z!nTr!dZbF$WHUllFaJw<)r2> zQIGQvFw7%=2GiS;XX1h!AIlFhBryRA>Ow@G6)!zNZ?{6(>UxdxYx7&H{Myq}zqIxI0`DH8ZkG~nM^?k1E) zz`Z54v8j0|K^keODD2knETcL4U`dIfZ3tikTS-iKlQ=}h0p||b z6be8wz33sWc39xLg1&8ZW{W`V#qVnb8V5Tx@D(Eg00+>+Fe?KD9|lgVD(H(Sb1%ni zTp+SS5s`jxvk!n0M<8HcckKN5f*EZPtcxn^q)S6 zUVoD!mNnmC<{z@5C7MLG`dsnwFHCmGt`0Wfh^!I(^%KqW+Zy*5_C_AmUu*(~kGw|6 z2f*$Ecap(Rq=n5|y&}#4=WmPF46BH0p;t-(Q=MMYSC|95N{%m~qe<*{-59OhG6Lehc zqCkyM$!4QL5HB#%fMQkiTQ}!GkX3YRFddz@q=+KncXMUpPcyL>x};1uanrqTYK&Tx zFxOU$#q`+kpL8PB%d9Nd)tA54XG^sZV9Ft$h^gRjSoBrHIM5pbyAWFOAk2CB(*Oal z;LvcKq^i9$u&{$}2n0zo&{LV*idVOvmP7XW(Ax7vo&w>(>m#GDH`GfWm2~dU4B|Q_ zWYrMTiS(4m01?#+KPh{1gMz{Nu5=XJv( z!DI|zi)YWD$EEngo(2dm2;BAsM@q+Y-yWPaK9o5TLvagMQ8c0;WFD3|{Hh^<82+;rW zMl?6yofE**xha%QY7Gu)i1G+l+;x0n=_$p176B(jN??YW6$i<)Y^gRz97#@5Z9>^y zo%-?^l0wB7F-0zR_h= z-flEXr)>bpBU&@p%Tp_akpaa7`Uo<(d+z;PzqbMFtp9bdK(D7uP~fp}3}9Gm{fl}2 z+VYvKb~37Sg=r@Z%m^-2ELCCYE_QqsP%B9JrQG!#Hc+JN`5LPl9fhu-jBz;<{PTK^^S zFYM2yGugdW+FFY26hl45Z6;<5&CL5|A!a(o$qpMAe5_q@H8Prj$-@r0hW2@ez`TVm?L?y)g!1h|JW4%DKe&QBR}_d^IU0|)D9KzYkCm`~z)A!``jOjkkopDUvxtOftmvEc?+1|B z0^6tKIFx%0**_c{JX^j2aHEQJIoSM|4+(49?|ZcZB!eu_p{BrNss4k^L&%g2tR5Nq z1bI8#T1jGy2)J+@N9CY0!|0#!x@9jx9pvPLnBSbVn zF6X_T!qMQHQyCGN+0BPI(B>iD$IznyF;-Vo_L&%zBg8`zEXPPVU^P?cWxLdD=@EVv z)<}h2Io;}MM6wh`nV;@AIYk$>`mM3D8SkQ~1TTp6paX~gt*nV!QaM>6sil!>@4crN zGg>nWbA|ftwmRpxXuNmE$f3_$2d@C6M*{q4OsY_7FiYx1K+kD~t|=9K`CM9 zH|jV8AlSW;4$gZLoNAdmvg( zBkZrQSU6A31C6}Yg@aGv$pW?`f)VUmvFowYk1dEY3!V*P+x2$$rEPq8S~S`op>vs}hlgqRD597+sm+nJx(8jyf@7)0LGKwp56 z3U()QZGuCg=N;2xn9%)jkfo+?;>CQ3#(0MAbLvLmtHMYCEx0tGLIB<%e6#PQOy8l$ z2GIWms#V=7zh;v0_q=AkVBK9uTM?>km(hdgGu>sEZ^B>Il#|zBBH!$%(w?c-3;ihTYHWf+p`+2L zw=saKtm#A1;yzNp4SgMgR3jq~EUE$eM7#yzW&*em7*jCVjK-M40fz-1LoY*mjsZ{4 ztOBiXkubK{&_zb7Vd-oX7=LRR8-MH*0vRg9A@gn8G{Z%s|A$Bq(8^t5Y16Ri-XLuA~r2;_}g#17{LN*8>Uzqzx(DC1}B`iY`V_Kxka&(OO zoBheS-{B-_63ad3G%$W7DNZv}mSjE3eR0+cHP7gW_qC%UrT%`|ed2{q?OsMJ2M!|! z>@f$1HRS^DL*1X`9p1SyADioTk@g+%Ix|@7BVaGU)V-w?dJinbMJ68N?6tzl$*^D- z5PuRRuETgtuo5t!JpXS*n%S~Tk+}nii(viX`ZelXW%30j2#n#9n)#bAsP`Ltb=vSz z)X_&06!BUPEa)qmVDNKh#llTJQp0CzVo&6YGG1^MYd1|IAeo{~C-{DxV@jW3mT?AM zvWmL;Gni%(Yj_xvLvXx_^-g~bA?C_Z;&<-Poz{K^Aw0R4j#cF5Lm%`{p2pT!@M^<> z1At(3s7Q{JIsl7lUkD46>%}Gv7GZm5h2y zZL+_Sb(f5XQD`7MJe;4&!K{6M$OG5>5p%DlTyK5q9J}SliCRimzU@O#+3PEQmju&$ zY>AJP-YGCCp`zd&akSIaJ*$2u*edwN8{a68u!%uh9pfIsSuPWU62&u1TL(>nimw*1 zm;|r~_@Z5a&wM6xEKjUvqdXMsYQ7>nuI)Ap!I^YpXq{XiJ9Pd|YTsCS}-J_q?)U?FwJI@DXF$%DDuemrKxg~76WV}8z$ zHa@BL3Mh8~4P*M-wZm$Y zU#qJoJ=1VCAY~dZI$gtDvct?^4QLVwVQls;u#S@WdcmP{hbGB2H6>`uVM{V9rx1;O zB4p0D#UiWDeJ&{{GZPsXpcjIMB?zqIb{9N&Yw6YF=rW!B{HHT4pJq|;h1c<`8W6VSQ818P z(lYnjzPjMU;f`w6yd&))P{wS%QYG{!G^Ax6!^NmBg6RONF8Hp4fmt_Th`a-bKaoM47>Pl=>O< zE<_I}+$1a;-e1LW@b{U78UD(=FVUwdL&2Q>A+nL}?5UOP74h`J>4{12Ylgmo^e2br z+UUC5mlvhmKSDy~h%Hc;ieft!wgWKx`c$l}qwW-3bhq>(0Sv;)0MewHg?sksH(b;C6 zVJg~a$9{7vp`tRHIQw_WST?Km?o4l8VZOw-y9`Gkh+L$$+eP-(NVqxa2_1C=bA-<) zL<BxJR^HOt5JeS{aQqa-Ou393F_@YYI-4{q6@FZ-$fc89JR+9f zrNNAGA1zH(hBoXd#dt9{%|dF&g8nv3`6AC(HZ4vmUX}A{lO*%!wSR6$?Us^I;7@pe z)X=G|BuX+IZJw#o#&IL-`Dw_%*1<{#S4%Jtr0y&P>Mj&mjqJ4NG3Ld)x~if9Qk z_jlYU6Nb_q2{gLQE0on0?8BBi3`j)p8CeL8S>}9wndRY@qMDIf@j#APDKk-!J+@-= zmf-2EaxYts(BC#C!x2=82PY472KpFlc2craW6QrUm2MSzN)QEO2;3^(%*&LPB=l=ImN_$bj#ujHp%7?`Q5`M9;L{Z+-x zB}7`&Ty-K>WN(gM3{#ErZ1L1Aj%X~~ax39_8O(O47N?nYd%iLnM`Oq|OjdEPS&Kls zv1fetMsH_nU%Z^JGXDi<59(F?i2m1+`Vj%_7(PZ0y-f?ues5WqZS>*D1Y?6CFRcjf zd6ki#ubRRZH4m4K&@;wvwZ2p>!%4ks$!CXn*pk$lHIo=E1X(Suahn!J_wW5NV!=g! z;wfBeX{`OpFjVCM@nziDMTux9tzy0=Pi3@d8hf@;|I<+u>@7EAzvJgGef(*iW8 z21!;4TLj8Q+FvsD!byF)1N_E9)Z+B9OWv0bPCYx?thye&euafm{^{wPGBs$^(4qQ3 zP3@`@{pnL-x(WkihHU>?G);?p%J29@(aIvd8e+o7Z2N**y%r)1_XByV|G#Q~{t+X)RK0D#A_@G(Ij$q~-xJ+%w8(0?;*O&1p zgMn9po5i@_SKH-51a8cuV?=oT04;p;`m&0HQ?D& zgF4jwNY{+BS4GFXwep@R@lMti7d6%(B^#d5blcs5&?#n$pTSylg8PD%4s-fC1it;} zX5TDKY!@GdguYyz8+ipCGp_i>jn&KVjVHL*tBohojjQO34P+A@796ekNndsQR@j#7 z3n&ABee9HUcVG|LeQ`~=W4#OQ7Vd&Zc+Qx+=a{JP(g7d$l5@#D!RH3H3cG{pnLMvA zgJkn78Qv){7Jsl;w1=v*D0(F&br)()=yrAg)- zm7Br(D4k4~+FVuNU7#xUPt-+T+@2xHJi6Vxb4ot>1nEg~2X!`SlmMKhg|wm|fo;qb z;!eNy*Tq=f6Ty-Fj{iM85f^mY@2SjrZq#HH+WBXlDCck$V=NwJj)X@u{@yvW%Zv!& z#f2*2Vh70{FoR70omQ<+{5!nvx%cniJvy3rx}@xh!0PAggeiK#I;CVB)9yYt&%(6#^B$Uv278?=EPA&kL(TdB=!I^>0_I?~)nKUm1(Ej3^# zLosao@5X`@a706~UM^O#x-mTsEhtNU{~=xW8iP2;F`qCk)8sP zFdkPQ^uV(R$45tAYXg+O%y+*#U989FAYJy3`w|+r_DDaL@E#+t%Wyxp<49gzC9Zph zfr?d9x~l_^m{3?ssg}35#PR2N#_AeZoa<8y5(#mmXpy51%ASUWU`PZ|C&7Z$8Eh?EQa!#}c^?Js7057h^U7rgse#n~zzQn+w^uRRTU5arp)6yF_XB@|Gjw>19IPj)MVlWpi1arm3) zuRRT~z=Y>v^&4qyPEH+LTbDN<%6QZ%bkuOnBye`zNUSwN9?H2~b81}-@}EDP#=6?z z4!FfFaZT^o_hx*IVYjYNPT;wPO;%K4s0oAZlKuxOqs=M$9%M@MT_ZHF;Q(!i zzP2)}dqi64&@D&hel`=)Z*wv}Or>_N*BiIcJs`?4YR*wJ-_w7S%gmIw$>7GF&)q0u zTyejwc{A14$Nw$>7Wm?cmR8n+FB|(?AtutFkg8orrotxRG0e5X&!hMS&0wtfR%Cy+ zbhqG3@o7wvQqsa_>phu2`_eScoUX#a!BmrjKu1@-D*h4zz%wq9Q-?Y+4-gja2 zo;3yNkp}#@sw;V4KI2u0igqj;!tUEsYb#mA+I_uM`-s^uC+#q}b6%4=QvHqWc7OSr ztSn2&Z4Wk#0PLhVFHNggp4UG|eRt;0w;F;lw*BrFBu}er6TSZ2Q^g<|*1&=7sBKpF z)4b`Q*NivEO;Q}ACjFXxa)yvi{W$_@W)X~qQpui=U0x55Qp6Z{ql!NEgrW>)%X|K{ zdh3hE71OWL>2`N##ZJYDM*2{xhZ{Rj!q_hLHp}ssO6)Lw4;p#fAJx^Yms(1B^?cFa zeJ7Y&STY(l$Jd=}c*cq-3M{&`M$4wUP)T@JnoF=EXNB8Yg3v~zZdQgitDrjwFRU$R zL@$2IkVSWI;>nR(b|b~RIT(7dW7Zwy)Er?TLm-XI5H6#Gei9RXGU}@Dh4P_tC88Tk zy84^U-bVuF^*B3nB1$a|p1`kd*n}x-7F;eVZtrtt*-W^rD0SoH@9UB55iFJoRBn?0 zJTqpV{B+C8?jqA@-LD#7O_Q*Ip

F(7JoFr7{{~gVx8s^6Pin$Nd;gaOZre zi(Tm{`wq*$AsD4eaP8Aj^I5eUj=0~hRfP(ToUlW|b6Ey1W165%>lE@p336BNIg|kN zQu`-5zz>hi(z^e`8O`9a37+IOt8uSU#aVJJb6Vx{P+wC7XZ`?L_Du(I_Qk;-+*$+# zcFAkR_5AtJ%gHD<=^YnC#?#n}Bw3uL&>%O`7{_t9b$z`m&V#0*M}i+3aW@$jn0SRm z!dqINs;HWVxo_76=!Ygp)e{)a6-q1X6jhfb_C^g*o@yFK@L}t&4=G7I$l4H*wC|)= z@t%6-GU50{99s`dqoz8M&vpBLy+~)Hjaa2quIBt_P~zKAeWO;*D5vk+i8#gCLbGqGIl@7i4 zA6NFjzV&2bjsfMwQ|D$`C;8D~rNMi9ya_2C`|TGsd$jR9Bx$*YR{C=DmMB<>`saRM zc<$yeHtTal6m5y=OOVOsMc&I9nYeZ(e)nH?w%jkEu%7k{O-=dU5qhq;DN@DEo25!; zEiz=lwZn;ZR(W^J@nP!SCa#U=INuMk|9ga0F!Q*w><;-2a+c`JifAgM_g7wc5nbg2 z0zB*qSXP{lc{%n(IT5B4`b^}6XkK4MBn=-aZA3@`-x!7Rb@}w`72~VMrpH$~3oSh^ zdo5f9!;BxCJ8^8j1m48`vJ!XECwp}^I;Q{xKVwJVZui*jHF|WBU0Mt*g9SMqzR1x! z_7hTxir$0{U+reXA#1*pGPQ26s`}C26`Nb@H(dR-zx-!!R9YA9?DBSD@kP&wGG3$+ zI$Ll3?X%GG&Sq;cax*89uEuja`k)VcIRnh86 zj9*bX^8nh2d#%2_=*GRKcF5%L|5soj8u&1}^N*=O6Hg%Z{(hOpt{OcKDGoupJXIHm zeL2U~mI^WRe_pf9NfAppVFLp-ZdML7#Wn=OXG?)oO{a3x6UEys*hJ0lo?miG_wp{r zg4Ncl6~$7uSoCHe9%v@KBa$Mja}?80^cM7a5^5G-E4zz3^R&dpSm9WIXv~IJEPH_E z-lfh}=jsLfaxHh{#Iiv+k!JFI#T8q?n(4D)hh)@?ypII^&VDpQ)tKGSVPD z*~2bR!yp_G^Y!&$Rmo{5LmxjnyTg#7XZyl{?gM**!s`PUxu9o5`*&4iiphLW+t6#b zh)r4Kmn#F_M_Ki+3FE-7$jghyL1bY==CkkB)_duuqn#C7C;iYsU;K;j@p@)j?iBa- zDP$*FC<+M#_NXhnJE<%C({qo9d%6C)$rCm$J09zBBefbZR5&&^bmj9Lb6eJhN?yYGhN1ahx`k6!`xelum06KLL-_skF{>3Ljm;!sjeZ`{hY55XQUA`Qs;ZLLZc1p# z^NQ_BcY{hrZEPd(dbJ}0BqG-s z7e(>rPP_KY(~fz5E4RN0KMHT0STOf4zLQ1iwr5A(yVChaW+bz_)ww-BbDzzl{)L65 zw{{+{^>)ANhM&s!gkNnQ?Z@V1^x3YlQuId5VWpYe0i!W(O0yABQ*ITLvOoJ+yIrYG zms^yr4%7JkQoXByb_5%yA}6z6mzwqm-wIC6%&l%L4s9D@Av6i=-FVa@aSQH{cZVGkx|{=s*Ss1lZRNr~*x;Ego2ZL279AMULyWG3}-VEf0WynV5q-g)2toaofH~#zD5sYK_%G;HBz4MNAqWypE*maJMIwmQkb`5uaInwRtF=yRg zJv7_z=gQ#q4888Xw{2D$y62PIJZ=2F$4@NN>w)h_48kjY8`J!BtdkO&7`@SQY-vW0 zv3f!|%zFwnWs3N}=Z>jeR;Z|iFh0jUTkE;e0%Y`~f8UQbU~zhJ;CywLiUk9UtM=?n zVdCTFX6^-Qz}L;rAYhMK^0`-YQpP2rFvK^!VmGdfroClw!P=|i^WQvH(u4D0PfE?a zZEelDNIdKiQl__93xj8JmLJhgemzz+SnxFO#re-E9#ewrweXZo*q7I54{cLobBCVz zGn>cnCNef(;kk1}8g?&%M|iXcMS9lgTgV7sFbx!gRW}br2f$)qb~o#hyDx&Wl$s>ixoLiseM{!_ z{`}#k041u)TIxVk51*!41mD?V+C^q;F2>B~hQ!HIs#8@?n)tK;>I$_a93godu{ z@^*gJOs2)#OrPHyrU#t+$o%B^8Hm+E5_u=Cc`uKiGV%X&0bW+Vt?FCHj6P;u2#uy% zlVUreKkMr|wyuq(JprBLH!JXEG^Nm47BId-#VU8dpAaHX^!aRMo)ezyaUYO;gQ z5K(sHY-F8SuGpwMaoVeuKFQOvCu~00^SDWGZ1KD=?ZIQBecTW2hcKaGTjH7+PV0<_zz4euv+!YXH!+PLw# zrhKlI3T!fBCF!!l9iK<4y&5YQcxjq<3;}hgO0~X^7>gZBo-_?@(X>_OIqqTpRp|8Q z{T9w^j=55*I$QYv99iz&I*1l-cAj zrd|yDRf{e~S7?n+j2jFUdaZT2&0)Qx<-@h%_4-PjdK?^5=Jlj=eNks(F{aPx=Zh9x z!C?*&=h|Ux{OcCeUgtK0`#W#+G^68fFKQ*osc2i}|6M-O05zw4J_HQx#U_ z$5}4Nm5i8odWL?FNA0P)FX-%lX)1Hg4#~-O&=_Q-uEtc1{Gt1Wq z*{Wq9dMT2A`}Dz>CKg>=mUd?BRO|Lcn&q&Iq`_k2o^u@gdpnMji$6-u<@=ecJPIi) zII6dFE~EGU?t}eX_Zg$#9Ud-b&gM`GgOg^zl*-{mBff^|qBVvRs{T-Ol^o|KZG5tI zHHyvNv#ycbX4>Z=k{A*tdRyTyP5bZC@>8(&-!xH8qrFwbD=A-{PvMucms>G9jN3*a zyOer61J&59#s1dk+N%3pvkt>UzK_Dq{i!GuM+c zPG4ZHQMfDqUxv~#&qS~EG2W-6T@_mLBzw%ME-qqY^VtF4`wmW6`2yHJTa&LFQE_YjeJUOeEHMFFDC`gh5VJ~WI8n^ zrVCMy`)CLD307a&ecnCowKvE2SZj>aTNtNCleih!A=R@i<)hPk6*G?Ged2ZD>UOcK zo%+7k{QIN{;mlE=j+IC6Pg<2^llFaU&!s?vU=`1oWv5&QbmFl$b}tn>Ko z$JdpQQH$JBU(y8ZUF5<}WLMnyqAN`vsg%1ot%LN&5p^`S-opP%K1 zMM^YEEDhV=jAf?G-hS@${7BsLapv_!=r7w;`kU67$rV)VAIlTdVhr}xIKI5{ISEV^ zHYswz&}m;d+F@oloMw8Z9eS+cf`@vCT1^z1;Jq^J}NH}u$Ef3aO33LEw!QFz~>(w0rVw&*mtSF zF4Rgd@?9FK@t9~_+~vkkj8r3ndn#MGqS!zhXGlzi>7xTySAF7?f>rm^^SG;*T>E=vk5QS> z@QF4JWHgG267-`~saW)&VI z(de1*ODV%&tIB9s68(PduVAXHFcUWCx$*-=v_}_C#^+kO2ZJJd6ncA~EknF2&{pbG zd@wWXo*y6FPYvlU^B~H!2z3nWZ;_xOVD~{`H;k#xl&xaC>q+KwbBUg}@u81ZC*@R4 z^BW51e|hPX7*Tn4bc&f$_F_73VoQ6vbOkEeCK9>%RNU3!CiMFq3k_2vN;N85o|p;WQpt67 zE*$x8TA93D#Hy_u0}K-a_gUpIGS*sq-skeDw|zY)5^{vQ^ba4pDuH#oRrn zun%Navz_QgT-f>7TTK6Ko*uAt=vh71UL_<7nLhuTHSZFpv$EcgxAV?7WYyM(Rhi>6 zAE$CT)wX$|YI$bA+Gcqoat7~PXkJR|% zXr&4)c%C?P{&cuzd6khEep}lk)JFuPLKc0Fkw~{)qU0U>UssZVzE9({i=~Q>GQB0P zq<+l|6F)diwtGVSAOK%d;_CdebP{jSsC54ALz`{=f8kaJAY!?jYs`a*JFouXk&2Pc z{pxo-`{&wLIxUuIkwFuGI@tgFV6wo-+^~4WO3ghX+d&_;p*p}5p(h<$_VI%ohX@1Z z@4h&dskd7(C8K{=jcYNQhDuIN*pITKe;Y7&vfquPbUZxU$+98|_F>AoI_C2hQ|4~3 zmCDr`?m}ncd7(Vl&71Kez)=qxMB$2Y%kD7VJyDTI2g@zf=2B1P%^90jTKz4fbDi~v zTGj4$>=!u~7O}rBFN!=Pq@NKe|33g)L8ZP*#$-g;Ud<7HVF{Jd)?xhgH=Zd=Bo_Bt zWMOx8dEKvU?iONXmkZ=!x)yv!-=RNPyO;)6wkw;mD-ARdump zdh=0_y(tvpr9l=&pL*q3{t!WYsct4nji=1Gs(Q}Ji&ZTQoieFRe@hI9{dkbFk}EF> zZWC@?-Dh~+Efw}^q8#g`WWd87(nbi!jb`q^^+g$}+fe*e78KKitsF}R#+0@Pt23l* zF}jYDXxgiCz%M0VR13nZeUezWL?iDNLd)(+#AS6}e<2>MNJOntT#bTkBS>f%#(8v7 zIhCX0!IqkVeM8r7RxE<-KvancPd`c~i0DVzLFeg8MIBX!%`%s=QFS>jRTyvjTnm{~ zGA!1sVqht|x>!eIi8;}%UowQ}ZJG=XqhwL%9G0Yk?dj?HuhrGnfjkmZNI{3G(R+iG z)yO|Jf4ni=QBSGt@7u9Qf2~HZ&IeOJEdy0^{X61!`jjP`pYg1lk%`+{1h`{e;(qV&P zc@Bl{swOSHs{7;>3%yLLjcfFlE;)GaS0U={(QWS^Og=?Myr} zFQcpS5R?>wA#c>;y_is4$~;rmCPMcRl!dKwl$~*n#Dk45wSkSo>BwopS#-yb%n?T6GxHV%FuB^hLp_nPB+ zV$OaynNlT%@srf`GtRPgt9#9FBp5}68FZao8N>2`2(DEvc}ix9c(4jW@cOq*!PZYw zOSZ7Y&r#c`Wm$}LgT#=<0tfiLPsF?b^1zd^)*A!$SP8x@3i4 zIzZX(ZdsNx(dE^NWfJ=8C>p&=XJpsFkBL__kOw8WP9V=A$mX~dEy^b2E8`WW@f1DQ zLR1_o$MP_+%O=TX$~+#n5s!M&m`Ycx!e$vnAp5L}uFxcWSK(;%++;iiCifh*kyUOa zstpu9Hpkl)l|D@sk|&54&)U+8!15eFl4@y4p#m% z^V0}mV#G~x%tFUJjJYb6J1Q~p!@Q2eWkg|Ux~~0bu$ej;QAI70d9bnzHZ7=^z0Qa0 zBum44bhd4K5=j^0DT$t=_`2+2dl6%+45;5^K;C#7v@7NrQrnE+gs1q^-H+&127M0v zdkaaZn4ZH+M~)|XiOQo5qD&D6g<-J_r-=}#S5nusT0pmkH1JV*c5-5ecw+f@ut7tmuy_TGy=)Cdpb2@4DRvkXR|<1e6cbxI!)uzzEc9Lq zV)KIQ$%v(^BB+pTS3KB4k4Ve3R0Ytw#pl=1m@Z@!k4F`@n}nub9xMMjRp`4^9IK+C z5e=J`!cE3BIh8Zzo+U6umUDCD!nSjb{0Q!zsK zrJh?})f0SY8zsFeHL=V8h@z8g$qlR@x<)pY(vy_@R_z;tG+|m7F#Yth>LW( z_@8BN5KWvl-CQV!lN1@77O_CdGO>9RRYBOS6AjcQQG(F1=|Xtj!%%tDDvCl?Nmo$O zHZf@@8(%N&EuA3|@k)~oFsSOQX@_5-3(&;FmwK;=ZZVoZH!njgc`o%B&2x((M9tCo4L zd?%Nf+^QT)3v)$%SeAuEB2gZ7uzWq4sLoo9hsARfsK}**a1*E!JGw3{l_w>Zb*au5 z)+ChGwenoBI_%MFTuk(^!hXJ{2}AyKyy~#b*s8orKXa#?oQ0^a)ejHEQjM2*?x-}m zmR$6(SRqWQPH>Z&T+v{JHYqJcLep0)`ob{gS03lUmET1VUW7?1$KpfGQIwkpYuh&B z@p$>G%8K4c&dC{Z5149JMX_N0p5MzD`k^%R#5@Zic=3`=@#^X-#E=I4Y*^2ma8)t7 zDwpKea)bs7p(_mITB7LWvX^2&MdA;WjxJTWE_+{)(BH2yG^HZ+`jO#@Vlqs5E+?9u zUnkK`e|H>5nxOQ8R>II`3RBEZgaWjJh^QFbC?YtSE}dv6iUB>94PBwGBS<-&*p@yoBEO3=tAz@mhm1!FH(cJDG7Yw70{LnRjSdsRS)-Y_L1{i;%^ zl3Xf&Sdmy+Rz2X!4hFX<3%znIt@$Vm57xKwf;@{JG>lvdZ&z1YpffstO0uGa15}=z zpAAT*oEx=nS5Pt#k>^$A%`>BHm#!$HNv>k4=Gju7+h^om9v-Y;Pf;hM;$=Xi!edNn z6J-q%K{f#2($@vtHr36_O0xV)R;w`TC~IPM#NVdlPDw74POfqwdy#hWxfcJ>*%%ab z53c%rvZ*X#GV_KM(k0yF{uoF7@KTZn~rD%3+fW%DppLs!?fb27>y~u zA{toB6C&UjiYX?!)W>qb;$$AH5gw_Ky76iNC`Nc3bQ7X3F8V+Hp64vs`OO(+1ra#m z^LH$_BMP#Y$UInIUY+ZBmOk;_St>*9+prsYwPI^4f0$4Tn*2mfC@k~dR1zstJ^~>z zrt;#$q$cz-Bs#V%zxC559-akD=@mu^Syh~a;*3c=5k6hvk{ei4T+b`as2paKh}Cjh zYKTCl&m}XUK?EqnGO}U3M+R%jHXIs{Ao^>SLq8u&Y5kT}l1o)c9|kt%MIaLfp)+3= zr3#I88$uAO#zmgJ%y9WkGKd}+d9Qg!SCN#Ik!>qWxr*S)d3C-8Z9LI=?2A13a^?Ya z7oPock-gE?%?ENmA{djRd9bFTv ztd?yps+sjWsZ2GgqV{TahBU}Il}RmyK9^r1#HjIS)386twUd{n`3`+Ysg?TMy)5#S@Jy|h!O%v5uRhgBE zhpy{D;=eNttk1M>UX|=IDY5hF6_28K-%GJqr*9_H9+P!=$?#{sZJ5g4ishv)*TY1) zxtK>3s@e%k5y^6^*>P73Q zx@JmRI|$3B&Ui3F_9J~)t+Cl-qbty+v4f>{iex2@ozdE zERzk(#K?<07vgi1JyX^A%KqkMv~-(hAsvUZ>k<=KGRFQwj2*B*?xS-SObw=2qT2ND zejOf}aTT14KhIh# z@ohjAS*biIF9TjxRdsE2as>@TqBvxd+cG(B-is=Y8DoaKsY;PdO0>Lce52}o3VU9d zkl%=}i!cYnWhRmE`h^0qH_zS?I0Oh4P!MP<_8>O#B!UC6wVhMm4FX-E3in z(>f+LaXy%ghpw_hg`10GR!HSa*dDPLS1aFpotQ15OAW z!mhW06e|f9zX7lvn|X<%43g+%lp2#%#lTu+#6@76w^=Ubj&JJys45v`hEfM2=;~P*2FT`5^2=230KDz#V-(v8c5r?cM^k)fKvpt>STByB=&wlD!m~ z;0i;ILuDv<@5n^2T~{=1Vr<##)}k;W|1}HRt}U6Ds`X%DNh1+IMgL)KbY9(VVF>-{ zbh%XeT#Lq-dj=*v3{j1jFVEfe_?x@fBiEfbEC z8Nr8XvdHVfs*+TG)l_xKyhZQ7QgS7`eirsyYPdpYNW}NDXLiL{s7SYU23A*|C4*8_ z#?TaQ@NA!j_d@roqEICQ#cg4jzNr|3IB5#l{!4c z7*&!h5)anIAeOQ=kjhi_x^^!kAT|+%cD;(su*&=5b*Jbj9*^fy76yd~WF+Oq(&N&0 znK|CZm7oD$n~VOh+PI|cwS1{ujiQ06$GHgG2`2^UdI`%bhz-`-(q?5~z>SC7!Q;NVl3hKG}_29!S$C8EO zD({QWj;oAtxke&>#!uEREGya4MFxI7txA%sw2rb#a*3WvQPolnFu5qgQ&SwVm+{uVxk=hh2oLLyfnJwZSIiBWt0p9MP@qFxFF9b#kdRv7)Sx zR6Ph4Ta_O=J|(0f!Bka5FkYGNpdq7lzMZa8V)N>T++siF%!f!Q@s}om^q<1jU?WUP&xj_f;6=E@3f1nR=fp=B#qmp9;;0 zTac1&i%BkVLn3&^WFxH{r2z%$HrTT1GrfUY!)wlBh zrt_O7;8Y$~A#&3?3{d6Gs{ZaJ7o)rWLbS+&c306?BfDrHP%MfB_k=3cDV;!sJw6tWq5>6ZDfCpN&ab+5}hx>Qt|I##)$ z8&M$)XT^pCOe0gj&o#(17yi9`l3aymUZdPiO~T+@E+oq3lcLH7Kpi{RyVF3f#y;9 zXma@_r!?~P@9|nna_ORnDCi28w2EN4J-9+9ys<&D z%xYKZcZw!-FpI3Si{CJHB-|CH+45MwW!1@5 zjGfmHz7vKPSCDHp!6%Ij60uuBpOBK(Xa;TNjB<>^o)HFVkj$HL{b<)2z&GXZCio(atjryTx!op zR`V)La)}KNDu|#04U`u|P*zDUKL*A`ldBXAp^ikxv{p9iK7CzLysj+F*l4+OJub0* zI4Xq$>0EKmy6GI(f$iE#T1KzeOelr|pAT1dkADc6f?&4sy1 zc}25jljP#VO+U=)rFc*n&l?UBLzHpBsvw7@#4UAw^eRFaWhH^DCbecIO77A>-yn6x zUfo=(#ta!Jfe!LvuUh~r&TUcFugRt#i^a+($)!?Q4QgNt?eYkdl*NlVOSQoLXmJHG zpgM!0t2|IKZ3P|YVt8ey5;D56)?wJH@$-}LQYs*nOHRv$(X;eZRT8R_hmVdoLj9^NB96bLq0qx-K16J*y6v^aCp_3M(ZTtEg5$xS`AwqxbPx zBL6p;Q88%`_TsuNTC&T4pI7NkBELdI$E91yCYXoOUTHco@p{8@7ECu!%er!HE{w%I zRnAn{##LS6!k@wp*(h{QY>3 zDt=s(2^|#_5_A)jjSt^WOuviRvsa`e9aD{@Oywy4am6tyk0h6$da^=k?}8dF89zW6 zG<-p7FAITTWMPd?sX)Y8RVoMMF{_{+UYS$8XHvk`aY6*`yVoVuyvpiS2|rb+=+}e& z|J(caAi1jZ&fmGWd%9;vGa9|o6G=z{Aqk8gNIY$XKwu#rj*PSr<6w-#+OZv*isOoF zaglYo96OH+cGh-*D;2i3g5*jiey(GPoC+Yb3n=Sg$Fh-l%m_(nqq^@^;D}bv_cLLe-W#5Z}Bw^_UnP;k7$YLrM|9o5C)%Sg63u@cm zYn6;SPenwbnpE>nwz))+yHk0$s__tmT`~AJ$8v88iXdzyS3Ifg?~{xp)wP`F0hG@k z5OrYrYyzcMM%12qH9)kQbWm8~7hdRw0j4NX$kQo2So1AoWFRZb8xr+HxGH zH7J5GYFg5ug>N57V%|;ICWOo*vI&&f2D5DB3bpsbzff^x1Okg}fs%n%aIGqeLFXj` z2#PJjYBtn@7Es-DX)w&E)~$d{rv~106*nlpQ6hVu)O&R%wRd?1vs#Mt#HJqeS_HY8 zT1{&@2C$;?(xydk!xM^&UP?8$hbpxhkC;;<2e(1Eu2LOx~JqA5JFHW6r^iRb^1^} zPc`lp&{H#4uCUpT8U40!~>_OV<*H=VTL!M5(BWLm~lRqh$(B8(UbdTUN0p z%NJ%rF7|s~`AsGKVt!M^IkAoBU|XY-s}=NMWhIWLV3jOrVv}+u1E6ZOv9{r6W$n57 z3<8@?LkvEOCxChexlE@8YvJvw=ZbTcK<<}{=DntRc;K=k0v%8^OMoWq*qBn_c)RNLIjuv)8?@H1ifzpx9N3ja!uj0Wy5EEwCo)~GlHV%EF$>sv%pRUHVT?;0U` zr(vq$D%}9%l&#uXKA$fp5{X~8ga^xxMKaktU69Bo(4`~4bws&pHx;XpRO(2k>LlAh zm}!%+%}M2-Z)(G>D=?7J2+Cea9Qg3}Np}Bhm9Aw1*-9u2lNPKD`}| zZCm+N>fM_>?CIuppE`9aw`R?ngDnBDHb>T49v>>%=_|RedUzNrbu62{TMTH~_cC4B zR_;C##!J<1Sj2%(eCx{+mZ=$w$4XKm1-rbhR@W*)3-O zta3}2ip6`IA{8K38OdH7W^&oI-7$3%sO8w$%#E-cnaayomB7jrwqzh4mA+_oPq9|x zUuls+t?q42TgKS-bW%O03ZC$3GGPbOMpiJ4G+`LILS1E<%|Pp#6PkiBvf!3Zj62Fg zi4winbv>vRxS9$O!jv2H6Ki$98C9Tb z${1D-Qpek>1k$GisM-WSXR6hul1tYF&_*Q1w4hZ)H@gO&my>~~O42UO5xG{Lt0~%V zlXDrSOqL%v8(@pVr`8H&b#x5R1N*)Y>Qlfi{Tn5K3KD6&7$s0F7R%~!Fk8sWXkr~r}26FV2^yfE9bYNiOSjki~gD7!3>r3wV1@wp#aI`To9L zC6|eM0;Zz)emD_sk$2Szkc*8I#gs1oG%?eU+0C+PH;o6|>U>hv>ZE39MK1P{l6hdV z3Z*cgQ+I4^Bwx+9gR!D?sQrAlZIjLmZ`+j4$~IGR9W`3OJhmpJ2vnYsY0;Sy*rP7q zY9&eA^xLv-^Ff70PV5%AE>NOU%#wY{sDv>0&D6p}_cv+<9y+D9vg^|H=Td>GDR`*s z*QEkxRSMp8@6pu=x=8%K)|*((1h-`}g}Ozl`Z;Qbf%qKLQA-ElV#HZS5$HN3*lZ@M z{#!h7s=OUtcLEvE=q44v*kwfoVS+fJ&T$<0jvth*%7R*AZ!QL|;^&q9&ZH5m z+W_jd4q^{D=3uMFwTA74LtFBy>4V%(Hs?NAG_ z%X)~}Zfq(FK%`_;%_mhffbJB+PBad2V)?>af#1}a@adc}z&6Rw-HcssOqO{y@nm9Y6afH&TCa)FWsi6qKslbw)S83-{?`;RK3qf$2f*~rsUR9QcPJf^z$TcNjY1=|5>V`AZ zt)+ro)!;qFHqk1u6y*y|m0*>4O4UfVS4FHuTi6 zntHY|{!$f)40}X$90!R+B9J5$177^!WdSeSiaIt0Nbi< zyPI)Wqo2RQXNBi&&jl5RMZBV>NOi=vVr_#)jod7 zf@ivFF6L?4bO0_}Afz;7Ks;fHdb+ZchFCf)o-9mMk4cawE~#x^ilAm3Y`xnySCh+Y zra{*&B3b&Ds)|deVPIOQtQVI}b4RfwYNgo(VaG*wt+s98rT5pF%!gHpldFJEr6()P zGT=`ZvBey$)y3*2ZP??wO?#P2j#1SD)k-VP!ZgLRk6Lj&)HjwqihNh4 z6NGO!5{A30R_?1!#5ru`Qy7jZY!J+LqKkqiCd!7tW^r6(V`SThtCAEm8Hmb?1;o!N zyGEVYtGZ7?RzU^eQj5}L9kA9KWSgCvuDb`zCizU^j-q%Ss-wM%=Q9br=#t|3Z7&h}KH6D8LL0(JLJ^!h426@?iac3slf zf?B;Nfrg*92qxNYym8Bz>Bqs=1pV&3^UjB6Vvb!k0ag}$mvMHoz?KS#r5-UsiMWf- zD>SuPsl}148Ydl{!d8@PQFV_smDSqt<*~K)x~&Vq&YnHnjr!qibw+I;3-dlvuhj~0 z=v0K8`)AAd$#z*)^TH^-q$=g!YMFguTf`t1pV;a*4= zN^L8CF8f(F7kD0492fDvIgV2zTgVq2@Ntw)cbKN>2 zmEhjF4jkVp2~f$(w0U4m(SYp{TAOSQP0l4jXaE$u zlj?eOX)C`#v>u`^4rgi&Q;o6Jwo=h-GPd(hI#8xBSd zEUKs_U0_XDzFYP)EiV!R{1rSgLvR+)gsun98V0s-qT_COx{&$qpk}Lu-z@=(M z6Bb~rwK29D$i_XnYV`i5fmh{z%36@DI3sK_2iOy z6~W@<`YSOHQs=#jUaRVPCf-%N4)MAC4$kEL#8xr7AfK43RB!Gzsz|u+`;*NLDUoi5 zVyUc7 zF||?MQUWVT*+v_Curq`r5cx|LXBXy3CoXi|-;e>Yc!Ub0&ZGj_DBL3-5OUxE)Z89g z=P8*Y>OB8fim%}+e^km;Vs(*>E~zKDn(}XTe5_7Zkl#dPeY5!EzwGadw161=66Y$f zv?Xq+lu&H|H@5KeCT`nZqxWy-W0mSS%JYGIP>cUw>{?LfC5QB2bzEno7e^U5((oI1 zh$Bde$7iJ5p)O{qvWl7%+?x>SoI7+j}Z9bZNT zsQ6VeL%>$tgVU)KjJsruq3G2XL3$i{1b*S+uPaFdHP-YA8 z5|bi7&Zk|40RTQrA-MMrO8Sq*L9XiHLF~b{@XZc;?_@2yZTdgy@?d#zH3@{+MCTjL zw@SZY-(p;)3#-h;z=cS@F4vg<8>Z)}#@DvuF4mE4UaNbWmMz~=jYV6D6koM~np%da zZTM8vBDC(aMJflfX56G?N>ny^@TFBHwi&v}M z)g(?%t=rJF6bGy0j!e0fmGXRHcYl+|RuQ;zZKT6aZZZ0=J@QMqT2sdZU3(ZCkTw0T zmc5@$V9&Se=INVav8eC7Kp`!-(3K*~dZmTwYM|>+W_vHIAxPdVIw7{ac{MlWT3SpI zG}*P=EK+ToX$dF?v;lEScwb#71Jh(zDPz@Ic$w?weB2j zwE(SI_#*!MvLXmmTWAoY`jvP*6?0u>;x7E_g2yD@t8AQ9X;-SgSIsyUA}vtjnO8yl zTg)TYfw!rgRo8pXwog|Ku9aI$X%WcTo9fK?3ab?|5 zO`lg)HKz&`)!XB+4HC%!Ru@E)-5c4FUdNxRo~L?0T?(GfCLMdR%?YqIYZ)`s23ne0 z0vZV%+5OW|2D<7W9iJEF=-I4kSydS$2C^Y{LdI#spDJGk4aQC^JYb8LPtW4hw8Y27 zQd$$w&!=(KyF57t*amp8ja+n5`bOCVu}mFhW#C#;(~fY-;yTY&^t^0=wuA!EEJRgy zfbRbA+6KCNTd$K5U*)75_u#Wp-u21VAA2W z(E`?GmoytC(29y)vNH9Spa?42Eo?bf-NI5Gqin#|=KZa6Kq&yCujrC_tvaC>nfIz( zyrkTF4qHiQN=su$Ov9`9h*70Cx&6;IZNfah{qyjrrMUPB)#0D%)9-NVm@XcDIIzBW? zF1+nu^uJ24ZBii)#fN0BfiYmcHT6SYSaB4 zRrimmK~j?hrS0Ejt=H$zpWiwF+uhyWv|SBqxihPPFls80n0_UuWZ4uU@YP#3;A*>> z$-LQmW);Y|QXO4j&A3MO6<%Qs|f=HPLwihdW1MJ!mbpmhLt z!-fs$>grM+&6|OvwNbsdkuns8k41HVLP+2ll^iD>b3%F;&erDs+EN32fGF%e5-Y!I zb*z-VXB25k+20kb<4i~PU@S;=J0{zzZppeV#OYf0I506Wf%TWIZykW$vSmxKBd7*? zI<~k_b)GG!>xgktv7@4_HMcCNr3`#I_JGZ5_bWLC)JhN5M!2TlC!4ZyaLQY(+q7NR zokmP_QEZh1Y-eXD+=Tn-mI2sHFTM11GMOCb`6ShctN9H?0wZJvMz910q^*c`-7zx^ zsjf`lQs|GGcvq7rRY}e(&mGIExOCz!)VEK=s&r%3dFHChx@s#l*;HzUIhll&qbz$r z5(95!0CXI*x3}Z*#~=UKmI2sp+qS*j+uM7(P$+08Z#^c(FqYy)vK=pwYw)srGe(`I zC~GQe=-Z?_o+?3>YQWpqA3sgUJX4TF<|T*898ev*Ra|Bn1)||{qsmd*DE6B=RoJv$ zk3zSI-DYj+9UH(k%@ZRx9GlS=FJ6r8+qbt4MF0SI+;IoS#>SeWvZP2HcyMu^%)*i6 zjd&|{9ek3iiN2(4aaK~vWfPUQX%`b!AHvpSY@{i{gzCXowuw?i4@d^rf^hu0l+V@l z>x!+q9_;4LoAH4Ue4r*bwq^i(*Ijq@4h;<{J*0YB2ZoTMg$vg}fHx8=@vF|=$dm4p zRG7$(@Ps2a^=VK#DgG@!s&4}trp9;cU0PiXuGO*8(NSD?-F3y;vuD?264wl14<0<|+;!JoB^4{S z-eJk_DMIyvDtjKKSVm96XA_e9)ri}T*XP`hVxmV2D!S_~dB3TuEz?4fWfABCQ#Qe? zvhrA%17_AH}qa+zd_%#GFCkx^D2rcPtQpHgT{zz^zwK za;sW4o5lV2-~WGVMnTl-4_|)y<(b~z-mgzgOlUbtU0rzCQdrqy@+n0J8HPiBl)s!} z+?|EKIXAVLDYRV`LQyOhbc2|prUOt_x>%IW-iA{(RoAHs5X4i7t(VMi+TvrCP$yx*wI1@J zVNQWI=KDTwxZwuu-o5+FEeEihHf^GJ-g)OxcXxNgk26VRf&)CIfKMm?pPU51aNB&m zJ7*_AY^u*F015&MP=D$xyyqnbvrH9Ps-Ts$%YhRunoJ=V2{(Ct6wTwo*p|lX`g9fj zV&r~fJO?iJ?24-C8}_xa*#qqF{oe1@^gR-_{Nwxf?R#wJ&Yh2*IB}w*krO0=EC}*Vm3T?7K$VZKQj!H9e^`>0yNVP z_yyzcZF~H$b@OZMkWYvh9%A@L80>!jLzGFY{z2cofL|2Q1l6kl%nWU_=N&Uegf&! zN73H*J%Gzvs02{LEBbvxZ0Mj96tM_H0VnHE zEudN60FuQqwCDSfC=7s54-h=NLi;iduD%*<=_m)JDu%>g@?4FYLG* z<(OSk7<#5yDT!`bin4UwCV$y^4DLj&dM;#2ct-(J*$iyK z*Yw`}Sn=)BWnw+L^evmBka|)<)5)^gEUvxw+UF^yCt4n00pOvB9(v}HM;>`Mkw^r= zih8#ef$w1xeF2yH?*NpdNP#>}qDX-Z>A<)<55w(O$O9xGXgl*W%sTlzP~&sthScC2pi?=uluP{rfJANt9q&9lnYtALKv>c_-xkESTvo-w*?Kmrd`7X-iRHxd zpxi9ps%qS$WJE;uU~M)!85P8XsSeO%549o;!szHIe)o5OH~YW?4}85Y?^&-8ci(;Y zoz3NP*{7d=I^EOL6Uu9m0f4EUjO^%2;o>;mfN|f2<51*~L;(ajv>}NE3LqHj+=!Gr z7m3Wf$hOZzF4==jdJ*!;*~lknp-9|G9(O8-mU*)jK-=gkINkt?iatrI>MHSA$rhW= zODglE5KfxV_Hmg`cS6exU1S?)t6P+y zx$C;vxN#%iefQl>^}5cwd9dr(uYY;jvSnATUcI_1-Uu_X@0JRD0icK^&iS(@Q>%Q6 zahgQlcaZa4cu1l^9pp$FIkyLW3wNV;(am^w-Zl((UW`oJY!qbR%9ZjaGX0ZzwIEha z2~{n%ZH|3qiRca~YYiiNezh_HY+A)s8u+q(osB+$YQxZN);9OvrUFlO0x98YCF1Hj zc|vVvAIe`BrgE*)K3vUuq8S<*!m5?44&Qd$ZN1YDU;$vmh7Bk7?AdcGUtTezoMUa+e1o~@@JW$aX4DHtWh2Q&HSh*|~w z|1k$^KkmNoW6PE;c=%%vKY91vcYF1E??gR6=*>6Z>;brL_wL;j$B!RxZ)}LqZeenp6p(We55Wt%LY{I4ZJpv@IGyR97i^Bs& zH{SS6J>TDH#D~7=rkg&MPN&h)(V{Z8OK2q6dAN3McPsDC%sZKRY1VIu@^j9A3k+JsgI7q z6L4~8t8(p*;~;Cfl-~ax{8gUJYMt%5u@4ffkr=NcM1Lw}2`@!hws5M8_)zt+`DT>8n zXrN`b*!c}M(Rn!PFF}$_O%{j1@d2LzV`xXwpVZw7%E`$T&q|mhOOb7xgN4Wc7m#@u zKGal)P4a&wRXeWZRfd_uL zZ{NP3jgF4O^E~4Maa|WHR;2Rb2bU1Lfc3CrnZzV9QENT66O;`ZBb&(5Ab z`^rXMkJIQI^6`&oWgc%G;A=Cau=&YU@ed_IpQOO~Lcqa)JsnxKd^ z_&Ijcm$1|y0`+~s_t8<9!1}RQF*iSeq7M{(za-Gb2fK>YMZRNM23H0pQS~L;FAY!4GDKhKA7I-mZOaKA#6LnKazn+Z&lDn*`Yc=HfW6 z@qdW-d*8=Nl>H|USgKjZB&)9nii9-+EOhS zPNg}bwFF*Owu#MqnrIIjV71xs%AN}nN)^qv1F>l?)N_8+Yy8C%ZZes~+_`gc-+lMp z`SjCIztU)IYYKn`fIWNmynpZBy%-)IE|Zw!2P&J*23%|^l>#9I-QC?tBr2hki%4M* zoqit@bQl0I%li#39eo9~SSJS%BaaGFA&Xj9i?JM4?UgK$zEw`L8A}(-!2# zeB^q1P{DgsIW404JYtcH3S{e*?5{e}sVcv8bb$@!Q0Xb6-uyiO9{v6O_{?WMbL>MO z`p~n@fNP0n0oWZocKqzwXP@0aIy!prKmOxC(9zK$o%q>o7M|z9bzP*>X#hZ>Pzb=* z^SsaWbH{&WISd)+k5NAT2@Xi`<&GfdkHfKfD1}b?4G%0EBA3fyVqyZ>Y!&wr}6Q zrUBQc@?e>L@{^zZ@z=igwYy$@_0=B@3=EW&DYA*q9%qZCt*tExlCj@c<;X^TwC7&O zWvAc3gu4vc#C%XVa5JajP8`262AX{?3;-Fi|2 zwx8YRNF0S8v7u|q(zb{^ZHrIKV&99ei*0f|1_uYRXV0EjQmNDpn>TN6s^r{6Gv2g6 z`lCPk@!$N--|T%V-Us0xqOk0>-bY z*H*G&m@-0a=LEkQ&(z#ke*6lB0(R}%^~&G<-QR6%O7FT^Z{jCD@rgq_cI?=>WXTfb z^Z629N}RZiN??nb@mYmJ0fj;#@M@WtX3Fn0c`Cj^i&oZQz&2Arw>V{>ZIj9+ldUsx z(z;$&BFM@+sm71Vo7ne&uRr;*8I zuyg0mV_jWcH#9AM(abmW6QB6R&u+i{_Wc_+YzU|T{&+3(Hq+@eip3&EM@Ny*=Rqk& zE|)_-pAUeR=gI(}qoV_Kr0SyV{H9~Q?Xg&;T-C^ON>jC2 zDDSn3l7%HfDc6xo5XyRX#j=DK#w?%Dqobn(XV0F+{{8!peB>h^x%|l|pUlPp8`1Xd z+jr=F?|a{#_3PIcGMP-kz3OE6IyySg-Q67oyIA@W53+<1q*AE>Tsu2EwO*Yny@z#T zjXGhfVPO_vSa4Am7Wn3p*;;_B>ExlKBy`^9+}*o(|9JoY{k!MQn|E+{c-Tsx({UWMwY7l| zg7)@yuu3uZmCxsq&ApxZKa}tH#|K508ZF2c*&;iUHKkNSB(m>DVl-sz%UJS8ieyU) zZDhv2?ZITLKAOD*0X;h9G#C4AGUDB+A#S(S+PZ(`0sg+=wM9B`?t4@PVBv@xa;o5ElgjW zH<+J)Caq90;?V^+)2Aq&!|2EcpyV#r1JAaI(tf`2>l#n|O~UsXIO+8ib)%{&WO9K} zL@oIhU>Ry$4*1v1%u_QDRGk&l5%%2IGJ0ksj{UGGb9vp+(4a48;q#e|)y;vPXZ(V} zyHaL%R%12QCO5uq{Lh9zDxM{y%_3`W@-5$f{eZNIEqlVKGuol2Vg4bKu>QscuVkpv z_o*d{wJgoXcdW7~cveztv@s;8lEagLLZps?0$Ef8Jn{Z19v(P#!~7~;OrlrlQ@)Om z0RH?6qx8;GKK|RP#>{E}ByxCcuVJtuZe0{g>|gQCi9ISM@>`SHbUgJ-#E`Uta2RDa z%YY+2zV`L+i&E&C0-3#@)*9o^41RpG>RBe<9NZmq%C!w|QOcp=1G*X5260?jLjynP z#nB3PE~r%9i`1~c`y~q=nt=fXhMAeeNTJP=U8!>yWn*LGXx}QmV6tce!M`4>#{c1! zBC^s*TrjC?5_AcT^cQiEb+T3lC@Ff)l{_7!VtWa(G_$u6J#*JRGB(G5C!cO_crKe z=%S$^5)R;rW%{u25yg;ywy4Z-?2+YpdPCVo z&Ef{iH+=d!E|tDqe<(v!c^GAWfb4QURbpo6!rbTdNE$8Fuwl7{HEROE#j6D|w`mp; z3}N_3(*7RFP7_DnO`wZ;m*2MH%I(R?5@r8vZZ$w99wZJ@`%qwDVDbGQYI!%clbzm4 zEJy_^zhOid4FBEMwfi@1CrvjxG$x47@H+nLXwCD8hgpilYL}DFYVA+ zr$Xt?vuSomI=tlW_VQT=%%;FnQ3rE6*V?~Qy2j_)C%IcL93Q%e-kF>TKh%D<-z_!M zy4yXwcyYkq>ZarbLx%eh2m1$c;o(&iUaaSj7-gCDg|4>hSu)v6%BqshsuEoj02<0F zm!bNmB#0{7avW<2+AOpyfy2!11D3&Ym+acb za44kUEGvQrPAsshf_Gy?2b{9e4!>E>=pQe)J-pe!T0g!ysuKQpY0@; z_8h>WS5Q6pwwT*rck%20J%@h@q(2DC0=s2eJ7o-{?OwklMK*Q5_Oo zzC{^hT7Kh|d9MYHQOmH$`8;~VS9LbqSiLh`qbwud>&o0p#dExWW{?`oK3i7eyj}c8 z6aPpmh0A>f%UjV!PQC#g%GTBc1M_RmNro2!w(3ZGi{Z3(%4GR;vb=!@)JEJ0=<`${^-puosE|+E6%89@ow2}SK*YWDx@DN`>HpLBp03=MB8&_Eak(? z5gx#kPxwn}+F!2pAlhaXs+{wnOC2kynxI@paP9pgQU5ih>(5OB4qZ=#jWsHQY%U&% z(O)B;zS-{(9#9J*4!|hpH4jj7>2tlW;(!e%VXqz^c}3{xb;;U7tBtlyVRfFXKfjqY zJG0v3n=I}v$xxLldLJ9vc$?cQ-B8E8Dt8i{bfXVVJVij6p2Gc;syhRr3XNuid5_zs zDPpZ304gU@({S5q_nv4Saf#8~nv9GttX;tC71pnG3+yyzIW;uAnR|JR-Txqx#>4IJ zH_|=wFZTGEWy+r-L&mOB)tBmiM+*NqE`G0ht{GHWl9l?zGBtlB?aNVV{{qaBxew2l zP;ufnnB7kBG&7#WzBr`zbok(3ecmLXvBt7Im2f4?Gi+!T73a8px&MNxVj)g!r>^uy z8!&ODEXzB02u&1%6NJ`!GHA=~75(N{2V9=ocz;pCAV$5HCqJ5kQ^0jC;nY7K0fFZVdi@Nl*Yg@1(8E4y^u8DJXJp{u}Lu5l5upT+g$z&xS85t?~ z(Eevj6x;zE@+x{tSM;mx*q_$kN=s(#9@(R=ydUTDE}Du_TlW9n7C7RQUnbJMczmtz zJpcN3FOTETm`8WbOx@)@IqP_n(X|g-P9G7^J8aiGk+I|ksty*SpI?>V{@&*1#^xrb zcJ76HDY4Syt>R&K7m;TA<{X0z1q5|vw8UxO32e41cJ0Rf-PJx}fCV2u9b<(I z#>BwD0NM0#a?MGmVSp+F%N5cZpp^lQ%G9{@77+0wVL~#;?un*3lha?25Ay3u8V&lz z3}Pn;<|nhKbUkWSmrvzCiRP>b(SOg&hAec{s!*`4{4e6b-wTjRL?D~6v4P>sS~U^) zN0G}en4E;Xur=xM*Wlr{32hz&lssrC=#4T3ly|T3eo*hk*N>EDk#!a znd)4^Dj4mCcgPvZ@q~KKP*==VqQ90$NkY;mV84 z8!9{2QcFW(RiJ)bqyv}O!*ghW!MMzfhV(PsR%?^lv(MSQRBZSAh34E#pn(#-xy*J^#k!2Q? zZH&Sm<2w-*0K|uzoaF$WcOxSFtRV+zJe`&QOyY>Llq42QIgyz^)m>svU-jukZ!ege zJ9stb<$T#88Xa(C#h8kwNtC_g%=5q}eVv>XENrB>SwH9!wQB;3X;TnDb~OavMn8NJ zhY26|UHrbi1({Sf5DYWLH1c@^Do;5@te!9?&=P>6=6v96MdsAcIJIb={nJP&(hbfs;Ll&OJKO2r;q zePx(bvBY3>!IfIi6?PrT4L7}Z+=InTnrVf7Q&(5#1lcz${-YA`&xl|Ifpt%-Sj;qb z{+1DKaeM1^2?AQwGZ2AvfYa&u7&-l=^8sTB2`O^CY)q=QuI{oli+uCjvlb|XYy^WH zwL9{3R^zZf-lB2|GblgO9#piZ=A8SabTIz%#bC$3A5D)HpL6D8=aKGg>+1m#08@Xr zcWF0%vsZm7c+%Z&XB>$X$b4)QvQDsja!H7BbYWDw>idd9SQ=gMPb(7TTe$GGcny7t z9|0>fx=cQ&5IA;as4lml#(|{WnPPxII@bFH7gFhnMZMh`2^qR-( zK{gX@Zms*bu4mKVlUE`b+ghZIzaPwh>Q!W%E%MY@y*recX*_J15{no1FJ?toVP)>NEinyejl;{1gFbZpt(zREMlm;sRm-o+IwA(JIh zdxamUiTVJVgfcTTi}lqWov=b7u4k{iJf3}5o*a0HXj8!xEEr^XXV|%{M6NekXPo); za$fBR?Hq$<+|lUd_X}P4Hnhas8@HSESHn=*F;0CQhetJEJb#V|n*z|dcb(r7^;^2) z-AwFUHk*r75P3c!hM^7F)Z4NT6b9s5$?mKROuSpd|_eV_VY6e-TsDDb(jN>1z zzlQG1)XeI2DdV@>o#HZ-vTNME0yyZE?cien^fRJXe4-4~DwjCvNLIS~XVWCEjCCKu zzd$U!S#TgU^4wDnsl`rqpV%;Xa>~HAUZuD6fh#f7My)^PU|XvJBf`4l@Qn&}HMRC4 z$mi2p`@6pcY-+LdIyBFay4D=dz%)I~7gTI;52>+?IQTSRF8%H|M6+S&N>ZI2ST;I< znZkm@A z!-ZihF1TCu!%vc~8Ze_F_@x*z<8=tnViY-$of@Xx|FR`TJ(N9%?;X9KusJkBPsqcn ze6Gk-K)l=h+M=2=k5Ihy8g_T+>+3gr@xewVL2qEd*Fl?z6xg+(SBeZ-dp!bv{=EO` zc7%F^2h@!W2u8$ThXl>d@7}oak&%%>xbQAuTQk*5hdr~l@*j_Hhd{3I&Mz(P$3byW zYi8p!Y?p6Y;U;41CEwiZPs?3SP{9^;!n6OiL!s<$Hf}a(srf7nJpvN1NC>H^+DN?F z$C^FO`a?9=2Rd$}1$^!m4>N8LdpCD!g0I`dT=%mWjtXXziM+pYnPl=WJoRvQXQi~D6u46d`~rvZrrd}iuYXZW^e9%Q_apwkL>>~ z!(Z@l{v?OJ>)BQfzP41WPr@tw7YH^NTLo+{MM zuCvsv#2YAG`Lf5+G!jscA1Pkq?ljJ7Ipc=;hBc_~=%LCSr|RYoil1PKHY>DNt@Qk< ztpNVOe&`q~t%0xT(MfwJLW#$CxrDgY?sgyUf*%%(U4%JnQ;8mPzuWur^>%P(VCG0y z{PU^Aa${K&rbdT>n3jzNyfV^_p*jW47EH&y8aC!Hw^VKaMGR zZbg|t*>PZac>UXWg?od4dk2EoD)R3O_d$WkC;!JtaEmhpvG~r|O_{o!yA6_rR z;d^0%{l?kCo}n{S>3lGX(#}xOGS`1kvkjbg&o#^v1Ao36x{cJ@qN1e`Ok5#n!{ZqksB%UjVw!m`YZ1gsX<|+k+?)|Z=YucTa^`flZLpKHP;K(c!;nN)n(?jaH zG@rhtMBcf~qPoyZh`l$G3t9hJk~5s}B3z!aw3N?&;x>mQY3t8fijGR7urzKq(h}|M z#dqeqkKTJ@(DBce+&O7A9b8QV;^pGveXO5ff(NN_&r@U7r804gv(=@PN~O-=sK0R3 zK`?DtXad8|P5^pSH1bm+27|E+S{RamZ7fbuG(g*8RRi=bqv(r#5p$D-DOTRCI}(n5 zchc`iZmEBBy!Op8iUVCtDl>@CT&$HDm_Ii@J`P0f#GAQi4*J#BepSq6!ZfUZ+XTVV zRUfb_hndiTFwk8C<-kU}qA=)KCqjAyWOeVIot Date: Mon, 2 Mar 2026 21:36:08 -0500 Subject: [PATCH 126/127] Release v26.4 to unstable Signed-off-by: James Valleroy --- debian/changelog | 140 +++++++++++++++++++++++++++++++++++++++++++++ plinth/__init__.py | 2 +- 2 files changed, 141 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index c16b845a0..7547b4d3f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,143 @@ +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 + + [ 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 ] diff --git a/plinth/__init__.py b/plinth/__init__.py index db597c910..ea0650fb5 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '26.3' +__version__ = '26.4' From 07845bc960d82516b3c588c8cfc71fbf64a6e5de Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 2 Mar 2026 21:49:05 -0500 Subject: [PATCH 127/127] apache: Fix check_url test Signed-off-by: James Valleroy --- debian/changelog | 1 + plinth/modules/apache/tests/test_components.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 7547b4d3f..28a2941e3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -100,6 +100,7 @@ freedombox (26.4) unstable; urgency=medium * 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 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