From 4612df954d2502b6d438def11535713f04b57ea4 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sun, 12 Nov 2023 15:59:13 -0500 Subject: [PATCH 01/13] diagnostics: Add parameters to DiagnosticCheck Signed-off-by: James Valleroy Reviewed-by: Sunil Mohan Adapa --- plinth/config.py | 4 +- plinth/daemon.py | 11 +++-- plinth/modules/apache/components.py | 4 +- .../modules/apache/tests/test_components.py | 19 +++++++-- plinth/modules/diagnostics/check.py | 5 ++- .../modules/diagnostics/tests/test_check.py | 7 ++++ plinth/modules/firewall/components.py | 8 +++- .../modules/firewall/tests/test_components.py | 40 +++++++++++++++---- plinth/modules/users/__init__.py | 10 +++-- plinth/package.py | 11 ++++- plinth/tests/test_config.py | 5 ++- plinth/tests/test_daemon.py | 36 ++++++++++++----- plinth/tests/test_package.py | 13 +++--- 13 files changed, 131 insertions(+), 42 deletions(-) diff --git a/plinth/config.py b/plinth/config.py index c01b302f8..d00b906fb 100644 --- a/plinth/config.py +++ b/plinth/config.py @@ -119,8 +119,10 @@ class DropinConfigs(app_module.FollowerComponent): result_string = Result.PASSED if result else Result.FAILED template = _('Static configuration {etc_path} is setup properly') description = format_lazy(template, etc_path=str(etc_path)) + parameters = {'etc_path': str(etc_path)} results.append( - DiagnosticCheck(check_id, description, result_string)) + DiagnosticCheck(check_id, description, result_string, + parameters)) return results diff --git a/plinth/daemon.py b/plinth/daemon.py index 6f2f4e9e6..16022170d 100644 --- a/plinth/daemon.py +++ b/plinth/daemon.py @@ -106,8 +106,9 @@ class Daemon(app.LeaderComponent): template = gettext_lazy('Service {service_name} is running') description = format_lazy(template, service_name=self.unit) + parameters = {'service_name': self.unit} - return DiagnosticCheck(check_id, description, result) + return DiagnosticCheck(check_id, description, result, parameters) class RelatedDaemon(app.FollowerComponent): @@ -158,7 +159,9 @@ def diagnose_port_listening(port, kind='tcp', listen_address=None): result = _check_port(port, kind, listen_address) + parameters = {'kind': kind, 'port': port} if listen_address: + parameters['listen_address'] = listen_address check_id = f'daemon-listening-address-{kind}-{port}-{listen_address}' template = gettext_lazy( 'Listening on {kind} port {listen_address}:{port}') @@ -170,7 +173,8 @@ def diagnose_port_listening(port, kind='tcp', listen_address=None): description = format_lazy(template, kind=kind, port=port) return DiagnosticCheck(check_id, description, - Result.PASSED if result else Result.FAILED) + Result.PASSED if result else Result.FAILED, + parameters) def _check_port(port, kind='tcp', listen_address=None): @@ -236,9 +240,10 @@ def diagnose_netcat(host, port, input='', negate=False): check_id = f'daemon-netcat-{host}-{port}' description = _('Connect to {host}:{port}') + parameters = {'host': host, 'port': port, 'negate': negate} if negate: check_id = f'daemon-netcat-negate-{host}-{port}' description = _('Cannot connect to {host}:{port}') return DiagnosticCheck(check_id, description.format(host=host, port=port), - result) + result, parameters) diff --git a/plinth/modules/apache/components.py b/plinth/modules/apache/components.py index b14c63fdc..405ff368b 100644 --- a/plinth/modules/apache/components.py +++ b/plinth/modules/apache/components.py @@ -149,7 +149,9 @@ def diagnose_url(url, kind=None, env=None, check_certificate=True, except FileNotFoundError: result = Result.ERROR + parameters = {'url': url} if kind: + parameters['kind'] = kind check_id = f'apache-url-kind-{url}-{kind}' template = gettext_lazy('Access URL {url} on tcp{kind}') description = format_lazy(template, url=url, kind=kind) @@ -158,7 +160,7 @@ def diagnose_url(url, kind=None, env=None, check_certificate=True, template = gettext_lazy('Access URL {url}') description = format_lazy(template, url=url) - return DiagnosticCheck(check_id, description, result) + return DiagnosticCheck(check_id, description, result, parameters) def diagnose_url_on_all(url, expect_redirects=False, **kwargs): diff --git a/plinth/modules/apache/tests/test_components.py b/plinth/modules/apache/tests/test_components.py index 4c575ad2b..ec2ddcf60 100644 --- a/plinth/modules/apache/tests/test_components.py +++ b/plinth/modules/apache/tests/test_components.py @@ -246,17 +246,18 @@ def test_diagnose_url(get_addresses, check): 'wrapper': 'test-wrapper', 'expected_output': 'test-expected' } + parameters = {key: args[key] for key in ['url', 'kind']} check.return_value = True result = diagnose_url(**args) assert result == DiagnosticCheck( 'apache-url-kind-https://localhost/test-4', - 'Access URL https://localhost/test on tcp4', Result.PASSED) + 'Access URL https://localhost/test on tcp4', Result.PASSED, parameters) check.return_value = False result = diagnose_url(**args) assert result == DiagnosticCheck( 'apache-url-kind-https://localhost/test-4', - 'Access URL https://localhost/test on tcp4', Result.FAILED) + 'Access URL https://localhost/test on tcp4', Result.FAILED, parameters) del args['kind'] args['url'] = 'https://{host}/test' @@ -272,14 +273,24 @@ def test_diagnose_url(get_addresses, check): 'numeric': False, 'url_address': 'test-host-2' }] + parameters = [ + { + 'url': 'https://test-host-1/test', + 'kind': '4' + }, + { + 'url': 'https://test-host-2/test', + 'kind': '6' + }, + ] results = diagnose_url_on_all(**args) assert results == [ DiagnosticCheck('apache-url-kind-https://test-host-1/test-4', 'Access URL https://test-host-1/test on tcp4', - Result.PASSED), + Result.PASSED, parameters[0]), DiagnosticCheck('apache-url-kind-https://test-host-2/test-6', 'Access URL https://test-host-2/test on tcp6', - Result.PASSED), + Result.PASSED, parameters[1]), ] diff --git a/plinth/modules/diagnostics/check.py b/plinth/modules/diagnostics/check.py index 02a747b78..aa3babc50 100644 --- a/plinth/modules/diagnostics/check.py +++ b/plinth/modules/diagnostics/check.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """Diagnostic check data type.""" -from dataclasses import dataclass +from dataclasses import dataclass, field from enum import StrEnum @@ -19,7 +19,8 @@ class Result(StrEnum): @dataclass class DiagnosticCheck: - """A diagnostic check and optional result.""" + """A diagnostic check and optional result and parameters.""" check_id: str description: str result: Result = Result.NOT_DONE + parameters: dict = field(default_factory=dict) diff --git a/plinth/modules/diagnostics/tests/test_check.py b/plinth/modules/diagnostics/tests/test_check.py index 3284988a6..cf1521295 100644 --- a/plinth/modules/diagnostics/tests/test_check.py +++ b/plinth/modules/diagnostics/tests/test_check.py @@ -26,5 +26,12 @@ def test_diagnostic_check(): assert check.check_id == 'some-check-id' assert check.description == 'sample check' assert check.result == Result.NOT_DONE + assert not check.parameters + check = DiagnosticCheck('some-check-id', 'sample check', Result.PASSED) assert check.result == Result.PASSED + assert not check.parameters + + check = DiagnosticCheck('some-check-id', 'sample check', Result.PASSED, + {'key': 'value'}) + assert check.parameters['key'] == 'value' diff --git a/plinth/modules/firewall/components.py b/plinth/modules/firewall/components.py index fe8744ed4..56656d1dd 100644 --- a/plinth/modules/firewall/components.py +++ b/plinth/modules/firewall/components.py @@ -136,7 +136,9 @@ class Firewall(app.FollowerComponent): template = _( 'Port {name} ({details}) available for internal networks') description = format_lazy(template, name=port, details=details) - results.append(DiagnosticCheck(check_id, description, result)) + parameters = {'name': port, 'details': details} + results.append( + DiagnosticCheck(check_id, description, result, parameters)) # External zone if self.is_external: @@ -155,7 +157,9 @@ class Firewall(app.FollowerComponent): ) description = format_lazy(template, name=port, details=details) - results.append(DiagnosticCheck(check_id, description, result)) + parameters = {'name': port, 'details': details} + results.append( + DiagnosticCheck(check_id, description, result, parameters)) return results diff --git a/plinth/modules/firewall/tests/test_components.py b/plinth/modules/firewall/tests/test_components.py index 61c0d3df9..041088a2b 100644 --- a/plinth/modules/firewall/tests/test_components.py +++ b/plinth/modules/firewall/tests/test_components.py @@ -158,19 +158,31 @@ def test_diagnose(get_enabled_services, get_port_details): DiagnosticCheck( 'firewall-port-internal-test-port1', 'Port test-port1 (1234/tcp, 1234/udp) available for internal ' - 'networks', Result.PASSED), + 'networks', Result.PASSED, { + 'name': 'test-port1', + 'details': '1234/tcp, 1234/udp' + }), DiagnosticCheck( 'firewall-port-external-unavailable-test-port1', 'Port test-port1 (1234/tcp, 1234/udp) unavailable for external ' - 'networks', Result.PASSED), + 'networks', Result.PASSED, { + 'name': 'test-port1', + 'details': '1234/tcp, 1234/udp' + }), DiagnosticCheck( 'firewall-port-internal-test-port2', 'Port test-port2 (2345/udp) available for internal networks', - Result.FAILED), + Result.FAILED, { + 'name': 'test-port2', + 'details': '2345/udp' + }), DiagnosticCheck( 'firewall-port-external-unavailable-test-port2', 'Port test-port2 (2345/udp) unavailable for external networks', - Result.FAILED), + Result.FAILED, { + 'name': 'test-port2', + 'details': '2345/udp' + }), ] firewall = Firewall('test-firewall-1', ports=['test-port3', 'test-port4'], @@ -180,19 +192,31 @@ def test_diagnose(get_enabled_services, get_port_details): DiagnosticCheck( 'firewall-port-internal-test-port3', 'Port test-port3 (3456/tcp) available for internal networks', - Result.PASSED), + Result.PASSED, { + 'name': 'test-port3', + 'details': '3456/tcp' + }), DiagnosticCheck( 'firewall-port-external-available-test-port3', 'Port test-port3 (3456/tcp) available for external networks', - Result.PASSED), + Result.PASSED, { + 'name': 'test-port3', + 'details': '3456/tcp' + }), DiagnosticCheck( 'firewall-port-internal-test-port4', 'Port test-port4 (4567/udp) available for internal networks', - Result.FAILED), + Result.FAILED, { + 'name': 'test-port4', + 'details': '4567/udp' + }), DiagnosticCheck( 'firewall-port-external-available-test-port4', 'Port test-port4 (4567/udp) available for external networks', - Result.FAILED), + Result.FAILED, { + 'name': 'test-port4', + 'details': '4567/udp' + }), ] diff --git a/plinth/modules/users/__init__.py b/plinth/modules/users/__init__.py index 3eb21e0b2..2e99cd04a 100644 --- a/plinth/modules/users/__init__.py +++ b/plinth/modules/users/__init__.py @@ -125,8 +125,9 @@ def _diagnose_ldap_entry(search_item): template = _('Check LDAP entry "{search_item}"') description = format_lazy(template, search_item=search_item) + parameters = {'search_item': search_item} - return DiagnosticCheck(check_id, description, result) + return DiagnosticCheck(check_id, description, result, parameters) def _diagnose_nslcd_config(config, key, value): @@ -139,8 +140,9 @@ def _diagnose_nslcd_config(config, key, value): template = _('Check nslcd config "{key} {value}"') description = format_lazy(template, key=key, value=value) + parameters = {'key': key, 'value': value} - return DiagnosticCheck(check_id, description, result) + return DiagnosticCheck(check_id, description, result, parameters) def _diagnose_nsswitch_config(): @@ -169,8 +171,10 @@ def _diagnose_nsswitch_config(): template = _('Check nsswitch config "{database}"') description = format_lazy(template, database=database) + parameters = {'database': database} - results.append(DiagnosticCheck(check_id, description, result)) + results.append( + DiagnosticCheck(check_id, description, result, parameters)) return results diff --git a/plinth/package.py b/plinth/package.py index 2919328f3..ea88bbbf6 100644 --- a/plinth/package.py +++ b/plinth/package.py @@ -214,8 +214,10 @@ class Packages(app_module.FollowerComponent): description = _( 'Package {expression} is not available for ' 'install').format(expression=package_expression) + parameters = {'package_expression': str(package_expression)} results.append( - DiagnosticCheck(check_id, description, Result.FAILED)) + DiagnosticCheck(check_id, description, Result.FAILED, + parameters)) continue result = Result.WARNING @@ -231,7 +233,12 @@ class Packages(app_module.FollowerComponent): '({latest_version})').format( package_name=package_name, latest_version=latest_version) - results.append(DiagnosticCheck(check_id, description, result)) + parameters = { + 'package_name': package_name, + 'latest_version': latest_version, + } + results.append( + DiagnosticCheck(check_id, description, result, parameters)) return results diff --git a/plinth/tests/test_config.py b/plinth/tests/test_config.py index c48a0eeb6..58c19ce02 100644 --- a/plinth/tests/test_config.py +++ b/plinth/tests/test_config.py @@ -165,11 +165,12 @@ def test_dropin_config_diagnose_symlinks(dropin_configs, tmp_path): DiagnosticCheck( f'dropin-config-{tmp_path}/etc/test/path1', f'Static configuration {tmp_path}/etc/test/path1 is setup ' - 'properly', Result.FAILED), + 'properly', Result.FAILED, + {'etc_path': f'{tmp_path}/etc/test/path1'}), DiagnosticCheck( f'dropin-config-{tmp_path}/etc/path2', f'Static configuration {tmp_path}/etc/path2 is setup properly', - Result.FAILED), + Result.FAILED, {'etc_path': f'{tmp_path}/etc/path2'}), ] # Proper symlinks exist diff --git a/plinth/tests/test_daemon.py b/plinth/tests/test_daemon.py index 7f84ee3d0..6f3dd06b8 100644 --- a/plinth/tests/test_daemon.py +++ b/plinth/tests/test_daemon.py @@ -151,7 +151,8 @@ def test_diagnose(port_listening, service_is_running, daemon): results = daemon.diagnose() assert results == [ DiagnosticCheck('daemon-running-test-unit', - 'Service test-unit is running', Result.PASSED), + 'Service test-unit is running', Result.PASSED, + {'service_name': 'test-unit'}), DiagnosticCheck('test-result-8273-tcp4', 'test-result-8273-tcp4', Result.PASSED), DiagnosticCheck('test-result-345-udp', 'test-result-345-udp', @@ -216,21 +217,35 @@ def test_diagnose_port_listening(connections): results = diagnose_port_listening(1234) assert results == DiagnosticCheck('daemon-listening-tcp-1234', 'Listening on tcp port 1234', - Result.PASSED) + Result.PASSED, { + 'kind': 'tcp', + 'port': 1234 + }) results = diagnose_port_listening(1234, 'tcp', '0.0.0.0') assert results == DiagnosticCheck( 'daemon-listening-address-tcp-1234-0.0.0.0', - 'Listening on tcp port 0.0.0.0:1234', Result.PASSED) + 'Listening on tcp port 0.0.0.0:1234', Result.PASSED, { + 'kind': 'tcp', + 'port': 1234, + 'listen_address': '0.0.0.0' + }) # Failed results results = diagnose_port_listening(4321) assert results == DiagnosticCheck('daemon-listening-tcp-4321', 'Listening on tcp port 4321', - Result.FAILED) + Result.FAILED, { + 'kind': 'tcp', + 'port': 4321 + }) results = diagnose_port_listening(4321, 'tcp', '0.0.0.0') assert results == DiagnosticCheck( 'daemon-listening-address-tcp-4321-0.0.0.0', - 'Listening on tcp port 0.0.0.0:4321', Result.FAILED) + 'Listening on tcp port 0.0.0.0:4321', Result.FAILED, { + 'kind': 'tcp', + 'port': 4321, + 'listen_address': '0.0.0.0' + }) # Check if psutil call is being made with right argument results = diagnose_port_listening(1234, 'tcp') @@ -278,29 +293,32 @@ def test_diagnose_netcat(popen): """Test running diagnostic test using netcat.""" popen().returncode = 0 result = diagnose_netcat('test-host', 3300, input='test-input') + parameters = {'host': 'test-host', 'port': 3300, 'negate': False} assert result == DiagnosticCheck('daemon-netcat-test-host-3300', 'Connect to test-host:3300', - Result.PASSED) + Result.PASSED, parameters) assert popen.mock_calls[1][1] == (['nc', 'test-host', '3300'], ) assert popen.mock_calls[2] == call().communicate(input=b'test-input') result = diagnose_netcat('test-host', 3300, input='test-input', negate=True) + parameters2 = parameters.copy() + parameters2['negate'] = True assert result == DiagnosticCheck('daemon-netcat-negate-test-host-3300', 'Cannot connect to test-host:3300', - Result.FAILED) + Result.FAILED, parameters2) popen().returncode = 1 result = diagnose_netcat('test-host', 3300, input='test-input') assert result == DiagnosticCheck('daemon-netcat-test-host-3300', 'Connect to test-host:3300', - Result.FAILED) + Result.FAILED, parameters) result = diagnose_netcat('test-host', 3300, input='test-input', negate=True) assert result == DiagnosticCheck('daemon-netcat-negate-test-host-3300', 'Cannot connect to test-host:3300', - Result.PASSED) + Result.PASSED, parameters2) def test_related_daemon_initialization(): diff --git a/plinth/tests/test_package.py b/plinth/tests/test_package.py index 633fbb450..19dfefc59 100644 --- a/plinth/tests/test_package.py +++ b/plinth/tests/test_package.py @@ -242,20 +242,23 @@ def test_diagnose(cache): assert results == [ DiagnosticCheck('package-available-package1', 'Package package1 is not available for install', - Result.FAILED), + Result.FAILED, {'package_expression': 'package1'}), DiagnosticCheck('package-latest-package2', 'Package package2 is the latest version (2.0)', - Result.PASSED), + Result.PASSED, + {'package_name': 'package2', 'latest_version': '2.0'}), DiagnosticCheck('package-latest-package3', 'Package package3 is the latest version (3.0)', - Result.WARNING), + Result.WARNING, + {'package_name': 'package3', 'latest_version': '3.0'}), DiagnosticCheck( 'package-available-package4 | package5', 'Package package4 | package5 is not available for install', - Result.FAILED), + Result.FAILED, {'package_expression': 'package4 | package5'}), DiagnosticCheck('package-latest-package7', 'Package package7 is the latest version (4.0)', - Result.PASSED), + Result.PASSED, + {'package_name': 'package7', 'latest_version': '4.0'}), ] From a5820bc36d94a4319b08db670df52b0cf2b11942 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 13 Nov 2023 13:08:42 -0500 Subject: [PATCH 02/13] diagnostics: Add method to translate checks Signed-off-by: James Valleroy Reviewed-by: Sunil Mohan Adapa --- plinth/modules/diagnostics/check.py | 20 ++++++++++++++++ .../modules/diagnostics/tests/test_check.py | 24 ++++++++++++++++++- plinth/notification.py | 13 +--------- plinth/tests/test_notification.py | 14 +---------- plinth/tests/test_utils.py | 17 ++++++++++++- plinth/utils.py | 11 +++++++++ 6 files changed, 72 insertions(+), 27 deletions(-) diff --git a/plinth/modules/diagnostics/check.py b/plinth/modules/diagnostics/check.py index aa3babc50..0c257d5f0 100644 --- a/plinth/modules/diagnostics/check.py +++ b/plinth/modules/diagnostics/check.py @@ -4,6 +4,10 @@ from dataclasses import dataclass, field from enum import StrEnum +from django.utils.translation import gettext + +from plinth.utils import SafeFormatter + class Result(StrEnum): """The result of a diagnostic check.""" @@ -24,3 +28,19 @@ class DiagnosticCheck: description: str result: Result = Result.NOT_DONE parameters: dict = field(default_factory=dict) + + +def translate(check: DiagnosticCheck) -> DiagnosticCheck: + """Translate and format description using parameters.""" + description = gettext(check.description) + if check.parameters: + description = SafeFormatter().vformat(description, [], + check.parameters) + + return DiagnosticCheck(check.check_id, description, check.result, + check.parameters) + + +def translate_checks(checks: list[DiagnosticCheck]) -> list[DiagnosticCheck]: + """Translate and format diagnostic checks.""" + return [translate(check) for check in checks] diff --git a/plinth/modules/diagnostics/tests/test_check.py b/plinth/modules/diagnostics/tests/test_check.py index cf1521295..a41148606 100644 --- a/plinth/modules/diagnostics/tests/test_check.py +++ b/plinth/modules/diagnostics/tests/test_check.py @@ -3,7 +3,7 @@ import pytest -from plinth.modules.diagnostics.check import DiagnosticCheck, Result +from plinth.modules.diagnostics.check import DiagnosticCheck, Result, translate def test_result(): @@ -35,3 +35,25 @@ def test_diagnostic_check(): check = DiagnosticCheck('some-check-id', 'sample check', Result.PASSED, {'key': 'value'}) assert check.parameters['key'] == 'value' + + +def test_translate(): + """Test formatting the translated description.""" + check = DiagnosticCheck('some-check-id', 'sample check', Result.PASSED) + translated = translate(check) + assert translated.check_id == 'some-check-id' + assert translated.description == 'sample check' + assert translated.result == Result.PASSED + assert not translated.parameters + + check = DiagnosticCheck('some-check-id', 'sample check {key}', + Result.FAILED, {'key': 'value'}) + translated = translate(check) + assert translated.description == 'sample check value' + assert translated.result == Result.FAILED + assert translated.parameters == {'key': 'value'} + + check = DiagnosticCheck('some-check-id', 'sample check {missing}', + Result.PASSED, {'key': 'value'}) + translated = translate(check) + assert translated.description == 'sample check ?missing?' diff --git a/plinth/notification.py b/plinth/notification.py index fb63ab89c..07aee714c 100644 --- a/plinth/notification.py +++ b/plinth/notification.py @@ -3,7 +3,6 @@ import copy import logging -import string from django.core.exceptions import ValidationError from django.db.models import Q @@ -12,6 +11,7 @@ from django.template.response import SimpleTemplateResponse from django.utils.translation import gettext from plinth import cfg +from plinth.utils import SafeFormatter from . import db, models @@ -370,14 +370,3 @@ class Notification(models.StoredNotification): notes.append(note_context) return {'notifications': notes, 'max_severity': max_severity} - - -class SafeFormatter(string.Formatter): - """A string.format() handler to deal with missing arguments.""" - - def get_value(self, key, args, kwargs): - """Retrieve a given field value.""" - try: - return super().get_value(key, args, kwargs) - except (IndexError, KeyError): - return f'?{key}?' diff --git a/plinth/tests/test_notification.py b/plinth/tests/test_notification.py index 822ec25a3..6af90bc7f 100644 --- a/plinth/tests/test_notification.py +++ b/plinth/tests/test_notification.py @@ -10,7 +10,7 @@ import pytest from django.contrib.auth.models import Group, User from django.core.exceptions import ValidationError -from plinth.notification import Notification, SafeFormatter +from plinth.notification import Notification pytestmark = pytest.mark.django_db @@ -413,15 +413,3 @@ def test_display_context_body_template(note, user, load_cfg, rf): context_note = context['notifications'][0] assert context_note['body'].content == \ b'Test notification body /plinth/help/about/\n' - - -@pytest.mark.parametrize('input_, output', ( - (('', [], {}), ''), - (('{} {}', [10, 20], {}), '10 20'), - (('{1} {0} {key1}', [10, 20], dict(key1='value1')), '20 10 value1'), - (('{2} {1} {key1}', [10, 20], {}), '?2? 20 ?key1?'), -)) -def test_safe_string_formatter(input_, output): - """Test the safe string formatter.""" - formatter = SafeFormatter() - assert output == formatter.vformat(*input_) diff --git a/plinth/tests/test_utils.py b/plinth/tests/test_utils.py index c9e220433..0ad26c3b7 100644 --- a/plinth/tests/test_utils.py +++ b/plinth/tests/test_utils.py @@ -11,7 +11,8 @@ import ruamel.yaml from django.test.client import RequestFactory from ruamel.yaml.compat import StringIO -from plinth.utils import YAMLFile, is_user_admin, is_valid_user_name +from plinth.utils import (SafeFormatter, YAMLFile, is_user_admin, + is_valid_user_name) def test_is_valid_user_name(): @@ -139,3 +140,17 @@ class TestYAMLFileUtil: raise ValueError('Test') assert open(test_file.name, 'r', encoding='utf-8').read() == '' + + +@pytest.mark.parametrize('input_, output', ( + (('', [], {}), ''), + (('{} {}', [10, 20], {}), '10 20'), + (('{1} {0} {key1}', [10, 20], { + 'key1': 'value1' + }), '20 10 value1'), + (('{2} {1} {key1}', [10, 20], {}), '?2? 20 ?key1?'), +)) +def test_safe_string_formatter(input_, output): + """Test the safe string formatter.""" + formatter = SafeFormatter() + assert output == formatter.vformat(*input_) diff --git a/plinth/utils.py b/plinth/utils.py index d7804766e..239da8b37 100644 --- a/plinth/utils.py +++ b/plinth/utils.py @@ -174,3 +174,14 @@ def is_authenticated_user(username, password): import pam # Minimize dependencies for running tests pam_authenticator = pam.pam() return bool(pam_authenticator.authenticate(username, password)) + + +class SafeFormatter(string.Formatter): + """A string.format() handler to deal with missing arguments.""" + + def get_value(self, key, args, kwargs): + """Retrieve a given field value.""" + try: + return super().get_value(key, args, kwargs) + except (IndexError, KeyError): + return f'?{key}?' From 3fcd6b9e58cfb504f0da1f9fc610ce07b827f078 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Fri, 17 Nov 2023 16:45:11 -0500 Subject: [PATCH 03/13] diagnostics: Translate descriptions only in view Tests: - Enable all apps, and run diagnostics. Diagnostic descriptions are formatted as expected. - Change the language to Spanish, and view the diagnostic results. Diagnostic descriptions are translated as expected. Signed-off-by: James Valleroy Reviewed-by: Sunil Mohan Adapa --- plinth/config.py | 7 +++--- plinth/daemon.py | 18 +++++---------- plinth/modules/apache/components.py | 12 ++++------ .../modules/apache/tests/test_components.py | 9 ++++---- plinth/modules/datetime/__init__.py | 4 +++- plinth/modules/diagnostics/views.py | 14 +++++++++-- plinth/modules/firewall/__init__.py | 8 +++---- plinth/modules/firewall/components.py | 12 ++++------ .../modules/firewall/tests/test_components.py | 7 +++--- plinth/modules/letsencrypt/__init__.py | 7 +++++- plinth/modules/privoxy/__init__.py | 7 +++--- plinth/modules/tor/__init__.py | 13 +++++++---- plinth/modules/torproxy/__init__.py | 8 +++---- plinth/modules/users/__init__.py | 10 ++++---- plinth/package.py | 13 ++++------- plinth/tests/test_config.py | 5 ++-- plinth/tests/test_daemon.py | 13 ++++++----- plinth/tests/test_package.py | 23 ++++++++++++------- 18 files changed, 101 insertions(+), 89 deletions(-) diff --git a/plinth/config.py b/plinth/config.py index d00b906fb..1ab32cf0d 100644 --- a/plinth/config.py +++ b/plinth/config.py @@ -3,8 +3,7 @@ import logging import pathlib -from django.utils.text import format_lazy -from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop from plinth.privileged import config as privileged @@ -117,8 +116,8 @@ class DropinConfigs(app_module.FollowerComponent): check_id = f'dropin-config-{etc_path}' result_string = Result.PASSED if result else Result.FAILED - template = _('Static configuration {etc_path} is setup properly') - description = format_lazy(template, etc_path=str(etc_path)) + description = gettext_noop( + 'Static configuration {etc_path} is setup properly') parameters = {'etc_path': str(etc_path)} results.append( DiagnosticCheck(check_id, description, result_string, diff --git a/plinth/daemon.py b/plinth/daemon.py index 16022170d..88750ece0 100644 --- a/plinth/daemon.py +++ b/plinth/daemon.py @@ -5,9 +5,7 @@ import socket import subprocess import psutil -from django.utils.text import format_lazy -from django.utils.translation import gettext as _ -from django.utils.translation import gettext_lazy +from django.utils.translation import gettext_noop from plinth import action_utils, app @@ -104,8 +102,7 @@ class Daemon(app.LeaderComponent): check_id = f'daemon-running-{self.unit}' result = Result.PASSED if self.is_running() else Result.FAILED - template = gettext_lazy('Service {service_name} is running') - description = format_lazy(template, service_name=self.unit) + description = gettext_noop('Service {service_name} is running') parameters = {'service_name': self.unit} return DiagnosticCheck(check_id, description, result, parameters) @@ -163,14 +160,11 @@ def diagnose_port_listening(port, kind='tcp', listen_address=None): if listen_address: parameters['listen_address'] = listen_address check_id = f'daemon-listening-address-{kind}-{port}-{listen_address}' - template = gettext_lazy( + description = gettext_noop( 'Listening on {kind} port {listen_address}:{port}') - description = format_lazy(template, kind=kind, - listen_address=listen_address, port=port) else: check_id = f'daemon-listening-{kind}-{port}' - template = gettext_lazy('Listening on {kind} port {port}') - description = format_lazy(template, kind=kind, port=port) + description = gettext_noop('Listening on {kind} port {port}') return DiagnosticCheck(check_id, description, Result.PASSED if result else Result.FAILED, @@ -239,11 +233,11 @@ def diagnose_netcat(host, port, input='', negate=False): result = Result.FAILED check_id = f'daemon-netcat-{host}-{port}' - description = _('Connect to {host}:{port}') + description = gettext_noop('Connect to {host}:{port}') parameters = {'host': host, 'port': port, 'negate': negate} if negate: check_id = f'daemon-netcat-negate-{host}-{port}' - description = _('Cannot connect to {host}:{port}') + description = gettext_noop('Cannot connect to {host}:{port}') return DiagnosticCheck(check_id, description.format(host=host, port=port), result, parameters) diff --git a/plinth/modules/apache/components.py b/plinth/modules/apache/components.py index 405ff368b..4fdce303e 100644 --- a/plinth/modules/apache/components.py +++ b/plinth/modules/apache/components.py @@ -4,8 +4,7 @@ import re import subprocess -from django.utils.text import format_lazy -from django.utils.translation import gettext_lazy +from django.utils.translation import gettext_noop from plinth import action_utils, app from plinth.modules.diagnostics.check import DiagnosticCheck, Result @@ -149,16 +148,13 @@ def diagnose_url(url, kind=None, env=None, check_certificate=True, except FileNotFoundError: result = Result.ERROR - parameters = {'url': url} + parameters = {'url': url, 'kind': kind} if kind: - parameters['kind'] = kind check_id = f'apache-url-kind-{url}-{kind}' - template = gettext_lazy('Access URL {url} on tcp{kind}') - description = format_lazy(template, url=url, kind=kind) + description = gettext_noop('Access URL {url} on tcp{kind}') else: check_id = f'apache-url-{url}' - template = gettext_lazy('Access URL {url}') - description = format_lazy(template, url=url) + description = gettext_noop('Access URL {url}') return DiagnosticCheck(check_id, description, result, parameters) diff --git a/plinth/modules/apache/tests/test_components.py b/plinth/modules/apache/tests/test_components.py index ec2ddcf60..9f746727d 100644 --- a/plinth/modules/apache/tests/test_components.py +++ b/plinth/modules/apache/tests/test_components.py @@ -12,7 +12,8 @@ from plinth import app from plinth.modules.apache.components import (Uwsgi, Webserver, check_url, diagnose_url, diagnose_url_on_all) -from plinth.modules.diagnostics.check import DiagnosticCheck, Result +from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, + translate, translate_checks) def test_webserver_init(): @@ -248,13 +249,13 @@ def test_diagnose_url(get_addresses, check): } parameters = {key: args[key] for key in ['url', 'kind']} check.return_value = True - result = diagnose_url(**args) + result = translate(diagnose_url(**args)) assert result == DiagnosticCheck( 'apache-url-kind-https://localhost/test-4', 'Access URL https://localhost/test on tcp4', Result.PASSED, parameters) check.return_value = False - result = diagnose_url(**args) + result = translate(diagnose_url(**args)) assert result == DiagnosticCheck( 'apache-url-kind-https://localhost/test-4', 'Access URL https://localhost/test on tcp4', Result.FAILED, parameters) @@ -283,7 +284,7 @@ def test_diagnose_url(get_addresses, check): 'kind': '6' }, ] - results = diagnose_url_on_all(**args) + results = translate_checks(diagnose_url_on_all(**args)) assert results == [ DiagnosticCheck('apache-url-kind-https://test-host-1/test-4', 'Access URL https://test-host-1/test on tcp4', diff --git a/plinth/modules/datetime/__init__.py b/plinth/modules/datetime/__init__.py index edee893dd..2a8e7b397 100644 --- a/plinth/modules/datetime/__init__.py +++ b/plinth/modules/datetime/__init__.py @@ -6,6 +6,7 @@ FreedomBox app to configure system date and time. import subprocess from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop from plinth import app as app_module from plinth import menu @@ -118,4 +119,5 @@ def _diagnose_time_synchronized(): pass return DiagnosticCheck('datetime-ntp-sync', - _('Time synchronized to NTP server'), result) + gettext_noop('Time synchronized to NTP server'), + result) diff --git a/plinth/modules/diagnostics/views.py b/plinth/modules/diagnostics/views.py index a7006b886..2591bf264 100644 --- a/plinth/modules/diagnostics/views.py +++ b/plinth/modules/diagnostics/views.py @@ -3,6 +3,7 @@ FreedomBox app for running diagnostics. """ +from copy import deepcopy import logging from django.http import Http404, HttpResponseRedirect @@ -17,7 +18,7 @@ from plinth.app import App from plinth.modules import diagnostics from plinth.views import AppView -from .check import Result +from .check import Result, translate_checks logger = logging.getLogger(__name__) @@ -62,7 +63,14 @@ class DiagnosticsFullView(TemplateView): is_task_running = False with diagnostics.results_lock: - results = diagnostics.current_results + results = deepcopy(diagnostics.current_results) + + # Translate and format diagnostic check descriptions for each app + for app_id in results['results']: + if 'diagnosis' in results['results'][app_id]: + diagnosis = results['results'][app_id]['diagnosis'] + results['results'][app_id]['diagnosis'] = translate_checks( + diagnosis) context = super().get_context_data(**kwargs) context['is_task_running'] = is_task_running @@ -89,6 +97,8 @@ def diagnose_app(request, app_id): exception) diagnosis_exception = str(exception) + # Translate and format diagnostic check descriptions + diagnosis = translate_checks(diagnosis) show_rerun_setup = False for check in diagnosis: if check.result in [Result.FAILED, Result.WARNING]: diff --git a/plinth/modules/firewall/__init__.py b/plinth/modules/firewall/__init__.py index 5a2828e08..df49e8876 100644 --- a/plinth/modules/firewall/__init__.py +++ b/plinth/modules/firewall/__init__.py @@ -4,8 +4,8 @@ import contextlib import logging -from django.utils.translation import gettext from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop from plinth import app as app_module from plinth import cfg, menu @@ -268,7 +268,7 @@ def remove_passthrough(ipv, *args): def _diagnose_default_zone(config): """Diagnose whether the default zone is external.""" check_id = 'firewall-default-zone' - description = gettext('Default zone is external') + description = gettext_noop('Default zone is external') result = Result.PASSED if config[ 'default_zone'] == 'external' else Result.FAILED return DiagnosticCheck(check_id, description, result) @@ -277,7 +277,7 @@ def _diagnose_default_zone(config): def _diagnose_firewall_backend(config): """Diagnose whether the firewall backend is nftables.""" check_id = 'firewall-backend' - description = gettext('Firewall backend is nftables') + description = gettext_noop('Firewall backend is nftables') result = Result.PASSED if config['backend'] == 'nftables' \ else Result.FAILED return DiagnosticCheck(check_id, description, result) @@ -290,7 +290,7 @@ def _diagnose_direct_passthroughs(config): which are the number that are added by firewall's setup. """ check_id = 'firewall-direct-passthroughs' - description = gettext('Direct passthrough rules exist') + description = gettext_noop('Direct passthrough rules exist') result = Result.PASSED if len( config['passthroughs']) >= 12 else Result.FAILED return DiagnosticCheck(check_id, description, result) diff --git a/plinth/modules/firewall/components.py b/plinth/modules/firewall/components.py index 56656d1dd..666292c18 100644 --- a/plinth/modules/firewall/components.py +++ b/plinth/modules/firewall/components.py @@ -7,8 +7,7 @@ import logging import re from typing import ClassVar -from django.utils.text import format_lazy -from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop from plinth import app from plinth.modules import firewall @@ -133,9 +132,8 @@ class Firewall(app.FollowerComponent): # Internal zone check_id = f'firewall-port-internal-{port}' result = Result.PASSED if port in internal_ports else Result.FAILED - template = _( + description = gettext_noop( 'Port {name} ({details}) available for internal networks') - description = format_lazy(template, name=port, details=details) parameters = {'name': port, 'details': details} results.append( DiagnosticCheck(check_id, description, result, parameters)) @@ -145,17 +143,15 @@ class Firewall(app.FollowerComponent): check_id = f'firewall-port-external-available-{port}' result = Result.PASSED \ if port in external_ports else Result.FAILED - template = _( + description = gettext_noop( 'Port {name} ({details}) available for external networks') - description = format_lazy(template, name=port, details=details) else: check_id = f'firewall-port-external-unavailable-{port}' result = Result.PASSED \ if port not in external_ports else Result.FAILED - template = _( + description = gettext_noop( 'Port {name} ({details}) unavailable for external networks' ) - description = format_lazy(template, name=port, details=details) parameters = {'name': port, 'details': details} results.append( diff --git a/plinth/modules/firewall/tests/test_components.py b/plinth/modules/firewall/tests/test_components.py index 041088a2b..0b9053b4c 100644 --- a/plinth/modules/firewall/tests/test_components.py +++ b/plinth/modules/firewall/tests/test_components.py @@ -8,7 +8,8 @@ from unittest.mock import call, patch import pytest from plinth.app import App -from plinth.modules.diagnostics.check import DiagnosticCheck, Result +from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, + translate_checks) from plinth.modules.firewall.components import (Firewall, FirewallLocalProtection) @@ -153,7 +154,7 @@ def test_diagnose(get_enabled_services, get_port_details): get_port_details.side_effect = get_port_details_side_effect firewall = Firewall('test-firewall-1', ports=['test-port1', 'test-port2'], is_external=False) - results = firewall.diagnose() + results = translate_checks(firewall.diagnose()) assert results == [ DiagnosticCheck( 'firewall-port-internal-test-port1', @@ -187,7 +188,7 @@ def test_diagnose(get_enabled_services, get_port_details): firewall = Firewall('test-firewall-1', ports=['test-port3', 'test-port4'], is_external=True) - results = firewall.diagnose() + results = translate_checks(firewall.diagnose()) assert results == [ DiagnosticCheck( 'firewall-port-internal-test-port3', diff --git a/plinth/modules/letsencrypt/__init__.py b/plinth/modules/letsencrypt/__init__.py index d3eef5a3b..7098690a5 100644 --- a/plinth/modules/letsencrypt/__init__.py +++ b/plinth/modules/letsencrypt/__init__.py @@ -6,6 +6,7 @@ import logging import pathlib from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop from plinth import app as app_module from plinth import cfg, menu @@ -13,6 +14,7 @@ from plinth.config import DropinConfigs from plinth.modules import names from plinth.modules.apache.components import diagnose_url from plinth.modules.backups.components import BackupRestore +from plinth.modules.diagnostics.check import DiagnosticCheck, Result from plinth.modules.names.components import DomainType from plinth.package import Packages from plinth.signals import domain_added, domain_removed, post_app_loading @@ -97,7 +99,10 @@ class LetsEncryptApp(app_module.App): if not results: results.append( - (_('Cannot test: No domains are configured.'), 'warning')) + DiagnosticCheck( + 'letsencrypt-cannot-test', + gettext_noop('Cannot test: No domains are configured.'), + Result.WARNING)) return results diff --git a/plinth/modules/privoxy/__init__.py b/plinth/modules/privoxy/__init__.py index 6366b6a72..364b11e52 100644 --- a/plinth/modules/privoxy/__init__.py +++ b/plinth/modules/privoxy/__init__.py @@ -5,6 +5,7 @@ FreedomBox app to configure Privoxy. from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop from plinth import action_utils from plinth import app as app_module @@ -112,9 +113,9 @@ def diagnose_url_with_proxy(): result = diagnose_url(url, kind=address['kind'], env=env) result.check_id = f'privoxy-url-proxy-kind-{url}-{address["kind"]}' - result.description = _( - 'Access {url} with proxy {proxy} on tcp{kind}') \ - .format(url=url, proxy=proxy, kind=address['kind']) + result.description = gettext_noop( + 'Access {url} with proxy {proxy} on tcp{kind}') + result.parameters['proxy'] = proxy results.append(result) return results diff --git a/plinth/modules/tor/__init__.py b/plinth/modules/tor/__init__.py index bc1166efa..dfc8c48de 100644 --- a/plinth/modules/tor/__init__.py +++ b/plinth/modules/tor/__init__.py @@ -5,6 +5,7 @@ import json import logging from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop from plinth import action_utils from plinth import app as app_module @@ -134,7 +135,7 @@ class TorApp(app_module.App): if status['relay_enabled']: results.append( DiagnosticCheck( - 'tor-port-relay', _('Tor relay port available'), + 'tor-port-relay', gettext_noop('Tor relay port available'), Result.PASSED if 'orport' in ports else Result.FAILED)) if 'orport' in ports: results.append( @@ -145,7 +146,8 @@ class TorApp(app_module.App): if status['bridge_relay_enabled']: results.append( DiagnosticCheck( - 'tor-port-obfs3', _('Obfs3 transport registered'), + 'tor-port-obfs3', + gettext_noop('Obfs3 transport registered'), Result.PASSED if 'obfs3' in ports else Result.FAILED)) if 'obfs3' in ports: results.append( @@ -155,7 +157,8 @@ class TorApp(app_module.App): results.append( DiagnosticCheck( - 'tor-port-obfs4', _('Obfs4 transport registered'), + 'tor-port-obfs4', + gettext_noop('Obfs4 transport registered'), Result.PASSED if 'obfs4' in ports else Result.FAILED)) if 'obfs4' in ports: results.append( @@ -167,8 +170,8 @@ class TorApp(app_module.App): hs_hostname = status['hs_hostname'].split('.onion')[0] results.append( DiagnosticCheck( - 'tor-onion-version', _('Onion service is version 3'), - Result.PASSED + 'tor-onion-version', + gettext_noop('Onion service is version 3'), Result.PASSED if len(hs_hostname) == 56 else Result.FAILED)) return results diff --git a/plinth/modules/torproxy/__init__.py b/plinth/modules/torproxy/__init__.py index 4893fbc2b..6e805bb7e 100644 --- a/plinth/modules/torproxy/__init__.py +++ b/plinth/modules/torproxy/__init__.py @@ -6,6 +6,7 @@ import logging from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop from plinth import app as app_module from plinth import cfg, frontpage, kvstore, menu @@ -136,8 +137,7 @@ def _diagnose_url_via_tor(url, kind=None): """Diagnose whether a URL is reachable via Tor.""" result = diagnose_url(url, kind=kind, wrapper='torsocks') result.check_id = 'torproxy-url' - result.description = _('Access URL {url} on tcp{kind} via Tor') \ - .format(url=url, kind=kind) + result.description = gettext_noop('Access URL {url} on tcp{kind} via Tor') return result @@ -148,7 +148,7 @@ def _diagnose_tor_use(url, kind=None): result = diagnose_url(url, kind=kind, wrapper='torsocks', expected_output=expected_output) result.check_id = 'torproxy-using-tor' - result.description = _('Confirm Tor usage at {url} on tcp{kind}') \ - .format(url=url, kind=kind) + result.description = gettext_noop( + 'Confirm Tor usage at {url} on tcp{kind}') return result diff --git a/plinth/modules/users/__init__.py b/plinth/modules/users/__init__.py index 2e99cd04a..b97bf28a0 100644 --- a/plinth/modules/users/__init__.py +++ b/plinth/modules/users/__init__.py @@ -7,6 +7,7 @@ import subprocess import augeas from django.utils.text import format_lazy from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop from plinth import app as app_module from plinth import cfg, menu @@ -123,8 +124,7 @@ def _diagnose_ldap_entry(search_item): except subprocess.CalledProcessError: pass - template = _('Check LDAP entry "{search_item}"') - description = format_lazy(template, search_item=search_item) + description = gettext_noop('Check LDAP entry "{search_item}"') parameters = {'search_item': search_item} return DiagnosticCheck(check_id, description, result, parameters) @@ -138,8 +138,7 @@ def _diagnose_nslcd_config(config, key, value): except KeyError: result = Result.FAILED - template = _('Check nslcd config "{key} {value}"') - description = format_lazy(template, key=key, value=value) + description = gettext_noop('Check nslcd config "{key} {value}"') parameters = {'key': key, 'value': value} return DiagnosticCheck(check_id, description, result, parameters) @@ -169,8 +168,7 @@ def _diagnose_nsswitch_config(): break - template = _('Check nsswitch config "{database}"') - description = format_lazy(template, database=database) + description = gettext_noop('Check nsswitch config "{database}"') parameters = {'database': database} results.append( diff --git a/plinth/package.py b/plinth/package.py index ea88bbbf6..5de556c60 100644 --- a/plinth/package.py +++ b/plinth/package.py @@ -8,7 +8,7 @@ import time import apt.cache from django.utils.translation import gettext as _ -from django.utils.translation import gettext_lazy +from django.utils.translation import gettext_lazy, gettext_noop import plinth.privileged.packages as privileged from plinth import app as app_module @@ -211,9 +211,8 @@ class Packages(app_module.FollowerComponent): package_name = package_expression.actual() except MissingPackageError: check_id = f'package-available-{package_expression}' - description = _( - 'Package {expression} is not available for ' - 'install').format(expression=package_expression) + description = gettext_noop('Package {package_expression} is ' + 'not available for install') parameters = {'package_expression': str(package_expression)} results.append( DiagnosticCheck(check_id, description, Result.FAILED, @@ -229,10 +228,8 @@ class Packages(app_module.FollowerComponent): result = Result.PASSED check_id = f'package-latest-{package_name}' - description = _('Package {package_name} is the latest version ' - '({latest_version})').format( - package_name=package_name, - latest_version=latest_version) + description = gettext_noop('Package {package_name} is the latest ' + 'version ({latest_version})') parameters = { 'package_name': package_name, 'latest_version': latest_version, diff --git a/plinth/tests/test_config.py b/plinth/tests/test_config.py index 58c19ce02..b1e6a2342 100644 --- a/plinth/tests/test_config.py +++ b/plinth/tests/test_config.py @@ -9,7 +9,8 @@ import pytest from plinth.app import App from plinth.config import DropinConfigs -from plinth.modules.diagnostics.check import DiagnosticCheck, Result +from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, + translate_checks) pytestmark = pytest.mark.usefixtures('mock_privileged') privileged_modules_to_mock = ['plinth.privileged.config'] @@ -160,7 +161,7 @@ def test_dropin_config_diagnose_symlinks(dropin_configs, tmp_path): """Test diagnosing dropin configs for symlinks.""" with patch('plinth.config.DropinConfigs.ROOT', new=tmp_path): # Nothing exists - results = dropin_configs.diagnose() + results = translate_checks(dropin_configs.diagnose()) assert results == [ DiagnosticCheck( f'dropin-config-{tmp_path}/etc/test/path1', diff --git a/plinth/tests/test_daemon.py b/plinth/tests/test_daemon.py index 6f3dd06b8..596c8a81b 100644 --- a/plinth/tests/test_daemon.py +++ b/plinth/tests/test_daemon.py @@ -12,7 +12,8 @@ import pytest from plinth.app import App, FollowerComponent, Info from plinth.daemon import (Daemon, RelatedDaemon, app_is_running, diagnose_netcat, diagnose_port_listening) -from plinth.modules.diagnostics.check import DiagnosticCheck, Result +from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, + translate, translate_checks) privileged_modules_to_mock = ['plinth.privileged.service'] @@ -148,7 +149,7 @@ def test_diagnose(port_listening, service_is_running, daemon): (345, 'udp')]) port_listening.side_effect = side_effect service_is_running.return_value = True - results = daemon.diagnose() + results = translate_checks(daemon.diagnose()) assert results == [ DiagnosticCheck('daemon-running-test-unit', 'Service test-unit is running', Result.PASSED, @@ -214,14 +215,14 @@ def test_diagnose_port_listening(connections): ] # Check that message is correct - results = diagnose_port_listening(1234) + results = translate(diagnose_port_listening(1234)) assert results == DiagnosticCheck('daemon-listening-tcp-1234', 'Listening on tcp port 1234', Result.PASSED, { 'kind': 'tcp', 'port': 1234 }) - results = diagnose_port_listening(1234, 'tcp', '0.0.0.0') + results = translate(diagnose_port_listening(1234, 'tcp', '0.0.0.0')) assert results == DiagnosticCheck( 'daemon-listening-address-tcp-1234-0.0.0.0', 'Listening on tcp port 0.0.0.0:1234', Result.PASSED, { @@ -231,14 +232,14 @@ def test_diagnose_port_listening(connections): }) # Failed results - results = diagnose_port_listening(4321) + results = translate(diagnose_port_listening(4321)) assert results == DiagnosticCheck('daemon-listening-tcp-4321', 'Listening on tcp port 4321', Result.FAILED, { 'kind': 'tcp', 'port': 4321 }) - results = diagnose_port_listening(4321, 'tcp', '0.0.0.0') + results = translate(diagnose_port_listening(4321, 'tcp', '0.0.0.0')) assert results == DiagnosticCheck( 'daemon-listening-address-tcp-4321-0.0.0.0', 'Listening on tcp port 0.0.0.0:4321', Result.FAILED, { diff --git a/plinth/tests/test_package.py b/plinth/tests/test_package.py index 19dfefc59..a431c4c4c 100644 --- a/plinth/tests/test_package.py +++ b/plinth/tests/test_package.py @@ -10,7 +10,8 @@ import pytest from plinth.app import App from plinth.errors import MissingPackageError -from plinth.modules.diagnostics.check import DiagnosticCheck, Result +from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, + translate_checks) from plinth.package import Package, Packages, packages_installed @@ -238,27 +239,33 @@ def test_diagnose(cache): Package('package4') | Package('package5'), Package('package6') | Package('package7') ]) - results = component.diagnose() + results = translate_checks(component.diagnose()) assert results == [ DiagnosticCheck('package-available-package1', 'Package package1 is not available for install', Result.FAILED, {'package_expression': 'package1'}), DiagnosticCheck('package-latest-package2', 'Package package2 is the latest version (2.0)', - Result.PASSED, - {'package_name': 'package2', 'latest_version': '2.0'}), + Result.PASSED, { + 'package_name': 'package2', + 'latest_version': '2.0' + }), DiagnosticCheck('package-latest-package3', 'Package package3 is the latest version (3.0)', - Result.WARNING, - {'package_name': 'package3', 'latest_version': '3.0'}), + Result.WARNING, { + 'package_name': 'package3', + 'latest_version': '3.0' + }), DiagnosticCheck( 'package-available-package4 | package5', 'Package package4 | package5 is not available for install', Result.FAILED, {'package_expression': 'package4 | package5'}), DiagnosticCheck('package-latest-package7', 'Package package7 is the latest version (4.0)', - Result.PASSED, - {'package_name': 'package7', 'latest_version': '4.0'}), + Result.PASSED, { + 'package_name': 'package7', + 'latest_version': '4.0' + }), ] From 27284fe888dbc9793a8823f59e9ab4041de7184d Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sun, 19 Nov 2023 08:15:06 -0500 Subject: [PATCH 04/13] diagnostics: Store results of full run in database Tests: - Run diagnostics. Restart plinth, and check that the diagnostics results are still available to view. Signed-off-by: James Valleroy Reviewed-by: Sunil Mohan Adapa --- plinth/modules/diagnostics/__init__.py | 48 +++++++++++++++++-- plinth/modules/diagnostics/check.py | 34 +++++++++++-- .../diagnostics/templates/diagnostics.html | 2 +- .../modules/diagnostics/tests/test_check.py | 21 +++++++- plinth/modules/diagnostics/views.py | 18 +------ 5 files changed, 98 insertions(+), 25 deletions(-) diff --git a/plinth/modules/diagnostics/__init__.py b/plinth/modules/diagnostics/__init__.py index 0285270a2..5608d2037 100644 --- a/plinth/modules/diagnostics/__init__.py +++ b/plinth/modules/diagnostics/__init__.py @@ -4,22 +4,24 @@ FreedomBox app for system diagnostics. """ import collections +import json import logging import pathlib import threading +from copy import deepcopy import psutil from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_noop from plinth import app as app_module -from plinth import daemon, glib, menu +from plinth import daemon, glib, kvstore, menu from plinth import operation as operation_module from plinth.modules.apache.components import diagnose_url_on_all from plinth.modules.backups.components import BackupRestore from . import manifest -from .check import Result +from .check import CheckJSONDecoder, CheckJSONEncoder, Result, translate_checks _description = [ _('The system diagnostic test will run a number of checks on your ' @@ -117,8 +119,7 @@ def _run_on_all_enabled_modules(): continue apps.append((app.app_id, app)) - app_name = app.info.name or app.app_id - current_results['results'][app.app_id] = {'name': app_name} + current_results['results'][app.app_id] = {'id': app.app_id} current_results['apps'] = apps @@ -266,6 +267,9 @@ def _run_diagnostics(): _run_on_all_enabled_modules() with results_lock: results = current_results['results'] + # Store the most recent results in the database. + kvstore.set('diagnostics_results', + json.dumps(results, cls=CheckJSONEncoder)) issue_count = 0 severity = 'warning' @@ -309,3 +313,39 @@ def _run_diagnostics(): message=message, actions=actions, data=data, group='admin') note.dismiss(False) + + +def are_results_available(): + """Return whether diagnostic results are available.""" + with results_lock: + results = current_results + + if not results: + results = kvstore.get_default('diagnostics_results', '{}') + results = json.loads(results) + + return bool(results) + + +def get_results(): + """Return the latest results of full diagnostics.""" + with results_lock: + results = deepcopy(current_results) + + # If no results are available in memory, then load from database. + if not results: + results = kvstore.get_default('diagnostics_results', '{}') + results = json.loads(results, cls=CheckJSONDecoder) + results = {'results': results, 'progress_percentage': 100} + + # Translate and format diagnostic check descriptions for each app + for app_id in results['results']: + app = app_module.App.get(app_id) + app_name = app.info.name or app_id + results['results'][app_id]['name'] = app_name + if 'diagnosis' in results['results'][app_id]: + diagnosis = results['results'][app_id]['diagnosis'] + results['results'][app_id]['diagnosis'] = translate_checks( + diagnosis) + + return results diff --git a/plinth/modules/diagnostics/check.py b/plinth/modules/diagnostics/check.py index 0c257d5f0..e72cfdcdb 100644 --- a/plinth/modules/diagnostics/check.py +++ b/plinth/modules/diagnostics/check.py @@ -1,8 +1,10 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """Diagnostic check data type.""" +import dataclasses from dataclasses import dataclass, field from enum import StrEnum +import json from django.utils.translation import gettext @@ -18,9 +20,6 @@ class Result(StrEnum): ERROR = 'error' -# TODO: Description should not be translated until we need to display it. - - @dataclass class DiagnosticCheck: """A diagnostic check and optional result and parameters.""" @@ -44,3 +43,32 @@ def translate(check: DiagnosticCheck) -> DiagnosticCheck: def translate_checks(checks: list[DiagnosticCheck]) -> list[DiagnosticCheck]: """Translate and format diagnostic checks.""" return [translate(check) for check in checks] + + +class CheckJSONEncoder(json.JSONEncoder): + """Encode objects that include DiagnosticChecks.""" + + def default(self, o): + """Add class tag to DiagnosticChecks.""" + if isinstance(o, DiagnosticCheck): + o = dataclasses.asdict(o) + o.update({'__class__': 'DiagnosticCheck'}) + return o + + return super().default(o) + + +class CheckJSONDecoder(json.JSONDecoder): + """Decode objects that include DiagnosticChecks.""" + + def __init__(self): + json.JSONDecoder.__init__(self, object_hook=CheckJSONDecoder.from_dict) + + @staticmethod + def from_dict(data): + """Convert tagged data to DiagnosticCheck.""" + if data.get('__class__') == 'DiagnosticCheck': + return DiagnosticCheck(data['check_id'], data['description'], + data['result'], data['parameters']) + + return data diff --git a/plinth/modules/diagnostics/templates/diagnostics.html b/plinth/modules/diagnostics/templates/diagnostics.html index ef102596f..03412c641 100644 --- a/plinth/modules/diagnostics/templates/diagnostics.html +++ b/plinth/modules/diagnostics/templates/diagnostics.html @@ -16,7 +16,7 @@ value="{% trans "Run Diagnostics" %}"/> - {% if results %} + {% if results_available %} {% trans "View Results" %} diff --git a/plinth/modules/diagnostics/tests/test_check.py b/plinth/modules/diagnostics/tests/test_check.py index a41148606..d92ac02b1 100644 --- a/plinth/modules/diagnostics/tests/test_check.py +++ b/plinth/modules/diagnostics/tests/test_check.py @@ -1,9 +1,13 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """Tests for diagnostic check data type.""" +import json import pytest -from plinth.modules.diagnostics.check import DiagnosticCheck, Result, translate +from plinth.modules.diagnostics.check import (DiagnosticCheck, + CheckJSONEncoder, + CheckJSONDecoder, Result, + translate) def test_result(): @@ -57,3 +61,18 @@ def test_translate(): Result.PASSED, {'key': 'value'}) translated = translate(check) assert translated.description == 'sample check ?missing?' + + +def test_json_encoder_decoder(): + """Test encoding and decoding as JSON.""" + check = DiagnosticCheck('some-check-id', 'sample check', Result.PASSED) + check_json = json.dumps(check, cls=CheckJSONEncoder) + for string in [ + '"check_id": "some-check-id"', '"description": "sample check"', + '"result": "passed"', '"parameters": {}', + '"__class__": "DiagnosticCheck"' + ]: + assert string in check_json + + decoded_check = json.loads(check_json, cls=CheckJSONDecoder) + assert decoded_check == check diff --git a/plinth/modules/diagnostics/views.py b/plinth/modules/diagnostics/views.py index 2591bf264..b712dc7eb 100644 --- a/plinth/modules/diagnostics/views.py +++ b/plinth/modules/diagnostics/views.py @@ -3,7 +3,6 @@ FreedomBox app for running diagnostics. """ -from copy import deepcopy import logging from django.http import Http404, HttpResponseRedirect @@ -36,12 +35,9 @@ class DiagnosticsView(AppView): def get_context_data(self, **kwargs): """Return additional context for rendering the template.""" - with diagnostics.results_lock: - results = diagnostics.current_results - context = super().get_context_data(**kwargs) context['has_diagnostics'] = False - context['results'] = results + context['results_available'] = diagnostics.are_results_available() return context @@ -62,19 +58,9 @@ class DiagnosticsFullView(TemplateView): except KeyError: is_task_running = False - with diagnostics.results_lock: - results = deepcopy(diagnostics.current_results) - - # Translate and format diagnostic check descriptions for each app - for app_id in results['results']: - if 'diagnosis' in results['results'][app_id]: - diagnosis = results['results'][app_id]['diagnosis'] - results['results'][app_id]['diagnosis'] = translate_checks( - diagnosis) - context = super().get_context_data(**kwargs) context['is_task_running'] = is_task_running - context['results'] = results + context['results'] = diagnostics.get_results() context['refresh_page_sec'] = 3 if is_task_running else None return context From 5f08752058462304ba96e58a820944060749c0ef Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 18 Jan 2024 22:01:57 -0800 Subject: [PATCH 05/13] diagnostics: Simplify getting translated description in results Tests: - Unit tests pass. - Run full diagnostics tests and see that results and app name are translated when language preference is not English. Signed-off-by: Sunil Mohan Adapa --- .../modules/apache/tests/test_components.py | 21 ++++---- plinth/modules/diagnostics/__init__.py | 11 ++-- plinth/modules/diagnostics/check.py | 23 +++----- .../templates/diagnostics_results.html | 2 +- .../modules/diagnostics/tests/test_check.py | 22 +++----- plinth/modules/diagnostics/views.py | 4 +- .../modules/firewall/tests/test_components.py | 23 ++++---- plinth/tests/test_config.py | 12 ++--- plinth/tests/test_daemon.py | 23 ++++---- plinth/tests/test_package.py | 53 ++++++++++--------- 10 files changed, 84 insertions(+), 110 deletions(-) diff --git a/plinth/modules/apache/tests/test_components.py b/plinth/modules/apache/tests/test_components.py index 9f746727d..6cbd1c574 100644 --- a/plinth/modules/apache/tests/test_components.py +++ b/plinth/modules/apache/tests/test_components.py @@ -12,8 +12,7 @@ from plinth import app from plinth.modules.apache.components import (Uwsgi, Webserver, check_url, diagnose_url, diagnose_url_on_all) -from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, - translate, translate_checks) +from plinth.modules.diagnostics.check import DiagnosticCheck, Result def test_webserver_init(): @@ -249,16 +248,16 @@ def test_diagnose_url(get_addresses, check): } parameters = {key: args[key] for key in ['url', 'kind']} check.return_value = True - result = translate(diagnose_url(**args)) + result = diagnose_url(**args) assert result == DiagnosticCheck( 'apache-url-kind-https://localhost/test-4', - 'Access URL https://localhost/test on tcp4', Result.PASSED, parameters) + 'Access URL {url} on tcp{kind}', Result.PASSED, parameters) check.return_value = False - result = translate(diagnose_url(**args)) + result = diagnose_url(**args) assert result == DiagnosticCheck( 'apache-url-kind-https://localhost/test-4', - 'Access URL https://localhost/test on tcp4', Result.FAILED, parameters) + 'Access URL {url} on tcp{kind}', Result.FAILED, parameters) del args['kind'] args['url'] = 'https://{host}/test' @@ -284,14 +283,14 @@ def test_diagnose_url(get_addresses, check): 'kind': '6' }, ] - results = translate_checks(diagnose_url_on_all(**args)) + results = diagnose_url_on_all(**args) assert results == [ DiagnosticCheck('apache-url-kind-https://test-host-1/test-4', - 'Access URL https://test-host-1/test on tcp4', - Result.PASSED, parameters[0]), + 'Access URL {url} on tcp{kind}', Result.PASSED, + parameters[0]), DiagnosticCheck('apache-url-kind-https://test-host-2/test-6', - 'Access URL https://test-host-2/test on tcp6', - Result.PASSED, parameters[1]), + 'Access URL {url} on tcp{kind}', Result.PASSED, + parameters[1]), ] diff --git a/plinth/modules/diagnostics/__init__.py b/plinth/modules/diagnostics/__init__.py index 5608d2037..5117cb20b 100644 --- a/plinth/modules/diagnostics/__init__.py +++ b/plinth/modules/diagnostics/__init__.py @@ -21,7 +21,7 @@ from plinth.modules.apache.components import diagnose_url_on_all from plinth.modules.backups.components import BackupRestore from . import manifest -from .check import CheckJSONDecoder, CheckJSONEncoder, Result, translate_checks +from .check import CheckJSONDecoder, CheckJSONEncoder, Result _description = [ _('The system diagnostic test will run a number of checks on your ' @@ -338,14 +338,9 @@ def get_results(): results = json.loads(results, cls=CheckJSONDecoder) results = {'results': results, 'progress_percentage': 100} - # Translate and format diagnostic check descriptions for each app + # Add a translated name for each app for app_id in results['results']: app = app_module.App.get(app_id) - app_name = app.info.name or app_id - results['results'][app_id]['name'] = app_name - if 'diagnosis' in results['results'][app_id]: - diagnosis = results['results'][app_id]['diagnosis'] - results['results'][app_id]['diagnosis'] = translate_checks( - diagnosis) + results['results'][app_id]['name'] = app.info.name or app_id return results diff --git a/plinth/modules/diagnostics/check.py b/plinth/modules/diagnostics/check.py index e72cfdcdb..70afc75fb 100644 --- a/plinth/modules/diagnostics/check.py +++ b/plinth/modules/diagnostics/check.py @@ -2,9 +2,9 @@ """Diagnostic check data type.""" import dataclasses +import json from dataclasses import dataclass, field from enum import StrEnum -import json from django.utils.translation import gettext @@ -28,21 +28,14 @@ class DiagnosticCheck: result: Result = Result.NOT_DONE parameters: dict = field(default_factory=dict) + @property + def translated_description(self): + """Return translated string for description.""" + description = gettext(self.description) + if self.parameters: + return SafeFormatter().vformat(description, [], self.parameters) -def translate(check: DiagnosticCheck) -> DiagnosticCheck: - """Translate and format description using parameters.""" - description = gettext(check.description) - if check.parameters: - description = SafeFormatter().vformat(description, [], - check.parameters) - - return DiagnosticCheck(check.check_id, description, check.result, - check.parameters) - - -def translate_checks(checks: list[DiagnosticCheck]) -> list[DiagnosticCheck]: - """Translate and format diagnostic checks.""" - return [translate(check) for check in checks] + return description class CheckJSONEncoder(json.JSONEncoder): diff --git a/plinth/modules/diagnostics/templates/diagnostics_results.html b/plinth/modules/diagnostics/templates/diagnostics_results.html index 29b5eb830..62d786ec8 100644 --- a/plinth/modules/diagnostics/templates/diagnostics_results.html +++ b/plinth/modules/diagnostics/templates/diagnostics_results.html @@ -15,7 +15,7 @@ {% for result in results %} - {{ result.description }} + {{ result.translated_description }} {% if result.result == 'passed' %} {% trans result.result %} diff --git a/plinth/modules/diagnostics/tests/test_check.py b/plinth/modules/diagnostics/tests/test_check.py index d92ac02b1..734200ca8 100644 --- a/plinth/modules/diagnostics/tests/test_check.py +++ b/plinth/modules/diagnostics/tests/test_check.py @@ -2,12 +2,12 @@ """Tests for diagnostic check data type.""" import json + import pytest -from plinth.modules.diagnostics.check import (DiagnosticCheck, +from plinth.modules.diagnostics.check import (CheckJSONDecoder, CheckJSONEncoder, - CheckJSONDecoder, Result, - translate) + DiagnosticCheck, Result) def test_result(): @@ -29,6 +29,7 @@ def test_diagnostic_check(): check = DiagnosticCheck('some-check-id', 'sample check') assert check.check_id == 'some-check-id' assert check.description == 'sample check' + assert check.translated_description == 'sample check' assert check.result == Result.NOT_DONE assert not check.parameters @@ -43,24 +44,13 @@ def test_diagnostic_check(): def test_translate(): """Test formatting the translated description.""" - check = DiagnosticCheck('some-check-id', 'sample check', Result.PASSED) - translated = translate(check) - assert translated.check_id == 'some-check-id' - assert translated.description == 'sample check' - assert translated.result == Result.PASSED - assert not translated.parameters - check = DiagnosticCheck('some-check-id', 'sample check {key}', Result.FAILED, {'key': 'value'}) - translated = translate(check) - assert translated.description == 'sample check value' - assert translated.result == Result.FAILED - assert translated.parameters == {'key': 'value'} + assert check.translated_description == 'sample check value' check = DiagnosticCheck('some-check-id', 'sample check {missing}', Result.PASSED, {'key': 'value'}) - translated = translate(check) - assert translated.description == 'sample check ?missing?' + assert check.translated_description == 'sample check ?missing?' def test_json_encoder_decoder(): diff --git a/plinth/modules/diagnostics/views.py b/plinth/modules/diagnostics/views.py index b712dc7eb..f5b73103f 100644 --- a/plinth/modules/diagnostics/views.py +++ b/plinth/modules/diagnostics/views.py @@ -17,7 +17,7 @@ from plinth.app import App from plinth.modules import diagnostics from plinth.views import AppView -from .check import Result, translate_checks +from .check import Result logger = logging.getLogger(__name__) @@ -83,8 +83,6 @@ def diagnose_app(request, app_id): exception) diagnosis_exception = str(exception) - # Translate and format diagnostic check descriptions - diagnosis = translate_checks(diagnosis) show_rerun_setup = False for check in diagnosis: if check.result in [Result.FAILED, Result.WARNING]: diff --git a/plinth/modules/firewall/tests/test_components.py b/plinth/modules/firewall/tests/test_components.py index 0b9053b4c..e4a53f303 100644 --- a/plinth/modules/firewall/tests/test_components.py +++ b/plinth/modules/firewall/tests/test_components.py @@ -8,8 +8,7 @@ from unittest.mock import call, patch import pytest from plinth.app import App -from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, - translate_checks) +from plinth.modules.diagnostics.check import DiagnosticCheck, Result from plinth.modules.firewall.components import (Firewall, FirewallLocalProtection) @@ -154,32 +153,32 @@ def test_diagnose(get_enabled_services, get_port_details): get_port_details.side_effect = get_port_details_side_effect firewall = Firewall('test-firewall-1', ports=['test-port1', 'test-port2'], is_external=False) - results = translate_checks(firewall.diagnose()) + results = firewall.diagnose() assert results == [ DiagnosticCheck( 'firewall-port-internal-test-port1', - 'Port test-port1 (1234/tcp, 1234/udp) available for internal ' + 'Port {name} ({details}) available for internal ' 'networks', Result.PASSED, { 'name': 'test-port1', 'details': '1234/tcp, 1234/udp' }), DiagnosticCheck( 'firewall-port-external-unavailable-test-port1', - 'Port test-port1 (1234/tcp, 1234/udp) unavailable for external ' + 'Port {name} ({details}) unavailable for external ' 'networks', Result.PASSED, { 'name': 'test-port1', 'details': '1234/tcp, 1234/udp' }), DiagnosticCheck( 'firewall-port-internal-test-port2', - 'Port test-port2 (2345/udp) available for internal networks', + 'Port {name} ({details}) available for internal networks', Result.FAILED, { 'name': 'test-port2', 'details': '2345/udp' }), DiagnosticCheck( 'firewall-port-external-unavailable-test-port2', - 'Port test-port2 (2345/udp) unavailable for external networks', + 'Port {name} ({details}) unavailable for external networks', Result.FAILED, { 'name': 'test-port2', 'details': '2345/udp' @@ -188,32 +187,32 @@ def test_diagnose(get_enabled_services, get_port_details): firewall = Firewall('test-firewall-1', ports=['test-port3', 'test-port4'], is_external=True) - results = translate_checks(firewall.diagnose()) + results = firewall.diagnose() assert results == [ DiagnosticCheck( 'firewall-port-internal-test-port3', - 'Port test-port3 (3456/tcp) available for internal networks', + 'Port {name} ({details}) available for internal networks', Result.PASSED, { 'name': 'test-port3', 'details': '3456/tcp' }), DiagnosticCheck( 'firewall-port-external-available-test-port3', - 'Port test-port3 (3456/tcp) available for external networks', + 'Port {name} ({details}) available for external networks', Result.PASSED, { 'name': 'test-port3', 'details': '3456/tcp' }), DiagnosticCheck( 'firewall-port-internal-test-port4', - 'Port test-port4 (4567/udp) available for internal networks', + 'Port {name} ({details}) available for internal networks', Result.FAILED, { 'name': 'test-port4', 'details': '4567/udp' }), DiagnosticCheck( 'firewall-port-external-available-test-port4', - 'Port test-port4 (4567/udp) available for external networks', + 'Port {name} ({details}) available for external networks', Result.FAILED, { 'name': 'test-port4', 'details': '4567/udp' diff --git a/plinth/tests/test_config.py b/plinth/tests/test_config.py index b1e6a2342..08376d358 100644 --- a/plinth/tests/test_config.py +++ b/plinth/tests/test_config.py @@ -9,8 +9,7 @@ import pytest from plinth.app import App from plinth.config import DropinConfigs -from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, - translate_checks) +from plinth.modules.diagnostics.check import DiagnosticCheck, Result pytestmark = pytest.mark.usefixtures('mock_privileged') privileged_modules_to_mock = ['plinth.privileged.config'] @@ -161,16 +160,15 @@ def test_dropin_config_diagnose_symlinks(dropin_configs, tmp_path): """Test diagnosing dropin configs for symlinks.""" with patch('plinth.config.DropinConfigs.ROOT', new=tmp_path): # Nothing exists - results = translate_checks(dropin_configs.diagnose()) + results = dropin_configs.diagnose() assert results == [ DiagnosticCheck( f'dropin-config-{tmp_path}/etc/test/path1', - f'Static configuration {tmp_path}/etc/test/path1 is setup ' - 'properly', Result.FAILED, - {'etc_path': f'{tmp_path}/etc/test/path1'}), + 'Static configuration {etc_path} is setup properly', + Result.FAILED, {'etc_path': f'{tmp_path}/etc/test/path1'}), DiagnosticCheck( f'dropin-config-{tmp_path}/etc/path2', - f'Static configuration {tmp_path}/etc/path2 is setup properly', + 'Static configuration {etc_path} is setup properly', Result.FAILED, {'etc_path': f'{tmp_path}/etc/path2'}), ] diff --git a/plinth/tests/test_daemon.py b/plinth/tests/test_daemon.py index 596c8a81b..fd745e8ca 100644 --- a/plinth/tests/test_daemon.py +++ b/plinth/tests/test_daemon.py @@ -12,8 +12,7 @@ import pytest from plinth.app import App, FollowerComponent, Info from plinth.daemon import (Daemon, RelatedDaemon, app_is_running, diagnose_netcat, diagnose_port_listening) -from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, - translate, translate_checks) +from plinth.modules.diagnostics.check import DiagnosticCheck, Result privileged_modules_to_mock = ['plinth.privileged.service'] @@ -149,10 +148,10 @@ def test_diagnose(port_listening, service_is_running, daemon): (345, 'udp')]) port_listening.side_effect = side_effect service_is_running.return_value = True - results = translate_checks(daemon.diagnose()) + results = daemon.diagnose() assert results == [ DiagnosticCheck('daemon-running-test-unit', - 'Service test-unit is running', Result.PASSED, + 'Service {service_name} is running', Result.PASSED, {'service_name': 'test-unit'}), DiagnosticCheck('test-result-8273-tcp4', 'test-result-8273-tcp4', Result.PASSED), @@ -215,34 +214,34 @@ def test_diagnose_port_listening(connections): ] # Check that message is correct - results = translate(diagnose_port_listening(1234)) + results = diagnose_port_listening(1234) assert results == DiagnosticCheck('daemon-listening-tcp-1234', - 'Listening on tcp port 1234', + 'Listening on {kind} port {port}', Result.PASSED, { 'kind': 'tcp', 'port': 1234 }) - results = translate(diagnose_port_listening(1234, 'tcp', '0.0.0.0')) + results = diagnose_port_listening(1234, 'tcp', '0.0.0.0') assert results == DiagnosticCheck( 'daemon-listening-address-tcp-1234-0.0.0.0', - 'Listening on tcp port 0.0.0.0:1234', Result.PASSED, { + 'Listening on {kind} port {listen_address}:{port}', Result.PASSED, { 'kind': 'tcp', 'port': 1234, 'listen_address': '0.0.0.0' }) # Failed results - results = translate(diagnose_port_listening(4321)) + results = diagnose_port_listening(4321) assert results == DiagnosticCheck('daemon-listening-tcp-4321', - 'Listening on tcp port 4321', + 'Listening on {kind} port {port}', Result.FAILED, { 'kind': 'tcp', 'port': 4321 }) - results = translate(diagnose_port_listening(4321, 'tcp', '0.0.0.0')) + results = diagnose_port_listening(4321, 'tcp', '0.0.0.0') assert results == DiagnosticCheck( 'daemon-listening-address-tcp-4321-0.0.0.0', - 'Listening on tcp port 0.0.0.0:4321', Result.FAILED, { + 'Listening on {kind} port {listen_address}:{port}', Result.FAILED, { 'kind': 'tcp', 'port': 4321, 'listen_address': '0.0.0.0' diff --git a/plinth/tests/test_package.py b/plinth/tests/test_package.py index a431c4c4c..76ec16f44 100644 --- a/plinth/tests/test_package.py +++ b/plinth/tests/test_package.py @@ -10,8 +10,7 @@ import pytest from plinth.app import App from plinth.errors import MissingPackageError -from plinth.modules.diagnostics.check import (DiagnosticCheck, Result, - translate_checks) +from plinth.modules.diagnostics.check import DiagnosticCheck, Result from plinth.package import Package, Packages, packages_installed @@ -239,33 +238,37 @@ def test_diagnose(cache): Package('package4') | Package('package5'), Package('package6') | Package('package7') ]) - results = translate_checks(component.diagnose()) + results = component.diagnose() assert results == [ - DiagnosticCheck('package-available-package1', - 'Package package1 is not available for install', - Result.FAILED, {'package_expression': 'package1'}), - DiagnosticCheck('package-latest-package2', - 'Package package2 is the latest version (2.0)', - Result.PASSED, { - 'package_name': 'package2', - 'latest_version': '2.0' - }), - DiagnosticCheck('package-latest-package3', - 'Package package3 is the latest version (3.0)', - Result.WARNING, { - 'package_name': 'package3', - 'latest_version': '3.0' - }), + DiagnosticCheck( + 'package-available-package1', + 'Package {package_expression} is not available for install', + Result.FAILED, {'package_expression': 'package1'}), + DiagnosticCheck( + 'package-latest-package2', + 'Package {package_name} is the latest version ({latest_version})', + Result.PASSED, { + 'package_name': 'package2', + 'latest_version': '2.0' + }), + DiagnosticCheck( + 'package-latest-package3', + 'Package {package_name} is the latest version ({latest_version})', + Result.WARNING, { + 'package_name': 'package3', + 'latest_version': '3.0' + }), DiagnosticCheck( 'package-available-package4 | package5', - 'Package package4 | package5 is not available for install', + 'Package {package_expression} is not available for install', Result.FAILED, {'package_expression': 'package4 | package5'}), - DiagnosticCheck('package-latest-package7', - 'Package package7 is the latest version (4.0)', - Result.PASSED, { - 'package_name': 'package7', - 'latest_version': '4.0' - }), + DiagnosticCheck( + 'package-latest-package7', + 'Package {package_name} is the latest version ({latest_version})', + Result.PASSED, { + 'package_name': 'package7', + 'latest_version': '4.0' + }), ] From ba145b3194ef8af1dd3f24b3167206f724fd04be Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 18 Jan 2024 22:04:42 -0800 Subject: [PATCH 06/13] diagnostics: Safely access results when showing notification It is best to have obtained the results lock when counting the severe failures in diagnostic results. Tests: - When some packages are outdated, notification is shown with warning severity. Signed-off-by: Sunil Mohan Adapa --- plinth/modules/diagnostics/__init__.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/plinth/modules/diagnostics/__init__.py b/plinth/modules/diagnostics/__init__.py index 5117cb20b..410963e65 100644 --- a/plinth/modules/diagnostics/__init__.py +++ b/plinth/modules/diagnostics/__init__.py @@ -271,19 +271,18 @@ def _run_diagnostics(): kvstore.set('diagnostics_results', json.dumps(results, cls=CheckJSONEncoder)) - issue_count = 0 - severity = 'warning' - for _app_id, app_data in results.items(): - if app_data['exception']: - issue_count += 1 - severity = 'error' - else: - for check in app_data['diagnosis']: - if check.result != Result.PASSED: - if check.result != Result.WARNING: - severity = 'error' - - issue_count += 1 + issue_count = 0 + severity = 'warning' + for _app_id, app_data in results.items(): + if app_data['exception']: + issue_count += 1 + severity = 'error' + else: + for check in app_data['diagnosis']: + if check.result != Result.PASSED: + issue_count += 1 + if check.result != Result.WARNING: + severity = 'error' if not issue_count: # Remove any previous notifications if there are no issues. From acc498cb909db9720e5b80e35e19dfd0ffa80de6 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 18 Jan 2024 22:08:03 -0800 Subject: [PATCH 07/13] diagnostics: Fix a potential iteration of None value in error cases - Prompted by pylint. Signed-off-by: Sunil Mohan Adapa --- plinth/modules/diagnostics/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plinth/modules/diagnostics/__init__.py b/plinth/modules/diagnostics/__init__.py index 410963e65..473fd86fe 100644 --- a/plinth/modules/diagnostics/__init__.py +++ b/plinth/modules/diagnostics/__init__.py @@ -125,7 +125,7 @@ def _run_on_all_enabled_modules(): for current_index, (app_id, app) in enumerate(apps): app_results = { - 'diagnosis': None, + 'diagnosis': [], 'exception': None, 'show_rerun_setup': False, } From 9c5491de7e3635d64eef2405dd0abdcfe8885bbb Mon Sep 17 00:00:00 2001 From: Benedek Nagy Date: Sun, 14 Jan 2024 15:20:04 +0100 Subject: [PATCH 08/13] zoph: Fix failing PHP configuration requirements I tested both fresh install and updating an existing installation. When updating an existing instance, the app had to be manually enabled, so I added: ``` elif old_version < 2: self.enable() ``` Fixes: #2345 Signed-off-by: Benedek Nagy [sunil: Change the config name to zoph-freedombox.php] [sunil: Enable the config during update only if app is already enabled] Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa --- plinth/modules/zoph/__init__.py | 14 +++++++++++++- .../apache2/conf-available/zoph-freedombox.conf | 5 +++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 plinth/modules/zoph/data/usr/share/freedombox/etc/apache2/conf-available/zoph-freedombox.conf diff --git a/plinth/modules/zoph/__init__.py b/plinth/modules/zoph/__init__.py index 2dd82f7d7..85aec2b00 100644 --- a/plinth/modules/zoph/__init__.py +++ b/plinth/modules/zoph/__init__.py @@ -7,6 +7,7 @@ from django.utils.translation import gettext_lazy as _ from plinth import app as app_module from plinth import cfg, frontpage, menu +from plinth.config import DropinConfigs from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall @@ -42,7 +43,7 @@ class ZophApp(app_module.App): app_id = 'zoph' - _version = 1 + _version = 2 def __init__(self): """Create components for the app.""" @@ -76,10 +77,18 @@ class ZophApp(app_module.App): ports=['http', 'https'], is_external=True) self.add(firewall) + dropin_configs = DropinConfigs('dropin-configs-zoph', [ + '/etc/apache2/conf-available/zoph-freedombox.conf', + ]) + self.add(dropin_configs) + webserver = Webserver('webserver-zoph', 'zoph', urls=['https://{host}/zoph/']) self.add(webserver) + webserver = Webserver('webserver-zoph-freedombox', 'zoph-freedombox') + self.add(webserver) + backup_restore = ZophBackupRestore('backup-restore-zoph', **manifest.backup) self.add(backup_restore) @@ -91,6 +100,9 @@ class ZophApp(app_module.App): privileged.setup() if not old_version: self.enable() + elif old_version < 2: + if self.get_component('webserver-zoph').is_enabled(): + self.enable() class ZophBackupRestore(BackupRestore): diff --git a/plinth/modules/zoph/data/usr/share/freedombox/etc/apache2/conf-available/zoph-freedombox.conf b/plinth/modules/zoph/data/usr/share/freedombox/etc/apache2/conf-available/zoph-freedombox.conf new file mode 100644 index 000000000..25cf0f72c --- /dev/null +++ b/plinth/modules/zoph/data/usr/share/freedombox/etc/apache2/conf-available/zoph-freedombox.conf @@ -0,0 +1,5 @@ + + + ProxyFCGISetEnvIf true PHP_VALUE "max_execution_time = 100 \n upload_max_filesize = 16M \n post_max_size = 16M" + + From d7907e0ef378ef8cbb7caa8f56bddc525dc5990a Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sat, 20 Jan 2024 10:24:44 -0500 Subject: [PATCH 09/13] diagnostics: Add option to toggle daily run The option is stored in kvstore. If no value is set, it is assumed to be enabled. Tests: - Disable daily run. In development mode, diagnostic are not run after several minutes. - Enable daily run. In development mode, diagnostics are run after several minutes. Signed-off-by: James Valleroy [sunil: Minor refactoring and update messages in UI] Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa --- plinth/modules/diagnostics/__init__.py | 21 ++++++++++++++- plinth/modules/diagnostics/forms.py | 12 +++++++++ .../diagnostics/templates/diagnostics.html | 7 ++--- plinth/modules/diagnostics/views.py | 27 ++++++++++++++----- 4 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 plinth/modules/diagnostics/forms.py diff --git a/plinth/modules/diagnostics/__init__.py b/plinth/modules/diagnostics/__init__.py index 473fd86fe..cdef381a5 100644 --- a/plinth/modules/diagnostics/__init__.py +++ b/plinth/modules/diagnostics/__init__.py @@ -68,7 +68,7 @@ class DiagnosticsApp(app_module.App): glib.schedule(3600, _warn_about_low_ram_space) # Run diagnostics once a day - glib.schedule(24 * 3600, start_diagnostics, in_thread=False) + glib.schedule(24 * 3600, _daily_diagnostics_run, in_thread=False) def setup(self, old_version): """Install and configure the app.""" @@ -246,6 +246,15 @@ def _warn_about_low_ram_space(request): actions=actions, data=data, group='admin') +def _daily_diagnostics_run(data: None = None): + """Start daily run if enabled.""" + if is_daily_run_enabled(): + logger.info('Starting daily diagnostics run') + start_diagnostics() + else: + logger.info('Skipping daily diagnostics run (disabled)') + + def start_diagnostics(data: None = None): """Start full diagnostics as a background operation.""" logger.info('Running full diagnostics') @@ -343,3 +352,13 @@ def get_results(): results['results'][app_id]['name'] = app.info.name or app_id return results + + +def is_daily_run_enabled() -> bool: + """Return whether daily run is enabled.""" + return kvstore.get_default('diagnostics_daily_run_enabled', True) + + +def set_daily_run_enabled(enabled: bool): + """Enable or disable daily run.""" + kvstore.set('diagnostics_daily_run_enabled', enabled) diff --git a/plinth/modules/diagnostics/forms.py b/plinth/modules/diagnostics/forms.py new file mode 100644 index 000000000..21f2ba25a --- /dev/null +++ b/plinth/modules/diagnostics/forms.py @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Forms for configuring diagnostics.""" + +from django import forms +from django.utils.translation import gettext_lazy as _ + + +class ConfigureForm(forms.Form): + """Configuration form to enable/disable daily diagnostics run.""" + daily_run_enabled = forms.BooleanField( + label=_('Enable daily run'), required=False, + help_text=_('When enabled, diagnostic checks will run once a day.')) diff --git a/plinth/modules/diagnostics/templates/diagnostics.html b/plinth/modules/diagnostics/templates/diagnostics.html index 03412c641..b7fd620c0 100644 --- a/plinth/modules/diagnostics/templates/diagnostics.html +++ b/plinth/modules/diagnostics/templates/diagnostics.html @@ -6,14 +6,15 @@ {% load i18n %} {% load static %} -{% block configuration %} +{% block extra_content %} +

{% trans "Diagnostics Run" %}

{% csrf_token %} - +
{% if results_available %} diff --git a/plinth/modules/diagnostics/views.py b/plinth/modules/diagnostics/views.py index f5b73103f..c9bd1ab8b 100644 --- a/plinth/modules/diagnostics/views.py +++ b/plinth/modules/diagnostics/views.py @@ -5,9 +5,9 @@ FreedomBox app for running diagnostics. import logging -from django.http import Http404, HttpResponseRedirect +from django.contrib import messages +from django.http import Http404 from django.template.response import TemplateResponse -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from django.views.decorators.http import require_POST from django.views.generic import TemplateView @@ -18,6 +18,7 @@ from plinth.modules import diagnostics from plinth.views import AppView from .check import Result +from .forms import ConfigureForm logger = logging.getLogger(__name__) @@ -26,13 +27,9 @@ class DiagnosticsView(AppView): """Diagnostics app page.""" app_id = 'diagnostics' + form_class = ConfigureForm template_name = 'diagnostics.html' - def post(self, request): - """Start diagnostics.""" - diagnostics.start_diagnostics() - return HttpResponseRedirect(reverse('diagnostics:index')) - def get_context_data(self, **kwargs): """Return additional context for rendering the template.""" context = super().get_context_data(**kwargs) @@ -40,6 +37,22 @@ class DiagnosticsView(AppView): context['results_available'] = diagnostics.are_results_available() return context + def get_initial(self): + """Return the initial values for the form.""" + status = super().get_initial() + status['daily_run_enabled'] = diagnostics.is_daily_run_enabled() + return status + + def form_valid(self, form): + """Apply the form changes.""" + old_status = form.initial + new_status = form.cleaned_data + if old_status['daily_run_enabled'] != new_status['daily_run_enabled']: + diagnostics.set_daily_run_enabled(new_status['daily_run_enabled']) + messages.success(self.request, _('Configuration updated.')) + + return super().form_valid(form) + class DiagnosticsFullView(TemplateView): """View to run full diagnostics.""" From c96c97166f0179c600ae2198688d2f394a829bb4 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Tue, 23 Jan 2024 11:40:57 -0800 Subject: [PATCH 10/13] glib: Change API for repeating an in-thread scheduled task Previously, in glib.schedule(), when in_thread is set to True, it is expected that the task method return whether it wants to be repeated (True) or not (False). However, this was not documented and different from the behavior of the separate-thread task (passed as argument repeat=). To simply and improve consistency, use the repeat= argument instead of return value from the method. This fixes issue with daily diagnostics not running for the second time. Signed-off-by: Sunil Mohan Adapa --- plinth/glib.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plinth/glib.py b/plinth/glib.py index 77721f713..5ef5fbec8 100644 --- a/plinth/glib.py +++ b/plinth/glib.py @@ -65,7 +65,8 @@ def schedule(interval, method, data=None, in_thread=True, repeat=True, def _run_bare_or_thread(_user_data): """Run the target method in thread or directly (if async).""" if not in_thread: - return _runner() + _runner() + return repeat thread = threading.Thread(target=_runner) thread.start() From f88914116b053ea0d10d616a1e64b0f7c661aef2 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 29 Jan 2024 20:14:57 -0500 Subject: [PATCH 11/13] locale: Update translation strings Signed-off-by: James Valleroy --- plinth/locale/ar/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/ar_SA/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/be/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/bg/LC_MESSAGES/django.po | 193 ++++++++++-------- plinth/locale/bn/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/cs/LC_MESSAGES/django.po | 192 ++++++++++-------- plinth/locale/da/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/de/LC_MESSAGES/django.po | 193 ++++++++++-------- plinth/locale/django.pot | 181 +++++++++-------- plinth/locale/el/LC_MESSAGES/django.po | 191 +++++++++-------- plinth/locale/es/LC_MESSAGES/django.po | 193 ++++++++++-------- plinth/locale/fa/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/fake/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/fr/LC_MESSAGES/django.po | 214 +++++++++++--------- plinth/locale/gl/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/gu/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/hi/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/hu/LC_MESSAGES/django.po | 190 +++++++++-------- plinth/locale/id/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/it/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/ja/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/kn/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/lt/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/lv/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/nb/LC_MESSAGES/django.po | 192 ++++++++++-------- plinth/locale/nl/LC_MESSAGES/django.po | 194 ++++++++++-------- plinth/locale/pl/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/pt/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/ru/LC_MESSAGES/django.po | 193 ++++++++++-------- plinth/locale/si/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/sl/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/sq/LC_MESSAGES/django.po | 193 ++++++++++-------- plinth/locale/sr/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/sv/LC_MESSAGES/django.po | 192 ++++++++++-------- plinth/locale/ta/LC_MESSAGES/django.po | 181 +++++++++-------- plinth/locale/te/LC_MESSAGES/django.po | 189 +++++++++-------- plinth/locale/tr/LC_MESSAGES/django.po | 193 ++++++++++-------- plinth/locale/uk/LC_MESSAGES/django.po | 192 ++++++++++-------- plinth/locale/vi/LC_MESSAGES/django.po | 185 +++++++++-------- plinth/locale/zh_Hans/LC_MESSAGES/django.po | 187 +++++++++-------- plinth/locale/zh_Hant/LC_MESSAGES/django.po | 181 +++++++++-------- 41 files changed, 4255 insertions(+), 3425 deletions(-) diff --git a/plinth/locale/ar/LC_MESSAGES/django.po b/plinth/locale/ar/LC_MESSAGES/django.po index 29ada04c5..a93082a59 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-10-19 06:18+0000\n" "Last-Translator: Shaik \n" "Language-Team: Arabic Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4903,14 +4918,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4921,15 +4936,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6202,7 +6217,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6211,13 +6226,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6225,31 +6240,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6345,7 +6360,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "خطأ أثناء تثبيت التطبيق: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6354,20 +6369,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6708,14 +6723,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6723,25 +6738,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7320,7 +7335,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7333,7 +7348,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7341,11 +7356,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7394,34 +7409,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/ar_SA/LC_MESSAGES/django.po b/plinth/locale/ar_SA/LC_MESSAGES/django.po index 3a9dd3905..c154ba303 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2020-06-10 15:41+0000\n" "Last-Translator: aiman an \n" "Language-Team: Arabic (Saudi Arabia) Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4908,14 +4923,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4926,15 +4941,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6207,7 +6222,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6216,13 +6231,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6230,31 +6245,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6350,7 +6365,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "خطأ في تثبيت التطبيق:{error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6359,20 +6374,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6713,14 +6728,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6728,25 +6743,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7325,7 +7340,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7338,7 +7353,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7346,11 +7361,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7399,34 +7414,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/be/LC_MESSAGES/django.po b/plinth/locale/be/LC_MESSAGES/django.po index 1f996582c..d35b0bf3b 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -29,7 +29,7 @@ msgstr "" msgid "FreedomBox" msgstr "" -#: plinth/daemon.py:107 +#: plinth/daemon.py:105 #, python-brace-format msgid "Service {service_name} is running" msgstr "" @@ -39,17 +39,17 @@ msgstr "" msgid "Listening on {kind} port {listen_address}:{port}" msgstr "" -#: plinth/daemon.py:169 +#: plinth/daemon.py:167 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "" -#: plinth/daemon.py:238 +#: plinth/daemon.py:236 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "" -#: plinth/daemon.py:241 +#: plinth/daemon.py:240 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "" @@ -122,7 +122,7 @@ msgstr "" msgid "Access URL {url} on tcp{kind}" msgstr "" -#: plinth/modules/apache/components.py:158 +#: plinth/modules/apache/components.py:157 #, python-brace-format msgid "Access URL {url}" msgstr "" @@ -834,10 +834,10 @@ msgstr "" msgid "Admin" msgstr "" -#: plinth/modules/bepasty/views.py:88 plinth/modules/searx/views.py:35 -#: plinth/modules/searx/views.py:46 plinth/modules/security/views.py:56 -#: plinth/modules/tor/views.py:73 plinth/modules/torproxy/views.py:71 -#: plinth/modules/zoph/views.py:74 +#: plinth/modules/bepasty/views.py:88 plinth/modules/diagnostics/views.py:52 +#: plinth/modules/searx/views.py:35 plinth/modules/searx/views.py:46 +#: plinth/modules/security/views.py:56 plinth/modules/tor/views.py:73 +#: plinth/modules/torproxy/views.py:71 plinth/modules/zoph/views.py:74 msgid "Configuration updated." msgstr "" @@ -1269,17 +1269,17 @@ msgstr "" msgid "Use the following shared authentication secret:" msgstr "" -#: plinth/modules/datetime/__init__.py:20 +#: plinth/modules/datetime/__init__.py:21 msgid "" "Network time server is a program that maintains the system time in " "synchronization with servers on the Internet." msgstr "" -#: plinth/modules/datetime/__init__.py:67 +#: plinth/modules/datetime/__init__.py:68 msgid "Date & Time" msgstr "" -#: plinth/modules/datetime/__init__.py:121 +#: plinth/modules/datetime/__init__.py:122 msgid "Time synchronized to NTP server" msgstr "" @@ -1338,88 +1338,99 @@ msgstr "" msgid "Bittorrent client written in Python/PyGTK" msgstr "" -#: plinth/modules/diagnostics/__init__.py:25 +#: plinth/modules/diagnostics/__init__.py:27 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" -#: plinth/modules/diagnostics/__init__.py:49 -#: plinth/modules/diagnostics/__init__.py:235 +#: plinth/modules/diagnostics/__init__.py:51 +#: plinth/modules/diagnostics/__init__.py:236 msgid "Diagnostics" msgstr "" -#: plinth/modules/diagnostics/__init__.py:93 +#: plinth/modules/diagnostics/__init__.py:95 msgid "passed" msgstr "" -#: plinth/modules/diagnostics/__init__.py:94 +#: plinth/modules/diagnostics/__init__.py:96 #: plinth/modules/networks/views.py:50 msgid "failed" msgstr "" -#: plinth/modules/diagnostics/__init__.py:95 +#: plinth/modules/diagnostics/__init__.py:97 msgid "error" msgstr "" -#: plinth/modules/diagnostics/__init__.py:96 +#: plinth/modules/diagnostics/__init__.py:98 msgid "warning" msgstr "" #. Translators: This is the unit of computer storage Mebibyte similar to #. Megabyte. -#: plinth/modules/diagnostics/__init__.py:201 +#: plinth/modules/diagnostics/__init__.py:202 msgid "MiB" msgstr "" #. Translators: This is the unit of computer storage Gibibyte similar to #. Gigabyte. -#: plinth/modules/diagnostics/__init__.py:206 +#: plinth/modules/diagnostics/__init__.py:207 msgid "GiB" msgstr "" -#: plinth/modules/diagnostics/__init__.py:213 +#: plinth/modules/diagnostics/__init__.py:214 msgid "You should disable some apps to reduce memory usage." msgstr "" -#: plinth/modules/diagnostics/__init__.py:218 +#: plinth/modules/diagnostics/__init__.py:219 msgid "You should not install any new apps on this system." msgstr "" -#: plinth/modules/diagnostics/__init__.py:230 +#: plinth/modules/diagnostics/__init__.py:231 #, no-python-format, python-brace-format msgid "" "System is low on memory: {percent_used}% used, {memory_available} " "{memory_available_unit} free. {advice_message}" msgstr "" -#: plinth/modules/diagnostics/__init__.py:232 +#: plinth/modules/diagnostics/__init__.py:233 msgid "Low Memory" msgstr "" -#: plinth/modules/diagnostics/__init__.py:254 +#: plinth/modules/diagnostics/__init__.py:264 msgid "Running diagnostics" msgstr "" -#: plinth/modules/diagnostics/__init__.py:295 +#: plinth/modules/diagnostics/__init__.py:307 #, no-python-format, python-brace-format msgid "Found {issue_count} issues during routine tests." msgstr "" -#: plinth/modules/diagnostics/__init__.py:296 +#: plinth/modules/diagnostics/__init__.py:308 msgid "Diagnostics results" msgstr "" -#: plinth/modules/diagnostics/__init__.py:301 +#: plinth/modules/diagnostics/__init__.py:313 msgid "Go to diagnostics results" msgstr "" -#: plinth/modules/diagnostics/templates/diagnostics.html:16 -#: plinth/modules/diagnostics/templates/diagnostics_button.html:11 -msgid "Run Diagnostics" +#: plinth/modules/diagnostics/forms.py:11 +msgid "Enable daily run" msgstr "" -#: plinth/modules/diagnostics/templates/diagnostics.html:21 +#: plinth/modules/diagnostics/forms.py:12 +msgid "When enabled, diagnostic checks will run once a day." +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:11 +msgid "Diagnostics Run" +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:17 +msgid "Run Diagnostics Now" +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:22 msgid "View Results" msgstr "" @@ -1442,6 +1453,10 @@ msgstr "" msgid "This app does not support diagnostics" msgstr "" +#: plinth/modules/diagnostics/templates/diagnostics_button.html:11 +msgid "Run Diagnostics" +msgstr "" + #: plinth/modules/diagnostics/templates/diagnostics_full.html:17 msgid "Re-run Diagnostics" msgstr "" @@ -1471,7 +1486,7 @@ msgstr "" msgid "Result" msgstr "" -#: plinth/modules/diagnostics/views.py:100 +#: plinth/modules/diagnostics/views.py:107 msgid "Diagnostic Test" msgstr "" @@ -1977,7 +1992,7 @@ msgstr "" msgid "Direct passthrough rules exist" msgstr "" -#: plinth/modules/firewall/components.py:137 +#: plinth/modules/firewall/components.py:136 #, python-brace-format msgid "Port {name} ({details}) available for internal networks" msgstr "" @@ -1987,7 +2002,7 @@ msgstr "" msgid "Port {name} ({details}) available for external networks" msgstr "" -#: plinth/modules/firewall/components.py:154 +#: plinth/modules/firewall/components.py:153 #, python-brace-format msgid "Port {name} ({details}) unavailable for external networks" msgstr "" @@ -2549,8 +2564,8 @@ msgstr "" msgid "I2P" msgstr "" -#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:62 -#: plinth/modules/torproxy/__init__.py:55 +#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:63 +#: plinth/modules/torproxy/__init__.py:56 msgid "Anonymity Network" msgstr "" @@ -2885,7 +2900,7 @@ msgstr "" msgid "Failed to add content package." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:25 +#: plinth/modules/letsencrypt/__init__.py:27 #, python-brace-format msgid "" "A digital certificate allows users of a web service to verify the identity " @@ -2895,7 +2910,7 @@ msgid "" "Encrypt, a certificate authority (CA)." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:31 +#: plinth/modules/letsencrypt/__init__.py:33 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public's benefit by the Internet Security Research Group (ISRG). Please " @@ -2903,15 +2918,15 @@ msgid "" "\">Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4896,14 +4911,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4914,15 +4929,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6195,7 +6210,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6204,13 +6219,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6218,31 +6233,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6337,7 +6352,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6346,20 +6361,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6700,14 +6715,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6715,25 +6730,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7312,7 +7327,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7325,7 +7340,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7333,11 +7348,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7386,34 +7401,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index da8f05d99..c1283b29e 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-09-18 19:00+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Сертификати" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Не може да бъде извършена проба: Не са настроени домейни." @@ -5162,14 +5186,14 @@ msgstr "" "target=\"_blank\">popcon.debian.org. За допълнителна анонимност данните " "се изпращат през мрежата на Тор, ако приложението Тор е включено." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5180,15 +5204,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6516,7 +6540,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Синхронизиране на файлове" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6525,13 +6549,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6539,31 +6563,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Тор" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Услуга на Тор Onion" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Транспортът Obfs3 е регистриран" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Транспортът Obfs4 е регистриран" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Услугата на Onion е версия 3" @@ -6678,7 +6702,7 @@ msgstr "Запазване на настройки" msgid "Error configuring app: {error}" msgstr "Грешка при настройка на приложението: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6687,20 +6711,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Прокси сървър на Тор" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Прокси сървър на Тор за SOCKS" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Достъп до {url} по tcp{kind} чрез Тор" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -7085,7 +7109,7 @@ msgstr "Честото обновяване на пакети е включен msgid "Starting distribution upgrade test." msgstr "Начало на опит за обновяване на дистрибуцията." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7096,7 +7120,7 @@ msgstr "" "получи достъп, някои приложения още имат изискване потребителският профил да " "бъде част от определена група." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7108,25 +7132,25 @@ msgstr "" "администратори могат да променят приложенията и настройките на " "системата." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Потребители и групи" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Достъп до всички услуги и системни настройки" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Проверете записа на LDAP „{search_item}“" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7724,7 +7748,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7737,7 +7761,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7745,11 +7769,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7800,34 +7824,35 @@ msgstr "Изчакване да започне: {name}" msgid "Finished: {name}" msgstr "Готово: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Пакетът „{expression}“ е недостъпен за инсталиране" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Времето за изчакване на диспечера на пакети е изтекло" diff --git a/plinth/locale/bn/LC_MESSAGES/django.po b/plinth/locale/bn/LC_MESSAGES/django.po index d82bd1a7c..298262cee 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2021-06-16 07:33+0000\n" "Last-Translator: Oymate \n" "Language-Team: Bengali Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "অনুমতিপত্র" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4926,14 +4947,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4944,15 +4965,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6227,7 +6248,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6236,13 +6257,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6250,31 +6271,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6371,7 +6392,7 @@ msgstr "পছন্দসমূহ" msgid "Error configuring app: {error}" msgstr "" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6380,20 +6401,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6734,14 +6755,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6749,25 +6770,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7346,7 +7367,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7359,7 +7380,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7367,11 +7388,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7420,34 +7441,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po index 696dbb65d..2ae388e3a 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-11-20 05:11+0000\n" "Last-Translator: Jiří Podhorecký \n" "Language-Team: Czech Podmínky používání Let's Encrypt." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Certifikáty" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Nelze testovat: Nejsou nakonfigurovány žádné domény." @@ -5581,7 +5604,7 @@ msgstr "" "popcon.debian.org/\" target=\"_blank\">popcon.debian.org. Odesílání " "probíhá přes síť Tor pro další anonymitu, pokud je povolena aplikace Tor." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5591,7 +5614,7 @@ msgstr "" "zlepšujícími soukromí, upravující data webových stánek a HTTP hlaviček, " "řídící přístup a odebírající reklamy a ostatní otravné Internetové smetí. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5608,15 +5631,15 @@ msgstr "" "org\">http://config.privoxy.org/ nebo http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Webová proxy" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Přistupte {url} s proxy {proxy} na tcp{kind}" @@ -7089,7 +7112,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Synchronizace souborů" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7103,7 +7126,7 @@ msgstr "" "prohlížeč Tor Browser." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." @@ -7111,7 +7134,7 @@ msgstr "" "Tato aplikace poskytuje přenosové služby, které přispívají k síti Tor a " "pomáhají ostatním překonat cenzuru." -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7123,31 +7146,31 @@ msgstr "" "z internetu, i když používáte poskytovatele internetového připojení, který " "omezuje servery doma." -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Tor Onion Service" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Předávájící Tor most" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Port Tor předávání k dispozici" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 transport zaregistrován" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 transport zaregistrován" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Onion service je verze 3" @@ -7258,7 +7281,7 @@ msgstr "Aktualizace konfigurace" msgid "Error configuring app: {error}" msgstr "Chyba při konfiguraci aplikace: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7271,20 +7294,20 @@ msgstr "" "aplikace pro přístup k internetu prostřednictvím sítě Tor. Cenzuru " "poskytovatelů internetových služeb lze obejít pomocí upstreamových mostů." -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Tor Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Tor Socks proxy" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Přistoupit k URL adrese {url} na tcp{kind} prostřednictvím Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Potvrďte použití Tor na adrese {url} na tcp{kind}" @@ -7685,7 +7708,7 @@ msgstr "Aktivovány časté aktualizace funkcí." msgid "Starting distribution upgrade test." msgstr "Zahájení testu aktualizace distribuce." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7696,7 +7719,7 @@ msgstr "" "aby uživatelský účet byl součástí skupiny, která uživatele opravňuje k " "přístupu k aplikaci." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7708,25 +7731,25 @@ msgstr "" "nebo nastavení systému však mohou měnit pouze uživatelé skupiny admin." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Uživatelé a skupiny" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Přístup ke všem službám a nastavení systému" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Zkontrolujte LDAP položku „{search_item}“" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Zkontrolujte konfiguraci nslcd \"{key} {value}\"" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Zkontrolujte konfiguraci nsswitch \" {database}\"" @@ -8370,7 +8393,7 @@ msgstr "" "WordPress pouze správcům. Povolte pouze po provedení počátečního nastavení " "WordPressu." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8392,7 +8415,7 @@ msgstr "" "určitém místě. Jednotlivé fotografie lze sdílet s ostatními odesláním " "přímého odkazu." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8403,11 +8426,11 @@ msgstr "" "další uživatele musí být vytvořeny účty jak v {box_name}, tak v Zoph se " "stejným uživatelským jménem." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Organizér fotografií" @@ -8460,34 +8483,35 @@ msgstr "Čeká na spuštění: {name}" msgid "Finished: {name}" msgstr "Dokončeno: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Balíček {expression} není k dispozici pro instalaci" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "Balíček {package_name} je nejnovější verze ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "Instalace" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "stahování" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "změna média" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "soubor s nastaveními: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Časový limit čekání na správce balíčků" diff --git a/plinth/locale/da/LC_MESSAGES/django.po b/plinth/locale/da/LC_MESSAGES/django.po index d054aa01f..b20222276 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Danish Let's Encrypts abonnementsbetingelser inden tjenesten " "tages i anvendelse." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 #, fuzzy #| msgid "Certificate Status" msgid "Certificates" msgstr "Certifikat Status" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5625,7 +5646,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5636,7 +5657,7 @@ msgstr "" "HTTP-headers, styre adgang og fjerne reklamer og andet vedderstyggeligt " "internetskrald. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, fuzzy, python-brace-format #| msgid "" #| "You can use Privoxy by modifying your browser proxy settings to your " @@ -5658,19 +5679,19 @@ msgstr "" "på http://config.privoxy.org/ " "eller http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 #, fuzzy #| msgid "Enable Privoxy" msgid "Privoxy" msgstr "Aktiver Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 #, fuzzy #| msgid "Privoxy Web Proxy" msgid "Web Proxy" msgstr "Privoxy Webproxy" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Tilgå {url} med proxy {proxy} ved brug af tcp{kind}" @@ -7153,7 +7174,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7167,13 +7188,13 @@ msgstr "" "du bruger Tor-browseren." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7181,33 +7202,33 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 #, fuzzy #| msgid "Tor Hidden Service" msgid "Tor Onion Service" msgstr "Tor Skjult Tjeneste" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Tor Bridge Relay" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Tor videresendelsesport tilgængelig" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 transport registreret" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 transport registreret" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Hidden Service" msgid "Onion service is version 3" @@ -7319,7 +7340,7 @@ msgstr "Der opstod en fejl under konfigurationen." msgid "Error configuring app: {error}" msgstr "Kunne ikke installere applikation: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7328,22 +7349,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "I2P Proxy" msgid "Tor Proxy" msgstr "I2P Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Tilgå URL {url} ved brug af tcp{kind} via Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bekræft brug af Tor på {url} ved brug af tcp{kind}" @@ -7758,14 +7779,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Automatisk opdatering aktiveret" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7773,25 +7794,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Brugere og Grupper" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Kontrol af LDAP-konfiguration \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8464,7 +8485,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8477,7 +8498,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8485,11 +8506,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -8542,34 +8563,34 @@ msgstr "" msgid "Finished: {name}" msgstr "Tjeneste ikke aktiv: {name}" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "Installerer" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "downloader" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "medie-ændring" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "konfigurationsfil: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index f513c7328..263b29b19 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-10-30 10:00+0000\n" "Last-Translator: Ettore Atalan \n" "Language-Team: German Let's " "Encrypt Vetragsvereinbarungen vor der Verwendung dieses Dienstes." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Zertifikate" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Kann nicht testen: Es sind keine Domains konfiguriert." @@ -5703,7 +5727,7 @@ msgstr "" "org. Die Übermittlung erfolgt über das Tor-Netzwerk für zusätzliche " "Anonymität, wenn die Tor-App aktiviert ist." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5714,7 +5738,7 @@ msgstr "" "kontrolliert den Zugang und entfernt Werbung und anderen abscheulichen " "Internet-Müll. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5731,15 +5755,15 @@ msgstr "" "unter http://config.privoxy.org/ " "oder http://p.p einsehen." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Web Proxy" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Zugang auf {url} über Proxy {proxy} auf TCP{kind}" @@ -7245,7 +7269,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Dateisynchronisation" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7259,7 +7283,7 @@ msgstr "" "Sie den Tor Browser verwenden." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." @@ -7267,7 +7291,7 @@ msgstr "" "Diese App bietet Relay-Dienste, um zum Tor-Netzwerk beizutragen und anderen " "zu helfen, die Zensur zu überwinden." -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7279,31 +7303,31 @@ msgstr "" "auf {box_name} zugreifen, auch wenn man einen ISP benutzt, der die Server zu " "Hause begrenzt." -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Tor-Onion-Dienste" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Tor-Bridge-Relay" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Tor-Relay-Port ist verfügbar" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3-Transport registriert" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4-Transport registriert" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Onion-Dienst ist Version 3" @@ -7420,7 +7444,7 @@ msgstr "Aktualisieren der Konfiguration" msgid "Error configuring app: {error}" msgstr "Fehler beim Konfigurieren der App: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7434,20 +7458,20 @@ msgstr "" "Internet zuzugreifen. Die ISP-Zensur kann mit Upstream-Brücken umgangen " "werden." -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Tor-Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Tor-Socks-Proxy" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Zugangs-URL {url} auf TCP{kind} über Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Tor-Nutzung auf {url} über TCP{kind} bestätigen" @@ -7859,7 +7883,7 @@ msgstr "Häufige Funktions-Updates aktiviert." msgid "Starting distribution upgrade test." msgstr "Start des Tests zur Aktualisierung der Distribution." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7870,7 +7894,7 @@ msgstr "" "muss ein Benutzerkonto Teil einer Gruppe sein, damit ein Benutzer auf die " "App zugreifen kann." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7882,25 +7906,25 @@ msgstr "" "dürfen nur Mitglieder der Gruppe admin Apps oder " "Systemeinstellungen ändern." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Benutzer und Gruppen" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Zugriff auf alle Anwendungen und Systemeinstellungen" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP-Eintrag „{search_item}“ prüfen" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8565,7 +8589,7 @@ msgstr "" "Administratoren die WordPress-Website oder den Blog aufrufen. Aktivieren Sie " "diese Option erst nach der Ersteinrichtung von WordPress." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8590,7 +8614,7 @@ msgstr "" "Einzelne Fotos können mit anderen geteilt werden, indem ein direkter Link " "gesendet wird." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8601,11 +8625,11 @@ msgstr "" "Administrator in Zoph. Für zusätzliche Benutzer müssen Konten sowohl in " "{box_name} als auch in Zoph mit demselben Benutzernamen erstellt werden." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Foto-Manager" @@ -8659,34 +8683,35 @@ msgstr "Warten auf den Start: {name}" msgid "Finished: {name}" msgstr "Fertig: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Paket {expression} ist nicht verfügbar" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "Paket {package_name} ist die aktuellste Version ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "Installation läuft" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "herunterladen" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "Medienwechsel" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "Konfigurationsdatei: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Zeitüberschreitung beim Warten auf den Paket-Manager" diff --git a/plinth/locale/django.pot b/plinth/locale/django.pot index cf440118a..b1631c008 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -30,7 +30,7 @@ msgstr "" msgid "FreedomBox" msgstr "" -#: plinth/daemon.py:107 +#: plinth/daemon.py:105 #, python-brace-format msgid "Service {service_name} is running" msgstr "" @@ -40,17 +40,17 @@ msgstr "" msgid "Listening on {kind} port {listen_address}:{port}" msgstr "" -#: plinth/daemon.py:169 +#: plinth/daemon.py:167 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "" -#: plinth/daemon.py:238 +#: plinth/daemon.py:236 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "" -#: plinth/daemon.py:241 +#: plinth/daemon.py:240 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "" @@ -123,7 +123,7 @@ msgstr "" msgid "Access URL {url} on tcp{kind}" msgstr "" -#: plinth/modules/apache/components.py:158 +#: plinth/modules/apache/components.py:157 #, python-brace-format msgid "Access URL {url}" msgstr "" @@ -835,10 +835,10 @@ msgstr "" msgid "Admin" msgstr "" -#: plinth/modules/bepasty/views.py:88 plinth/modules/searx/views.py:35 -#: plinth/modules/searx/views.py:46 plinth/modules/security/views.py:56 -#: plinth/modules/tor/views.py:73 plinth/modules/torproxy/views.py:71 -#: plinth/modules/zoph/views.py:74 +#: plinth/modules/bepasty/views.py:88 plinth/modules/diagnostics/views.py:52 +#: plinth/modules/searx/views.py:35 plinth/modules/searx/views.py:46 +#: plinth/modules/security/views.py:56 plinth/modules/tor/views.py:73 +#: plinth/modules/torproxy/views.py:71 plinth/modules/zoph/views.py:74 msgid "Configuration updated." msgstr "" @@ -1270,17 +1270,17 @@ msgstr "" msgid "Use the following shared authentication secret:" msgstr "" -#: plinth/modules/datetime/__init__.py:20 +#: plinth/modules/datetime/__init__.py:21 msgid "" "Network time server is a program that maintains the system time in " "synchronization with servers on the Internet." msgstr "" -#: plinth/modules/datetime/__init__.py:67 +#: plinth/modules/datetime/__init__.py:68 msgid "Date & Time" msgstr "" -#: plinth/modules/datetime/__init__.py:121 +#: plinth/modules/datetime/__init__.py:122 msgid "Time synchronized to NTP server" msgstr "" @@ -1339,88 +1339,99 @@ msgstr "" msgid "Bittorrent client written in Python/PyGTK" msgstr "" -#: plinth/modules/diagnostics/__init__.py:25 +#: plinth/modules/diagnostics/__init__.py:27 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" -#: plinth/modules/diagnostics/__init__.py:49 -#: plinth/modules/diagnostics/__init__.py:235 +#: plinth/modules/diagnostics/__init__.py:51 +#: plinth/modules/diagnostics/__init__.py:236 msgid "Diagnostics" msgstr "" -#: plinth/modules/diagnostics/__init__.py:93 +#: plinth/modules/diagnostics/__init__.py:95 msgid "passed" msgstr "" -#: plinth/modules/diagnostics/__init__.py:94 +#: plinth/modules/diagnostics/__init__.py:96 #: plinth/modules/networks/views.py:50 msgid "failed" msgstr "" -#: plinth/modules/diagnostics/__init__.py:95 +#: plinth/modules/diagnostics/__init__.py:97 msgid "error" msgstr "" -#: plinth/modules/diagnostics/__init__.py:96 +#: plinth/modules/diagnostics/__init__.py:98 msgid "warning" msgstr "" #. Translators: This is the unit of computer storage Mebibyte similar to #. Megabyte. -#: plinth/modules/diagnostics/__init__.py:201 +#: plinth/modules/diagnostics/__init__.py:202 msgid "MiB" msgstr "" #. Translators: This is the unit of computer storage Gibibyte similar to #. Gigabyte. -#: plinth/modules/diagnostics/__init__.py:206 +#: plinth/modules/diagnostics/__init__.py:207 msgid "GiB" msgstr "" -#: plinth/modules/diagnostics/__init__.py:213 +#: plinth/modules/diagnostics/__init__.py:214 msgid "You should disable some apps to reduce memory usage." msgstr "" -#: plinth/modules/diagnostics/__init__.py:218 +#: plinth/modules/diagnostics/__init__.py:219 msgid "You should not install any new apps on this system." msgstr "" -#: plinth/modules/diagnostics/__init__.py:230 +#: plinth/modules/diagnostics/__init__.py:231 #, no-python-format, python-brace-format msgid "" "System is low on memory: {percent_used}% used, {memory_available} " "{memory_available_unit} free. {advice_message}" msgstr "" -#: plinth/modules/diagnostics/__init__.py:232 +#: plinth/modules/diagnostics/__init__.py:233 msgid "Low Memory" msgstr "" -#: plinth/modules/diagnostics/__init__.py:254 +#: plinth/modules/diagnostics/__init__.py:264 msgid "Running diagnostics" msgstr "" -#: plinth/modules/diagnostics/__init__.py:295 +#: plinth/modules/diagnostics/__init__.py:307 #, no-python-format, python-brace-format msgid "Found {issue_count} issues during routine tests." msgstr "" -#: plinth/modules/diagnostics/__init__.py:296 +#: plinth/modules/diagnostics/__init__.py:308 msgid "Diagnostics results" msgstr "" -#: plinth/modules/diagnostics/__init__.py:301 +#: plinth/modules/diagnostics/__init__.py:313 msgid "Go to diagnostics results" msgstr "" -#: plinth/modules/diagnostics/templates/diagnostics.html:16 -#: plinth/modules/diagnostics/templates/diagnostics_button.html:11 -msgid "Run Diagnostics" +#: plinth/modules/diagnostics/forms.py:11 +msgid "Enable daily run" msgstr "" -#: plinth/modules/diagnostics/templates/diagnostics.html:21 +#: plinth/modules/diagnostics/forms.py:12 +msgid "When enabled, diagnostic checks will run once a day." +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:11 +msgid "Diagnostics Run" +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:17 +msgid "Run Diagnostics Now" +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:22 msgid "View Results" msgstr "" @@ -1443,6 +1454,10 @@ msgstr "" msgid "This app does not support diagnostics" msgstr "" +#: plinth/modules/diagnostics/templates/diagnostics_button.html:11 +msgid "Run Diagnostics" +msgstr "" + #: plinth/modules/diagnostics/templates/diagnostics_full.html:17 msgid "Re-run Diagnostics" msgstr "" @@ -1472,7 +1487,7 @@ msgstr "" msgid "Result" msgstr "" -#: plinth/modules/diagnostics/views.py:100 +#: plinth/modules/diagnostics/views.py:107 msgid "Diagnostic Test" msgstr "" @@ -1978,7 +1993,7 @@ msgstr "" msgid "Direct passthrough rules exist" msgstr "" -#: plinth/modules/firewall/components.py:137 +#: plinth/modules/firewall/components.py:136 #, python-brace-format msgid "Port {name} ({details}) available for internal networks" msgstr "" @@ -1988,7 +2003,7 @@ msgstr "" msgid "Port {name} ({details}) available for external networks" msgstr "" -#: plinth/modules/firewall/components.py:154 +#: plinth/modules/firewall/components.py:153 #, python-brace-format msgid "Port {name} ({details}) unavailable for external networks" msgstr "" @@ -2550,8 +2565,8 @@ msgstr "" msgid "I2P" msgstr "" -#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:62 -#: plinth/modules/torproxy/__init__.py:55 +#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:63 +#: plinth/modules/torproxy/__init__.py:56 msgid "Anonymity Network" msgstr "" @@ -2886,7 +2901,7 @@ msgstr "" msgid "Failed to add content package." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:25 +#: plinth/modules/letsencrypt/__init__.py:27 #, python-brace-format msgid "" "A digital certificate allows users of a web service to verify the identity " @@ -2896,7 +2911,7 @@ msgid "" "Encrypt, a certificate authority (CA)." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:31 +#: plinth/modules/letsencrypt/__init__.py:33 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public's benefit by the Internet Security Research Group (ISRG). Please " @@ -2904,15 +2919,15 @@ msgid "" "\">Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4897,14 +4912,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4915,15 +4930,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6196,7 +6211,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6205,13 +6220,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6219,31 +6234,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6338,7 +6353,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6347,20 +6362,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6701,14 +6716,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6716,25 +6731,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7313,7 +7328,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7326,7 +7341,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7334,11 +7349,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7387,34 +7402,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/el/LC_MESSAGES/django.po b/plinth/locale/el/LC_MESSAGES/django.po index b3b48eb76..7f95fea68 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Greek Συμφωνία Συνδρομητή Lets Encrypt πριν από " "τη χρήση αυτής της υπηρεσίας." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Πιστοποιητικά" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5738,7 +5763,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5750,7 +5775,7 @@ msgstr "" "τον έλεγχο της πρόσβασης και την κατάργηση διαφημίσεων και άλλων " "ανεπιθύμητων μηνυμάτων στο Internet. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, fuzzy, python-brace-format #| msgid "" #| "You can use Privoxy by modifying your browser proxy settings to your " @@ -5773,15 +5798,15 @@ msgstr "" "href=\"http://config.privoxy.org\">http://config.privoxy.org/ ή http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Διακομιστής μεσολάβησης διαδικτύου" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -7350,7 +7375,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Συγχρονισμός αρχείων" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7364,13 +7389,13 @@ msgstr "" "Project συνιστά να χρησιμοποιήσετε το πρόγραμμα περιήγησης διαδικτύου Tor." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7378,31 +7403,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Υπηρεσία κρεμυδιού Tor" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Γέφυρα/μεσολαβητής Tor" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Θύρα μεσολαβητή Tor διαθέσιμη" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 μεταφορά καταχωρήθηκε" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 μεταφορά καταχωρήθηκε" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" @@ -7530,7 +7555,7 @@ msgstr "Παρουσιάστηκε σφάλμα κατά τη ρύθμιση π msgid "Error configuring app: {error}" msgstr "Σφάλμα κατά την εγκατάσταση της εφαρμογής: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7539,22 +7564,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "Tor Socks Proxy" msgid "Tor Proxy" msgstr "Tor διακομιστής μεσολάβησης τύπου socks5" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Tor διακομιστής μεσολάβησης τύπου socks5" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Πρόσβαση στη διεύθυνση URL {url} με tcp {kind} μέσω του Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Επιβεβαίωση χρήσης του Tor στο {url} στο προτόκολλο TCP {kind}" @@ -7978,7 +8003,7 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Oι αυτόματες ενημερώσεις ενεργοποιήθηκαν" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 #, fuzzy #| msgid "" #| "Create and managed user accounts. These accounts serve as centralized " @@ -7995,7 +8020,7 @@ msgstr "" "είναι μέρος μιας ομάδας για να εξουσιοδοτήσουν το χρήστη να αποκτήσει " "πρόσβαση στην εφαρμογή." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -8007,25 +8032,25 @@ msgstr "" "σελίδα. Ωστόσο, μόνο οι χρήστες της ομάδας admin μπορούν να " "τροποποιήσουν τις εφαρμογές ή τις ρυθμίσεις του συστήματος." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Χρήστες και ομάδες" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Πρόσβαση σε όλες τις υπηρεσίες και τις ρυθμίσεις συστήματος" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Ελέγξτε την καταχώρηση LDAP \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8711,7 +8736,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8724,7 +8749,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8732,11 +8757,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -8788,34 +8813,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "Εγκαθίσταται" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "Λήψη" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "Αλλαγή μέσου" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "αρχείο ρυθμίσεων: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/es/LC_MESSAGES/django.po b/plinth/locale/es/LC_MESSAGES/django.po index 09a6d4020..bb1c898d7 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2024-01-03 16:09+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Spanish Acuerdo de suscripción de Let's Encrypt " "antes de usar este servicio." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Certificados" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "No puedo probar: No hay dominios configurados." @@ -5617,7 +5641,7 @@ msgstr "" "target=\"_blank\">popcon.debian.org. La transmisión se realiza a través " "de la red Tor para mayor anonimato cuando la aplicación Tor está habilitada." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5628,7 +5652,7 @@ msgstr "" "cabeceras HTTP, controlar el acceso y eliminar publicidad y otra basura de " "Internet. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5645,15 +5669,15 @@ msgstr "" "config.privoxy.org\">http://config.privoxy.org/ o http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Proxy Web" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Acceso a {url} con proxy {proxy} en tcp {kind}" @@ -7134,7 +7158,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Sincronización de archivos" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7148,7 +7172,7 @@ msgstr "" "download/download-easy.html.en\">Navegador Tor para tener la mejor " "protección cuando navega por la red." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." @@ -7156,7 +7180,7 @@ msgstr "" "Esta aplicación proporciona servicios de retransmisión para contribuir a la " "red Tor y ayudar a otros a superar la censura." -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7168,31 +7192,31 @@ msgstr "" "a {box_name} desde internet incluso cuando se usa un ISP que limita los " "servidores en casa." -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Servicio Tor Onion" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Puente de retransmisión Tor" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Puerto de servidor Tor disponible" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Transporte Obfs3 registrado" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Transporte Obfs4 registrado" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Versión 3 para los servicios de Onion" @@ -7307,7 +7331,7 @@ msgstr "Actualizando la configuración" msgid "Error configuring app: {error}" msgstr "Error al configurar la aplicación: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7320,20 +7344,20 @@ msgstr "" "utilizado por varias aplicaciones para acceder a Internet a través de la red " "Tor. La censura del ISP puede eludirse usando puentes ascendentes." -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Proxy de Tor" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Proxy Socks para Tor" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Acceso a URL {url} sobre tcp {kind} vía Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Confirmar uso de Tor en {url} sobre tcp {kind}" @@ -7742,7 +7766,7 @@ msgstr "Las actualizaciones funcionales frecuentes están activadas." msgid "Starting distribution upgrade test." msgstr "Comenzando la prueba de la actualización de la distribución." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7753,7 +7777,7 @@ msgstr "" "requieren que además la cuenta de usuario conste en un grupo para " "autorizarles a acceder." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7765,25 +7789,25 @@ msgstr "" "sólo los usuarios del grupo admin pueden cambiar configuraciones de " "apps o del sistema." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Usuarias/os y grupos" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Acceso a todos los servicios y configuraciones del sistema" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Comprobar la entrada LDAP \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Comprobar la configuración de nslcd \"{key} {value}\"" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Comprueba la configuración del nsswitch \"{database}\"" @@ -8432,7 +8456,7 @@ msgstr "" "WordPress o blog a los administradores. Habilítalo solo después de ejecutar " "la configuración inicial de WordPress." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8454,7 +8478,7 @@ msgstr "" "de mapa y calendario. Se pueden compartir fotos sueltas con otras personas " "enviándoles un enlace directo." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8465,11 +8489,11 @@ msgstr "" "Para añadir más usuarios hay que crear cuentas con el mismo nombre tanto en " "Zoph como en {box_name} ." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Organizador de fotografías" @@ -8521,34 +8545,35 @@ msgstr "Esperando a empezar: {name}" msgid "Finished: {name}" msgstr "Terminó: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "El paquete {expression} no está disponible para instalar" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "El paquete {package_name} es la última versión ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "instalando" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "descargando" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "cambio de medio" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "archivo de configuración: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Tiempo máximo esperando al administrador de paquetes" diff --git a/plinth/locale/fa/LC_MESSAGES/django.po b/plinth/locale/fa/LC_MESSAGES/django.po index 7360d06ee..0f0f5435f 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Persian قرارداد اشتراک Let's Encrypt بخوانید و آن را بپذیرید." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 #, fuzzy #| msgid "Certificates (Let's Encrypt)" msgid "Let's Encrypt" msgstr "گواهی دیجیتال (Let's Encrypt)" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 #, fuzzy #| msgid "Certificate Status" msgid "Certificates" msgstr "وضعیت گواهی دیجیتال" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5442,14 +5463,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5460,15 +5481,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6852,7 +6873,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6861,13 +6882,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6875,31 +6896,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Service" msgid "Onion service is version 3" @@ -7003,7 +7024,7 @@ msgstr "پیکربندی فعلی شبکه" msgid "Error configuring app: {error}" msgstr "خطا هنگام نصب برنامه: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7012,20 +7033,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -7383,14 +7404,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "برنامه نصب شد." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7398,25 +7419,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8060,7 +8081,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8073,7 +8094,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8081,11 +8102,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -8137,34 +8158,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/fake/LC_MESSAGES/django.po b/plinth/locale/fake/LC_MESSAGES/django.po index f13b898fc..4ef4d3ba6 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2016-01-31 22:24+0530\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Plinth Developers LET'S ENCRYPT SUBSCRIBER AGREEMENT BEFORE USING THIS SERVICE." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 #, fuzzy #| msgid "Certificates (Let's Encrypt)" msgid "Let's Encrypt" msgstr "CERTIFICATES (LET'S ENCRYPT)" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 #, fuzzy #| msgid "Certificate Status" msgid "Certificates" msgstr "CERTIFICATE STATUS" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5698,7 +5719,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 #, fuzzy #| msgid "" #| "Privoxy is a non-caching web proxy with advanced filtering capabilities " @@ -5713,7 +5734,7 @@ msgstr "" "ENHANCING PRIVACY, MODIFYING WEB PAGE DATA AND HTTP HEADERS, CONTROLLING " "ACCESS, AND REMOVING ADS AND OTHER OBNOXIOUS INTERNET JUNK." -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, fuzzy, python-brace-format #| msgid "" #| "You can use Privoxy by modifying your browser proxy settings to your " @@ -5735,19 +5756,19 @@ msgstr "" "config.privoxy.org\">HTTP://CONFIG.PRIVOXY.ORG/ OR HTTP://P.P.\"" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 #, fuzzy #| msgid "Enable Privoxy" msgid "Privoxy" msgstr "ENABLE PRIVOXY" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 #, fuzzy #| msgid "Privoxy Web Proxy" msgid "Web Proxy" msgstr "PRIVOXY WEB PROXY" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "ACCESS {url} WITH PROXY {proxy} ON TCP{kind}" @@ -7225,7 +7246,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 #, fuzzy #| msgid "" #| "Tor is an anonymous communication system. You can learn more about it " @@ -7246,13 +7267,13 @@ msgstr "" "THE " "TOR BROWSER." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7260,33 +7281,33 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 #, fuzzy #| msgid "Tor Hidden Service" msgid "Tor Onion Service" msgstr "TOR HIDDEN SERVICE" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "TOR BRIDGE RELAY" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "TOR RELAY PORT AVAILABLE" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "OBFS3 TRANSPORT REGISTERED" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "OBFS4 TRANSPORT REGISTERED" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Hidden Service" msgid "Onion service is version 3" @@ -7401,7 +7422,7 @@ msgstr "AN ERROR OCCURRED DURING CONFIGURATION." msgid "Error configuring app: {error}" msgstr "ERROR INSTALLING PACKAGES: {string} {details}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7410,22 +7431,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "Privoxy Web Proxy" msgid "Tor Proxy" msgstr "PRIVOXY WEB PROXY" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "ACCESS URL {url} ON TCP{kind} VIA TOR" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "CONFIRM TOR USAGE AT {url} ON TCP{kind}" @@ -7837,14 +7858,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "AUTOMATIC UPGRADES ENABLED" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7852,25 +7873,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "USERS AND GROUPS" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "CHECK LDAP ENTRY \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8542,7 +8563,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8555,7 +8576,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8563,11 +8584,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -8620,39 +8641,39 @@ msgstr "" msgid "Finished: {name}" msgstr "SERVICE DISABLED: {name}" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 #, fuzzy #| msgid "Installation" msgid "installing" msgstr "INSTALLATION" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 #, fuzzy #| msgid "Setting unchanged" msgid "media change" msgstr "SETTING UNCHANGED" -#: plinth/package.py:384 +#: plinth/package.py:388 #, fuzzy, python-brace-format #| msgid "Configuration" msgid "configuration file: {file}" msgstr "CONFIGURATION" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/fr/LC_MESSAGES/django.po b/plinth/locale/fr/LC_MESSAGES/django.po index 3e5aa1c7a..7901d2ee2 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2024-01-05 07:09+0000\n" "Last-Translator: John Doe \n" "Language-Team: French package_name\" in a terminal (using Cockpit or SSH)." msgstr "" "%(box_name)s est un logiciel libre, couvert par la licence publique générale " -"Affero GNU. Le code source est disponible en ligne sur le dépôt %(box_name)s. En " +"Affero GNU. Le code source est disponible en ligne sur le dépôt %(box_name)s. En " "outre, le code source de tout paquet Debian peut être obtenu depuis le site " "Debian Sources ou bien en " "exécutant « apt source nom_du_paquet » dans un terminal (au moyen de " @@ -2951,8 +2976,8 @@ msgstr "Gestion de l’application I2P" msgid "I2P" msgstr "I2P" -#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:62 -#: plinth/modules/torproxy/__init__.py:55 +#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:63 +#: plinth/modules/torproxy/__init__.py:56 msgid "Anonymity Network" msgstr "Réseau d’anonymisation" @@ -3251,8 +3276,8 @@ msgid "" "project or create your own." msgstr "" -"Vous pouvez télécharger des paquets de contenu depuis le " +"Vous pouvez télécharger des paquets de contenu depuis le " "projet Kiwix ou bien créer les vôtres." @@ -3339,7 +3364,7 @@ msgstr "Ajouter un nouveau paquet de contenu" msgid "Failed to add content package." msgstr "Échec de l’ajout du paquet de contenu." -#: plinth/modules/letsencrypt/__init__.py:25 +#: plinth/modules/letsencrypt/__init__.py:27 #, python-brace-format msgid "" "A digital certificate allows users of a web service to verify the identity " @@ -3354,7 +3379,7 @@ msgstr "" "chaque domaine disponible. Elle le fait en prouvant qu’elle est propriétaire " "du domaine auprès de l’autorité de certification « Let’s Encrypt »." -#: plinth/modules/letsencrypt/__init__.py:31 +#: plinth/modules/letsencrypt/__init__.py:33 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public's benefit by the Internet Security Research Group (ISRG). Please " @@ -3368,15 +3393,15 @@ msgstr "" "fr/repository/\">conditions d’utilisation de Let’s Encrypt avant " "d’utiliser ce service." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let’s Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Certificats de chiffrement" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Test impossible : aucun domaine n’est configuré." @@ -5726,7 +5751,7 @@ msgstr "" "transmission a lieu au travers du réseau Tor pourvu que l’appli Tor soit " "activée." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5738,7 +5763,7 @@ msgstr "" "accès et de retirer les publicités et autres éléments nuisibles de " "l’Internet. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5756,15 +5781,15 @@ msgstr "" "href=\"http://config.privoxy.org\">http://config.privoxy.org/ ou http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Serveur mandataire web" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Accéder à l’URL {url} avec le mandataire {proxy} sur tcp{kind}" @@ -7282,7 +7307,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Synchronisation de fichiers" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7296,7 +7321,7 @@ msgstr "" "recommande l’utilisation du Navigateur Tor." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." @@ -7304,7 +7329,7 @@ msgstr "" "Cette application fournit des services de relais pour contribuer au réseau " "Tor et aider les autres à venir à bout de la censure." -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7316,31 +7341,31 @@ msgstr "" "possible d'accéder à {box_name} depuis Internet même en utilisant un FAI qui " "limite les serveurs à la maison." -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Service onion Tor" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Relais Tor de type pont (« bridge relay »)" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Le port du relais Tor est disponible" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Abonné au transport obfs3" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Abonné au transport obfs4" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Le service Onion est de version 3" @@ -7455,7 +7480,7 @@ msgstr "Mise à jour de la configuration" msgid "Error configuring app: {error}" msgstr "Erreur lors de la configuration de l’application : {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7469,20 +7494,20 @@ msgstr "" "Internet par le réseau Tor. La censure des FAI peut être contourné en " "utilisant des ponts en amont (upstream bridges)." -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Mandataire Tor" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Mandataire Socks Tor" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Accédez à l’URL {url} sur tcp{kind} via Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Confirmez l’utilisation de Tor pour {url} sur tcp{kind}" @@ -7547,8 +7572,8 @@ msgid "" msgstr "" "En plus de l'interface web, des applications mobiles et de bureau peuvent " "également être utilisées pour contrôler Transmission sur {box_name}. Afin de " -"configurer les applications de contrôle à distance, utilisez l'URL /transmission-remote/rpc." +"configurer les applications de contrôle à distance, utilisez l'URL /transmission-remote/rpc." #: plinth/modules/transmission/__init__.py:44 #, python-brace-format @@ -7606,8 +7631,8 @@ msgid "" "for connecting." msgstr "" "Si vous utilisez Tiny Tiny RSS avec une application pour téléphone ou " -"ordinateur, saisissez l’URL /tt-rss ou bien tt-rss-app pour vous connecter." +"ordinateur, saisissez l’URL /tt-rss ou bien tt-rss-app pour vous connecter." #: plinth/modules/ttrss/__init__.py:50 plinth/modules/ttrss/manifest.py:44 msgid "Tiny Tiny RSS" @@ -7901,7 +7926,7 @@ msgstr "Mise à jour régulière des fonctionnalités activée." msgid "Starting distribution upgrade test." msgstr "Démarrage du test de mise à niveau de la distribution." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7912,7 +7937,7 @@ msgstr "" "Certaines applis demandent en outre que les comptes soient membres d’un " "groupe particulier pour pouvoir accéder à l’application." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7924,25 +7949,25 @@ msgstr "" "principale. En revanche, seuls les utilisateurs membres du groupe admin peuvent modifier les applications ou changer les paramètres système." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Utilisateurs et groupes" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 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:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Vérification de l’entrée LDAP « {search_item} »" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Vérifier la configuration nslcd \"{key} {value}\"" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Vérifier la configuration nsswitch \"{database}\"" @@ -8121,8 +8146,8 @@ msgid "" msgstr "" "Veuillez supprimer ces comptes depuis la ligne de commande et rafraîchir " "cette page pour pouvoir créer un compte utilisable avec la %(box_name)s. " -"Depuis la ligne de commande, exécutez la commande \"echo '{\"args\" : [" -"\"USERNAME\", \"PASSWORD\"], \"kwargs\" : {}}' | sudo /usr/share/plinth/" +"Depuis la ligne de commande, exécutez la commande \"echo '{\"args\" : " +"[\"USERNAME\", \"PASSWORD\"], \"kwargs\" : {}}' | sudo /usr/share/plinth/" "actions/actions users remove_user\". Si vous disposez déjà d’un compte " "utilisable avec la %(box_name)s, vous pouvez passer cette étape." @@ -8605,7 +8630,7 @@ msgstr "" "WordPress. N’activez cette option qu’après avoir réalisé la configuration " "initiale de WordPress." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8628,7 +8653,7 @@ msgstr "" "recherche, de carte et de calendrier. Les photos peuvent être partagées " "unitairement avec d’autres en leur envoyant un lien direct." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8639,11 +8664,11 @@ msgstr "" "l’administrateur Zoph. Pour ajouter des utilisateurs ceux-ci doivent être " "créés à la fois sur la {box_name} et dans Zoph avec le même identifiant." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Photothèque" @@ -8697,34 +8722,35 @@ msgstr "Attente du démarrage de : {name}" msgid "Finished: {name}" msgstr "Terminé : {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Le paquet {expression} n’est pas disponible à l’installation" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "Le paquet {package_name} est à la dernière version ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "installation en cours" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "téléchargement en cours" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "changement de support" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "fichier de configuration : {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Aucune réponse du gestionnaire de paquets" diff --git a/plinth/locale/gl/LC_MESSAGES/django.po b/plinth/locale/gl/LC_MESSAGES/django.po index ee5915ae9..fbe73137f 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-12-30 10:51+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Galician Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4915,14 +4930,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4933,15 +4948,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6220,7 +6235,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6229,13 +6244,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6243,31 +6258,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6363,7 +6378,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "Produciuse un erro ao instalar o aplicativo: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6372,20 +6387,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6732,14 +6747,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6747,25 +6762,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7346,7 +7361,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7359,7 +7374,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7367,11 +7382,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7421,34 +7436,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/gu/LC_MESSAGES/django.po b/plinth/locale/gu/LC_MESSAGES/django.po index 90d8f3aa9..c2b42690e 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2021-01-18 12:32+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Gujarati Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5188,14 +5209,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5206,15 +5227,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6508,7 +6529,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6517,13 +6538,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6531,31 +6552,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Dynamic DNS Service" msgid "Onion service is version 3" @@ -6659,7 +6680,7 @@ msgstr "સામાન્ય ગોઠવણી" msgid "Error configuring app: {error}" msgstr "એપ્લીકેશન પ્રસ્થાપિત કરતાં ભૂલ થઇ છે: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6668,20 +6689,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -7052,14 +7073,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "વપરાશકર્તા રજીસ્ટ્રેશન અક્ષમ છે" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7067,25 +7088,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7692,7 +7713,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7705,7 +7726,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7713,11 +7734,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7769,34 +7790,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/hi/LC_MESSAGES/django.po b/plinth/locale/hi/LC_MESSAGES/django.po index d09c68f13..f2e401072 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-10-19 06:30+0000\n" "Last-Translator: Shaik \n" "Language-Team: Hindi %(service_name)s is running." msgid "Service {service_name} is running" @@ -43,17 +43,17 @@ msgstr "सर्विस %(service_name)s चल रहा है." msgid "Listening on {kind} port {listen_address}:{port}" msgstr "{kind} में सुन कर पोर्ट {listen_address} :{port}" -#: plinth/daemon.py:169 +#: plinth/daemon.py:167 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "{kind} में सुन कर पोर्ट{port}" -#: plinth/daemon.py:238 +#: plinth/daemon.py:236 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "{host}:{port} से जुड़े" -#: plinth/daemon.py:241 +#: plinth/daemon.py:240 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "{host}:{port} से नहीं जोड़ सखता" @@ -133,7 +133,7 @@ msgstr "{box_name} वेब इंटरफेस (प्लिंथ)" msgid "Access URL {url} on tcp{kind}" msgstr "इस यूआरएल का अपयोग करें {url} टीसीपी पर {kind}" -#: plinth/modules/apache/components.py:158 +#: plinth/modules/apache/components.py:157 #, python-brace-format msgid "Access URL {url}" msgstr "इस यूआरएल का अपयोग करें {url}" @@ -936,10 +936,10 @@ msgstr "हटाईये" msgid "Admin" msgstr "" -#: plinth/modules/bepasty/views.py:88 plinth/modules/searx/views.py:35 -#: plinth/modules/searx/views.py:46 plinth/modules/security/views.py:56 -#: plinth/modules/tor/views.py:73 plinth/modules/torproxy/views.py:71 -#: plinth/modules/zoph/views.py:74 +#: plinth/modules/bepasty/views.py:88 plinth/modules/diagnostics/views.py:52 +#: plinth/modules/searx/views.py:35 plinth/modules/searx/views.py:46 +#: plinth/modules/security/views.py:56 plinth/modules/tor/views.py:73 +#: plinth/modules/torproxy/views.py:71 plinth/modules/zoph/views.py:74 msgid "Configuration updated." msgstr "कॉन्फ़िगरेशन अपडेट किया." @@ -1445,18 +1445,18 @@ msgstr "" msgid "Use the following shared authentication secret:" msgstr "निम्नलिखित डिस्कस उपयोग में है:" -#: plinth/modules/datetime/__init__.py:20 +#: plinth/modules/datetime/__init__.py:21 msgid "" "Network time server is a program that maintains the system time in " "synchronization with servers on the Internet." msgstr "" "नेटवर्क समय सर्वर एक प्रोग्रम है कि सिस्टम समय इंटरनेट सर्वरसॅ के सात में बनाए रखता है." -#: plinth/modules/datetime/__init__.py:67 +#: plinth/modules/datetime/__init__.py:68 msgid "Date & Time" msgstr "तारीख और समय" -#: plinth/modules/datetime/__init__.py:121 +#: plinth/modules/datetime/__init__.py:122 msgid "Time synchronized to NTP server" msgstr "" @@ -1525,7 +1525,7 @@ msgstr "डायरेक्टरी डाउनलोड करें" msgid "Bittorrent client written in Python/PyGTK" msgstr "बिटटोरेंट ग्राहक पाईथोन/पाईजिटिके" -#: plinth/modules/diagnostics/__init__.py:25 +#: plinth/modules/diagnostics/__init__.py:27 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." @@ -1533,92 +1533,109 @@ msgstr "" "पुष्टि करने के लिये कि एप्लिकेशन या सेवाएं अच्छेसे चल रहे है, सिस्टम निदान परिक्षा बहुत सारे " "चेकों करोगे." -#: plinth/modules/diagnostics/__init__.py:49 -#: plinth/modules/diagnostics/__init__.py:235 +#: plinth/modules/diagnostics/__init__.py:51 +#: plinth/modules/diagnostics/__init__.py:236 msgid "Diagnostics" msgstr "निदानिकी" -#: plinth/modules/diagnostics/__init__.py:93 +#: plinth/modules/diagnostics/__init__.py:95 #, fuzzy #| msgid "Quassel" msgid "passed" msgstr "क्वासेल" -#: plinth/modules/diagnostics/__init__.py:94 +#: plinth/modules/diagnostics/__init__.py:96 #: plinth/modules/networks/views.py:50 #, fuzzy #| msgid "Setup failed." msgid "failed" msgstr "सेटअप विफल." -#: plinth/modules/diagnostics/__init__.py:95 +#: plinth/modules/diagnostics/__init__.py:97 msgid "error" msgstr "" -#: plinth/modules/diagnostics/__init__.py:96 +#: plinth/modules/diagnostics/__init__.py:98 msgid "warning" msgstr "" #. Translators: This is the unit of computer storage Mebibyte similar to #. Megabyte. -#: plinth/modules/diagnostics/__init__.py:201 +#: plinth/modules/diagnostics/__init__.py:202 msgid "MiB" msgstr "" #. Translators: This is the unit of computer storage Gibibyte similar to #. Gigabyte. -#: plinth/modules/diagnostics/__init__.py:206 +#: plinth/modules/diagnostics/__init__.py:207 msgid "GiB" msgstr "" -#: plinth/modules/diagnostics/__init__.py:213 +#: plinth/modules/diagnostics/__init__.py:214 msgid "You should disable some apps to reduce memory usage." msgstr "" -#: plinth/modules/diagnostics/__init__.py:218 +#: plinth/modules/diagnostics/__init__.py:219 msgid "You should not install any new apps on this system." msgstr "" -#: plinth/modules/diagnostics/__init__.py:230 +#: plinth/modules/diagnostics/__init__.py:231 #, no-python-format, python-brace-format msgid "" "System is low on memory: {percent_used}% used, {memory_available} " "{memory_available_unit} free. {advice_message}" msgstr "" -#: plinth/modules/diagnostics/__init__.py:232 +#: plinth/modules/diagnostics/__init__.py:233 msgid "Low Memory" msgstr "" -#: plinth/modules/diagnostics/__init__.py:254 +#: plinth/modules/diagnostics/__init__.py:264 #, fuzzy #| msgid "Run Diagnostics" msgid "Running diagnostics" msgstr "निदानिकी चलिये" -#: plinth/modules/diagnostics/__init__.py:295 +#: plinth/modules/diagnostics/__init__.py:307 #, no-python-format, python-brace-format msgid "Found {issue_count} issues during routine tests." msgstr "" -#: plinth/modules/diagnostics/__init__.py:296 +#: plinth/modules/diagnostics/__init__.py:308 #, fuzzy #| msgid "Diagnostic Results" msgid "Diagnostics results" msgstr "निदानिकी का परिणाम" -#: plinth/modules/diagnostics/__init__.py:301 +#: plinth/modules/diagnostics/__init__.py:313 #, fuzzy #| msgid "Diagnostic Results" msgid "Go to diagnostics results" msgstr "निदानिकी का परिणाम" -#: plinth/modules/diagnostics/templates/diagnostics.html:16 -#: plinth/modules/diagnostics/templates/diagnostics_button.html:11 -msgid "Run Diagnostics" +#: plinth/modules/diagnostics/forms.py:11 +#, fuzzy +#| msgid "Enable Subdomains" +msgid "Enable daily run" +msgstr "सबडोमेन सक्षम करें" + +#: plinth/modules/diagnostics/forms.py:12 +msgid "When enabled, diagnostic checks will run once a day." +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:11 +#, fuzzy +#| msgid "Diagnostics" +msgid "Diagnostics Run" +msgstr "निदानिकी" + +#: plinth/modules/diagnostics/templates/diagnostics.html:17 +#, fuzzy +#| msgid "Run Diagnostics" +msgid "Run Diagnostics Now" msgstr "निदानिकी चलिये" -#: plinth/modules/diagnostics/templates/diagnostics.html:21 +#: plinth/modules/diagnostics/templates/diagnostics.html:22 #, fuzzy #| msgid "Results" msgid "View Results" @@ -1647,6 +1664,10 @@ msgstr "सटअप शुरु करें" msgid "This app does not support diagnostics" msgstr "यह मॉड्यूल निदानिकी कि नहीं समर्थन करता है" +#: plinth/modules/diagnostics/templates/diagnostics_button.html:11 +msgid "Run Diagnostics" +msgstr "निदानिकी चलिये" + #: plinth/modules/diagnostics/templates/diagnostics_full.html:17 #, fuzzy #| msgid "Run Diagnostics" @@ -1678,7 +1699,7 @@ msgstr "परीक्षा" msgid "Result" msgstr "परिणाम" -#: plinth/modules/diagnostics/views.py:100 +#: plinth/modules/diagnostics/views.py:107 msgid "Diagnostic Test" msgstr "निदान परिक्षा" @@ -2286,7 +2307,7 @@ msgstr "" msgid "Direct passthrough rules exist" msgstr "" -#: plinth/modules/firewall/components.py:137 +#: plinth/modules/firewall/components.py:136 #, fuzzy, python-brace-format #| msgid "%(service_name)s is available only on internal networks." msgid "Port {name} ({details}) available for internal networks" @@ -2298,7 +2319,7 @@ msgstr "%(service_name)s सिर्फ आंतरिक नेट msgid "Port {name} ({details}) available for external networks" msgstr "%(service_name)s सिर्फ आंतरिक नेटवर्क्स पर उपलब्ध है." -#: plinth/modules/firewall/components.py:154 +#: plinth/modules/firewall/components.py:153 #, python-brace-format msgid "Port {name} ({details}) unavailable for external networks" msgstr "" @@ -2950,8 +2971,8 @@ msgstr "एप्लिकेशन सक्षम करें" msgid "I2P" msgstr "" -#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:62 -#: plinth/modules/torproxy/__init__.py:55 +#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:63 +#: plinth/modules/torproxy/__init__.py:56 msgid "Anonymity Network" msgstr "गुमनामी नेटवर्क" @@ -3326,7 +3347,7 @@ msgstr "नया इंट्रोड्यूसर जोड़ें" msgid "Failed to add content package." msgstr "समूह से यूसर को जोड़ने में विफल." -#: plinth/modules/letsencrypt/__init__.py:25 +#: plinth/modules/letsencrypt/__init__.py:27 #, python-brace-format msgid "" "A digital certificate allows users of a web service to verify the identity " @@ -3340,7 +3361,7 @@ msgstr "" "प्रमाणपत्र सेटअप प्राप्त कर सकता है. {box_name} यह लेटस एंक्रिप्ट का डोमेन का एकमात्र " "मालिक सताबित करके एेसा करता है." -#: plinth/modules/letsencrypt/__init__.py:31 +#: plinth/modules/letsencrypt/__init__.py:33 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public's benefit by the Internet Security Research Group (ISRG). Please " @@ -3352,15 +3373,15 @@ msgstr "" "href=\"https://letsencrypt.org/repository/\"> लेटस एंक्रिप्ट ग्राहक समझौते इस " "सिरविस उपयोग करने से पहले." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "लेटस एंक्रिप्ट" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "प्रमाण पत्र" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5611,7 +5632,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5621,7 +5642,7 @@ msgstr "" "लिए, वेब पेज डेटा और HTTP हेडर को मोडिफाई करने के लिए, ऐकसेस को नियंत्रित करने के लिए " "और एड या दुसरा इंटरनेट का जंक हटाने के लिए. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, fuzzy, python-brace-format #| msgid "" #| "You can use Privoxy by modifying your browser proxy settings to your " @@ -5643,15 +5664,15 @@ msgstr "" "org\">http://config.privoxy.org/ या http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "प्रिवोक्सी" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "वेब प्रॉक्सी" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "{url} ऐकसेस करें प्रॉक्सी लेकर {proxy} टीसीपी पर{kind}" @@ -7162,7 +7183,7 @@ msgstr "सिंकतिन्ग" msgid "File Synchronization" msgstr "फ़ाइल सिंक्रनाइज़ेशन" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7175,13 +7196,13 @@ msgstr "" "टो प्रोजेक्ट सिफारिश की है कि आप टो ब्राउज़र उपयोग करें." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7189,33 +7210,33 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "टोर" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 #, fuzzy #| msgid "Tor Hidden Service" msgid "Tor Onion Service" msgstr "टोर हिडन सर्विस" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "टो ब्रिज रीले" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "टोर रीले पोर्ट उपलब्ध है" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 ट्रांसपोर्ट पंजीकृत" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 ट्रांसपोर्ट पंजीकृत" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Hidden Service" msgid "Onion service is version 3" @@ -7338,7 +7359,7 @@ msgstr "कॉंफ़िगरेशन के दौरान कूछ त msgid "Error configuring app: {error}" msgstr "एप्लिकेशन नहीं इंस्टॉल जा सकता: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7347,22 +7368,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "Tor Socks Proxy" msgid "Tor Proxy" msgstr "टोर सोक्स प्रॉक्सी" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "टोर सोक्स प्रॉक्सी" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "यूआरएल एक्सेस करें {url} टीसीपी पर {kind} टोर के माध्यम से" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "टोर उपयोग की पुष्टि करें {url} पर टीसीपी पर {kind}" @@ -7788,14 +7809,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "ऑटोमेटिक अपग्रेडस सक्षम किया गया" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7803,25 +7824,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "यूसरस और समूह" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "सब सर्विसस और सिस्टम सेटिंग्स तक पहुंच" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "एलडीएपी प्रविष्टि चेक करें \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8500,7 +8521,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8513,7 +8534,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8521,11 +8542,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -8578,34 +8599,34 @@ msgstr "" msgid "Finished: {name}" msgstr "सर्विस सक्षम किया गया:{name}" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "इंस्टॉलिंग" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "डाउनलोडिंग" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "मीडिया बदलाव" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "कॉंफ़िगरेशन फ़ाइल: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/hu/LC_MESSAGES/django.po b/plinth/locale/hu/LC_MESSAGES/django.po index e488438a3..137e40e5c 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-10-24 18:39+0000\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Hungarian Let's Encrypt aláírási megállapodását " "mielőtt használnád ezt a szolgáltatást." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Tanúsítványok" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Sikertelen tesztelés: Nincsenek konfigurált domainek." @@ -5675,7 +5699,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5686,7 +5710,7 @@ msgstr "" "Módosítja a weboldal adatait és HTTP fejléceket, szabályozza a hozzáférést, " "eltávolítja a hirdetéseket és az egyéb nem kívánt internetes szemetet. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, fuzzy, python-brace-format #| msgid "" #| "You can use Privoxy by modifying your browser proxy settings to your " @@ -5708,15 +5732,15 @@ msgstr "" "a címeken: http://config.privoxy.org/ és http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Web proxy" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -7211,7 +7235,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Fájlszinkronizáció" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7225,13 +7249,13 @@ msgstr "" "torproject.org/download/download-easy.html.en\">Tor böngésző használatát " "javasolja." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7239,31 +7263,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Tor Onion szolgáltatás" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Tor híd relay" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Tor relay port elérhető" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 átvitel regisztrálva" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 átvitel regisztrálva" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" @@ -7386,7 +7410,7 @@ msgstr "Beállítások frissítése" msgid "Error configuring app: {error}" msgstr "Hiba lépett fel az alkalmazás konfigurációja során: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7395,22 +7419,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "Tor Socks Proxy" msgid "Tor Proxy" msgstr "Tor Socks proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Tor Socks proxy" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Hozzáférés a {url} URL-hez tcp{kind}-on Tor használatával" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Hagyd jóvá a Tor használatát {url} célcímhez tcp{kind} protokollon" @@ -7823,7 +7847,7 @@ msgstr "Gyakori funkciófrissítések aktiválva." msgid "Starting distribution upgrade test." msgstr "Disztribúció frissítés engedélyezve" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7834,7 +7858,7 @@ msgstr "" "alkalmazások megkövetelik továbbá, hogy a felhasználói fiók egy csoport " "tagja legyen, hogy a felhasználó hozzáférhessen az alkalmazáshoz." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7846,25 +7870,25 @@ msgstr "" "az admin csoport felhasználói módosíthatják az alkalmazásokat vagy " "a rendszerbeállításokat." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Felhasználók és csoportok" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Hozzáférés az összes szolgáltatáshoz és rendszerbeállításhoz" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP-bejegyzés ellenőrzése: \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8523,7 +8547,7 @@ msgstr "" "teszi lehetővé a WordPress webhely vagy blog megtekintését. Csak a WordPress " "kezdeti beállításának elvégzése után engedélyezd." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8545,7 +8569,7 @@ msgstr "" "tartózkodási hely alapján. Az egyes fényképek közvetlen link elküldésével " "megoszthatók másokkal." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8557,11 +8581,11 @@ msgstr "" "rendszerben is létre kell hozni egy-egy fiókot ugyanazzal a " "felhasználónévvel." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Fotó szervező" @@ -8616,34 +8640,34 @@ msgstr "" msgid "Finished: {name}" msgstr "Szolgáltatás letiltva: {name}" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "A(z) {package_name} a legfrissebb verzió ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "telepítés" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "letöltés" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "adathordozó csere" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "konfigurációs fájl: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/id/LC_MESSAGES/django.po b/plinth/locale/id/LC_MESSAGES/django.po index ae815170e..26b06fb4d 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Indonesian Perjanjian Pelanggan Let's Encrypt sebelum menggunakan " "layanan ini." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Sertifikat" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Tidak dapat menguji: Tidak ada domain yang dikonfigurasi." @@ -5355,14 +5376,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5373,15 +5394,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Proksi Web" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Akses {url} dengan proksi {proxy} pada tcp{kind}" @@ -6703,7 +6724,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6712,13 +6733,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6726,31 +6747,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Service" msgid "Onion service is version 3" @@ -6854,7 +6875,7 @@ msgstr "Terjadi kesalahan selama konfigurasi." msgid "Error configuring app: {error}" msgstr "Kesalahan pemasangan aplikasi: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6863,22 +6884,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "I2P Proxy" msgid "Tor Proxy" msgstr "I2p proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -7252,14 +7273,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Pembaruan distribusi dinonaktifkan" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7267,25 +7288,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7894,7 +7915,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7907,7 +7928,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7915,11 +7936,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7969,34 +7990,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "memasang" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "mengunduh" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po index a6a16c44e..40fc696dc 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Italian i termini dell'accordo dell'abbonato Let's " "Encrypt prima utilizzare questo servizio." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Certificati" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5482,7 +5503,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5493,7 +5514,7 @@ msgstr "" "header HTTP, controllando gli accessi, rimuovendo pubblicità e altra odiosa " "spazzatura dell'Internet. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, fuzzy, python-brace-format #| msgid "" #| "You can use Privoxy by modifying your browser proxy settings to your " @@ -5515,15 +5536,15 @@ msgstr "" "documentazione su http://config." "Privoxy.org/ o http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Web Proxy" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Accesso {url} con proxy {proxy} su tcp{kind}" @@ -6837,7 +6858,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6846,13 +6867,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6860,31 +6881,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" @@ -6984,7 +7005,7 @@ msgstr "Aggiornamento della configurazione" msgid "Error configuring app: {error}" msgstr "Errore durante l'installazione dell'applicazione: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6993,22 +7014,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "I2P Proxy" msgid "Tor Proxy" msgstr "Proxy I2P" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -7364,14 +7385,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7379,25 +7400,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7976,7 +7997,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7989,7 +8010,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7997,11 +8018,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -8052,34 +8073,34 @@ msgstr "" msgid "Finished: {name}" msgstr "Servizio disabilitato: {name}" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/ja/LC_MESSAGES/django.po b/plinth/locale/ja/LC_MESSAGES/django.po index 5498bb091..7c113dcbe 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-05-07 23:50+0000\n" "Last-Translator: Nobuhiro Iwamatsu \n" "Language-Team: Japanese Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4899,14 +4914,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4917,15 +4932,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6198,7 +6213,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6207,13 +6222,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6221,31 +6236,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6340,7 +6355,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6349,20 +6364,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6703,14 +6718,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6718,25 +6733,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7315,7 +7330,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7328,7 +7343,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7336,11 +7351,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7389,34 +7404,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/kn/LC_MESSAGES/django.po b/plinth/locale/kn/LC_MESSAGES/django.po index 6164d463b..20479dda4 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2020-07-16 16:41+0000\n" "Last-Translator: Yogesh \n" "Language-Team: Kannada Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4899,14 +4914,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4917,15 +4932,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6200,7 +6215,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6209,13 +6224,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6223,31 +6238,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6342,7 +6357,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6351,20 +6366,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6705,14 +6720,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6720,25 +6735,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7317,7 +7332,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7330,7 +7345,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7338,11 +7353,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7391,34 +7406,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/lt/LC_MESSAGES/django.po b/plinth/locale/lt/LC_MESSAGES/django.po index 73003cb5c..0062e31c1 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Lithuanian Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4901,14 +4916,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4919,15 +4934,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6200,7 +6215,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6209,13 +6224,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6223,31 +6238,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6342,7 +6357,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6351,22 +6366,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "I2P Proxy" msgid "Tor Proxy" msgstr "I2P Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6707,14 +6722,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6722,25 +6737,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7319,7 +7334,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7332,7 +7347,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7340,11 +7355,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7393,34 +7408,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/lv/LC_MESSAGES/django.po b/plinth/locale/lv/LC_MESSAGES/django.po index bab6192db..cedb4a4de 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Latvian Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4900,14 +4915,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4918,15 +4933,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6199,7 +6214,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6208,13 +6223,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6222,31 +6237,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6341,7 +6356,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6350,22 +6365,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "I2P Proxy" msgid "Tor Proxy" msgstr "I2P Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6706,14 +6721,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6721,25 +6736,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7318,7 +7333,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7331,7 +7346,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7339,11 +7354,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7392,34 +7407,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/nb/LC_MESSAGES/django.po b/plinth/locale/nb/LC_MESSAGES/django.po index f56324f4b..c2e3eea45 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-08-16 06:52+0000\n" "Last-Translator: Petter Reinholdtsen \n" "Language-Team: Norwegian Bokmål Let's " "Encrypt Subscriber Agreement før tjenesten brukes." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Sertifikater" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5686,7 +5709,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5697,7 +5720,7 @@ msgstr "" "overskrifter, kontrollere tilgang, og fjerne annonser og annet ubehagelig " "Internett-søppel. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, fuzzy, python-brace-format #| msgid "" #| "You can use Privoxy by modifying your browser proxy settings to your " @@ -5719,15 +5742,15 @@ msgstr "" "href=\"http://config.privoxy.org\">http://config.privoxy.org/ eller http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Mellomtjener for nettet" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Tilgang {url} med mellomtjener {proxy} på tcp{kind}" @@ -7229,7 +7252,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Filsynkronisering" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7243,13 +7266,13 @@ msgstr "" "href=\"https://www.torproject.org/download/download-easy.html.en\">Tor " "Browser." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7257,31 +7280,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Tor-løktjeneste" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Tor bro-stafettvideresendingsoppsett" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Tor relay-port tilgjengelig" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3-transport registrert" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4-transport registrert" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" @@ -7402,7 +7425,7 @@ msgstr "Oppdaterer oppsett" msgid "Error configuring app: {error}" msgstr "Feil ved programinstallering: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7411,22 +7434,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "Tor Socks Proxy" msgid "Tor Proxy" msgstr "Tor Socks-mellomtjener" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Tor Socks-mellomtjener" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Adgang til URL {url} på tcp{kind} via Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bekreft Tor-bruk på {url} via tcp{kind}" @@ -7836,7 +7859,7 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Starter test av distribusjonsoppgradering." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7847,7 +7870,7 @@ msgstr "" "kan kreve at en brukerkonto er medlem av en gruppe for å gi brukeren tilgang " "til programmet." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7858,25 +7881,25 @@ msgstr "" "liste over programmer som er relevante for dem på hjemmesiden. Dog kan kun " "brukere av admin-gruppen endre programmer eller systeminnstillinger." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Brukere og grupper" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Tilgang til alle tjenester og systeminnstillinger" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Sjekk LDAP-oppføring «{search_item}»" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8530,7 +8553,7 @@ msgstr "" "nettstedet eller bloggen. Aktiver kun etter at oppsettet av Wordpress er " "gjennomført." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8543,7 +8566,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8551,11 +8574,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Organiserer fotografier" @@ -8609,34 +8632,35 @@ msgstr "" msgid "Finished: {name}" msgstr "Tjeneste deaktivert: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Pakke {expression} er ikke tilgjengelig for installasjon" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "Pakke {package_name} er siste versjon ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "installering" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "laster ned" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "mediaendring" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "oppsettsfil: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/nl/LC_MESSAGES/django.po b/plinth/locale/nl/LC_MESSAGES/django.po index 235c2b122..4fb579426 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-12-03 21:05+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Dutch Let's Encrypt Subscriber " "Agreement vóór het gebruik van deze dienst." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Certificaten" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Kan niet testen: Er zijn geen domeinen ingesteld." @@ -5620,7 +5645,7 @@ msgstr "" "De insturen gebeurt via het Tor-netwerk voor extra anonimiteit als de Tor-" "app is ingeschakeld." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5630,7 +5655,7 @@ msgstr "" "om privacy te verhogen, webpagina data en HTTP headers te wijzigen, toegang " "te controleren, en advertenties en andere rommel te weren. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5647,15 +5672,15 @@ msgstr "" "href=\"http://config.privoxy.org\">http://config.privoxy.org/ of http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Web Proxy" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Gebruik {url} via proxy {proxy} op tcp{kind}" @@ -7138,7 +7163,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Bestandssynchronisatie" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7152,7 +7177,7 @@ msgstr "" "de Tor " "Browser aan." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." @@ -7160,7 +7185,7 @@ msgstr "" "Deze applicatie biedt relay-diensten om bij te dragen aan het Tor-netwerk en " "anderen te helpen censuur te overwinnen." -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7172,31 +7197,31 @@ msgstr "" "toegang tot {box_name} via internet, zelfs als een ISP die servers vanuit " "thuis beperkt." -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Tor-Onion Dienst" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Tor Bridge Relay" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Tor relay poort beschikbaar" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 transport geregistreerd" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 transport geregistreerd" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Onion service is versie 3" @@ -7313,7 +7338,7 @@ msgstr "Configuratie bijwerken" msgid "Error configuring app: {error}" msgstr "Fout bij het configureren van de toepassing: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7327,20 +7352,20 @@ msgstr "" "krijgen tot internet. ISP-censuur kan worden omzeild door upstream bridges " "te gebruiken." -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Tor Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Tor Socks Proxy" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Gebruik URL {url} op tcp{kind} via Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bevestig Tor gebruik met {url} via tcp{kind}" @@ -7744,7 +7769,7 @@ msgstr "Tussentijdse Software Updates zijn ingeschakeld." msgid "Starting distribution upgrade test." msgstr "Start de distributie upgrade test." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7755,7 +7780,7 @@ msgstr "" "apps moet een gebruikersaccount deel uitmaken van een groep om de gebruiker " "toegang te geven tot de toepassing." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7767,25 +7792,25 @@ msgstr "" "die lid zijn van de admin -groep mogen toepassings- of " "systeeminstellingen wijzigen." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Gebruikers en Groepen" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Toegang tot alle diensten en systeeminstellingen" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Zoek LDAP item \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Controleer nslcd configuratie \"{key} {value}\"" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Controleer nsswitch config \"{database}\"" @@ -8438,7 +8463,7 @@ msgstr "" "WordPress-site of blog bekijken. Alleen inschakelen na het uitvoeren van de " "eerste WordPress-configuratie." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8460,7 +8485,7 @@ msgstr "" "van zoekwoorden, kaart- en kalenderweergaven. Individuele foto's kunnen met " "anderen worden gedeeld door een directe link te sturen." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8471,11 +8496,11 @@ msgstr "" "Zoph. Voor extra gebruikers moeten zowel in {box_name} als in Zoph accounts " "worden aangemaakt met dezelfde gebruikersnaam." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Foto Organisator" @@ -8529,34 +8554,35 @@ msgstr "Wachten om te starten: {name}" msgid "Finished: {name}" msgstr "Klaar: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Pakket {expression} is niet beschikbaar voor installatie" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "Pakket {package_name} is de nieuwste versie ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "installeren" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "downloaden" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "media wijzigen" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "configuratiebestand: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Time-out wachtend op pakketbeheerder" diff --git a/plinth/locale/pl/LC_MESSAGES/django.po b/plinth/locale/pl/LC_MESSAGES/django.po index ab1bda6d6..41d53a275 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Polish Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Certyfikaty" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5307,14 +5328,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5325,15 +5346,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6679,7 +6700,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6688,13 +6709,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6702,31 +6723,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Dynamic DNS Service" msgid "Onion service is version 3" @@ -6830,7 +6851,7 @@ msgstr "Podczas konfiguracji wystąpił błąd." msgid "Error configuring app: {error}" msgstr "Błąd podczas instalowania aplikacji: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6839,22 +6860,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "I2P Proxy" msgid "Tor Proxy" msgstr "I2P Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -7231,14 +7252,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Rejestracja użytkowników wyłączona" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7246,25 +7267,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7906,7 +7927,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7919,7 +7940,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7927,11 +7948,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7983,34 +8004,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "plik konfiguracyjny: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/pt/LC_MESSAGES/django.po b/plinth/locale/pt/LC_MESSAGES/django.po index 30e4eea6f..bef74144e 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-05-22 15:50+0000\n" "Last-Translator: Frederico Gomes \n" "Language-Team: Portuguese Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5206,14 +5227,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5224,15 +5245,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Acesse {url} com proxy {proxy} em tcp{kind}" @@ -6534,7 +6555,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6543,13 +6564,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6557,31 +6578,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Service discovery server is running" msgid "Onion service is version 3" @@ -6685,7 +6706,7 @@ msgstr "Configuração Geral" msgid "Error configuring app: {error}" msgstr "Erro a instalar a aplicação: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6694,22 +6715,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "I2P Proxy" msgid "Tor Proxy" msgstr "I2P Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -7068,14 +7089,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "A iniciar teste de atualização de distribuição." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7083,25 +7104,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7706,7 +7727,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7719,7 +7740,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7727,11 +7748,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7780,36 +7801,36 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 #, fuzzy #| msgid "Setting unchanged" msgid "media change" msgstr "Definição inalterada" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "ficheiro de configuração: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/ru/LC_MESSAGES/django.po b/plinth/locale/ru/LC_MESSAGES/django.po index 5feb9dbba..a2d9415b1 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-10-10 18:05+0000\n" "Last-Translator: Nikita Epifanov \n" "Language-Team: Russian Let's Encrypt Subscriber Agreement перед " "использованием этой службы." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Сертификаты" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Невозможно провести тестирование: Не настроены домены." @@ -5637,7 +5661,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5648,7 +5672,7 @@ msgstr "" "HTTP, контроля доступа и удаления рекламы и прочего неприятного мусора в " "интернете. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, fuzzy, python-brace-format #| msgid "" #| "You can use Privoxy by modifying your browser proxy settings to your " @@ -5670,15 +5694,15 @@ msgstr "" "config.privoxy.org\">http://config.privoxy.org или http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Web-прокси" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Доступ к {url} с прокси {proxy} на tcp{kind}" @@ -7159,7 +7183,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Синхронизация файлов" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7173,13 +7197,13 @@ msgstr "" "href=\"https://www.torproject.org/download/download-easy.html.en\">Tor " "Browser." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7187,31 +7211,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Сервис Tor Onion" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Ретранслятор Tor типа мост" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Доступен порт трансляции Tor" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 транспорт зарегестрирован" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 транспорт зарегистрирован" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" @@ -7335,7 +7359,7 @@ msgstr "Произошла ошибка во время настройки." msgid "Error configuring app: {error}" msgstr "Ошибка при установке приложения: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7344,22 +7368,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "Tor Socks Proxy" msgid "Tor Proxy" msgstr "Tor Socks прокси" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Tor Socks прокси" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Доступ к {url} по tcp{kind} через Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Подтверждение использования Tor в {url} по tcp {kind}" @@ -7771,7 +7795,7 @@ msgstr "Активированы частые обновления функци msgid "Starting distribution upgrade test." msgstr "Обновление дистрибутива включено" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7783,7 +7807,7 @@ msgstr "" "запись пользователя была частью группы, чтобы разрешить пользователю доступ " "к приложению." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7795,25 +7819,25 @@ msgstr "" "пользователи группы admin могут изменять приложения или системные " "настройки." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Пользователи и группы" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Доступ ко всем сервисам и настройкам системы" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Проверьте запись LDAP \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8469,7 +8493,7 @@ msgstr "" "просматривать сайт или блог WordPress. Включайте только после первоначальной " "настройки WordPress." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8492,7 +8516,7 @@ msgstr "" "месте. Отдельными фотографиями можно поделиться с другими, отправив прямую " "ссылку." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8503,11 +8527,11 @@ msgstr "" "Zoph. Для дополнительных пользователей необходимо создать учетные записи как " "в {box_name}, так и в Zoph с тем же именем пользователя." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Организатор фотографий" @@ -8562,34 +8586,35 @@ msgstr "" msgid "Finished: {name}" msgstr "Служба выключена: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Пакет {expression} недоступен для установки" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "Пакет {package_name} последней версией ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "Установка" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "Загрузка" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "изменение медиа" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "Файл настроек: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/si/LC_MESSAGES/django.po b/plinth/locale/si/LC_MESSAGES/django.po index 261543e4c..e196f5040 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2021-04-27 13:32+0000\n" "Last-Translator: HelaBasa \n" "Language-Team: Sinhala Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4899,14 +4914,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4917,15 +4932,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6198,7 +6213,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6207,13 +6222,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6221,31 +6236,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6340,7 +6355,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6349,20 +6364,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6703,14 +6718,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6718,25 +6733,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7315,7 +7330,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7328,7 +7343,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7336,11 +7351,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7389,34 +7404,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/sl/LC_MESSAGES/django.po b/plinth/locale/sl/LC_MESSAGES/django.po index d78ec8b3d..c1a2c70a6 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Slovenian Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5136,14 +5151,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5154,15 +5169,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6458,7 +6473,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6467,13 +6482,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6481,31 +6496,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6603,7 +6618,7 @@ msgstr "Konfiguracija je posodobljena" msgid "Error configuring app: {error}" msgstr "Napaka ob nameščanju aplikacije: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6612,22 +6627,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "I2P Proxy" msgid "Tor Proxy" msgstr "I2P Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6992,14 +7007,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7007,25 +7022,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7640,7 +7655,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7653,7 +7668,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7661,11 +7676,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7715,34 +7730,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index e1a41b43d..c068ea70c 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-11-03 20:31+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian Marrëveshje " "Pajtimtari Let’s Encrypt before using this service." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Dëshmi" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "S’mund të testojë: S’ka përkatësi të formësuara." @@ -5661,7 +5685,7 @@ msgstr "" "debian.org. Parashtrimi bëhet përmes rrjetit Tor, për anonimitet shtesë, " "nëse është i aktivizuar aplikacioni Tor." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5672,7 +5696,7 @@ msgstr "" "faqesh web dhe kryesh HTTP, kontrollim hyrjesh, dhe heqje reklamash dhe të " "tjera hedhurina të papëlqyeshme Internet. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5689,15 +5713,15 @@ msgstr "" "te http://config.privoxy.org/ ose " "http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Ndërmjetës Web" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Hapni {url} me ndërmjetësin {proxy} në tcp{kind}" @@ -7185,7 +7209,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Njëkohësim Kartelash" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7199,13 +7223,13 @@ msgstr "" "përdorni Shfletuesin Tor." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7213,31 +7237,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Shërbim Onion Tor" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Rele Ure Tor" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Portë releje Tor e gatshme" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "U regjistruar transport Obfs3" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "U regjistruar transport Obfs3" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" @@ -7361,7 +7385,7 @@ msgstr "Po përditësohet formësimi" msgid "Error configuring app: {error}" msgstr "Gabim në formësimin e aplikacionit: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7370,22 +7394,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "Tor Socks Proxy" msgid "Tor Proxy" msgstr "Ndërmjetës SOCKS Tor" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Ndërmjetës SOCKS Tor" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "URL hyrjesh {url} në tcp{kind} përmes Tor-i" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Ripohoni përdorim Tor-i te {url} në tcp{kind}" @@ -7798,7 +7822,7 @@ msgstr "Përditësime të shpeshta veçorish të aktivizuara." msgid "Starting distribution upgrade test." msgstr "Po fillohet provë përmirësimi shpërndarjeje." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7809,7 +7833,7 @@ msgstr "" "aplikacione kërkojnë doemos një llogari përdoruesi, për të qenë pjesë e një " "grupi që autorizon përdoruesin të përdorë aplikacionin." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7821,25 +7845,25 @@ msgstr "" "vetëm përdoruesit e grupit përgjegjës mund të ndryshojnë " "aplikacionet, apo rregullimet e sistemit." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Përdorues dhe Grupe" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Hyrje te krejt shërbimet dhe rregullime të sistemit" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Kontrolloni zërin LDAP \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8494,7 +8518,7 @@ msgstr "" "sajtin ose blogun WordPress. Aktivizojeni vetëm pasi të jetë kryer ujdisja " "fillestare e WordPress-it." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8516,7 +8540,7 @@ msgstr "" "pamjet hartë dhe kalendar. Foto individuale mund të ndahen me të tjerë duke " "dërguar një lidhje të drejtpërdrejtë." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8527,11 +8551,11 @@ msgstr "" "Zoph. Për përdorues të tjerë, llogaritë mund të krijohen si në {box_name}, " "ashtu edhe në Zoph, me të njëjtin emër përdoruesi." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Sistemues Fotografish" @@ -8584,35 +8608,36 @@ msgstr "Po pritet të fillohet: {name}" msgid "Finished: {name}" msgstr "Përfundoi: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Paketa {expression} s’është e gatshme për instalim" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" "Paketa {package_name} gjendet nën versionin më të ri ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "po instalohet" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "po shkarkohet" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "ndryshim media" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "kartelë formësimi: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Mbaroi koha teksa pritej për përgjegjës paketash" diff --git a/plinth/locale/sr/LC_MESSAGES/django.po b/plinth/locale/sr/LC_MESSAGES/django.po index 83639f206..40dcac371 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Serbian Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5018,14 +5033,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5036,15 +5051,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6328,7 +6343,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6337,13 +6352,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6351,31 +6366,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6473,7 +6488,7 @@ msgstr "Konfiguracija sačuvana" msgid "Error configuring app: {error}" msgstr "Greška prilikom instaliranja aplikacije: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6482,22 +6497,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "I2P Proxy" msgid "Tor Proxy" msgstr "I2P Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6848,14 +6863,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6863,25 +6878,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7460,7 +7475,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7473,7 +7488,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7481,11 +7496,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7534,34 +7549,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/sv/LC_MESSAGES/django.po b/plinth/locale/sv/LC_MESSAGES/django.po index c69d836cf..4096c8c0c 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2024-01-03 16:09+0000\n" "Last-Translator: bittin1ddc447d824349b2 \n" "Language-Team: Swedish Let's Encrypt användaravtal innan du använder denna tjänst." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Låt oss kryptera" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Certifikaterna" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Kan inte testa: Inga domäner är konfigurerade." @@ -5602,7 +5625,7 @@ msgstr "" "target=\"_blank\">popcon.debian.org. Inlämningen sker via Tor-nätverket " "för ytterligare anonymitet om Tor-appen är aktiverad." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5612,7 +5635,7 @@ msgstr "" "för att förbättra sekretessen, ändra webbsidan data och HTTP-huvuden, " "kontrollera åtkomst och ta bort annonser och andra avskyvärda Internet Junk. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5628,15 +5651,15 @@ msgstr "" "href=\"http://config.privoxy.org\">http://config.privoxy.org/ eller http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Webbproxy" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Anslut till {url} med proxy {proxy} på TCP {kind}" @@ -7103,7 +7126,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Filsynkronisering" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7117,7 +7140,7 @@ msgstr "" "använder TOR Browser." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." @@ -7125,7 +7148,7 @@ msgstr "" "Denna app tillhandahåller relätjänster för att bidra till Tor-nätverket och " "hjälpa andra att övervinna censur." -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7137,31 +7160,31 @@ msgstr "" "internet även när man använder en internetleverantör som begränsar servrar " "hemma." -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Tor Onion service" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Tor Bridge Relay" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Tor relä port tillgänglig" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 transport registrerad" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 transport registrerad" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Onion tjänst är version 3" @@ -7275,7 +7298,7 @@ msgstr "Uppdatera konfigurationen" msgid "Error configuring app: {error}" msgstr "Fel vid konfigurering av appen: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7288,20 +7311,20 @@ msgstr "" "appar för att komma åt internet via Tor-nätverket. ISP-censur kan kringgås " "med hjälp av uppströms broar." -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Tor Proxy" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Tor SOCKS-proxy" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Tillgång URL {url} på TCP {kind} via Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bekräfta Tor-användning vid {url} på TCP {kind}" @@ -7708,7 +7731,7 @@ msgstr "Frekventa funktionsuppdateringar aktiverade." msgid "Starting distribution upgrade test." msgstr "Startar distributionsuppgraderingstest." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7719,7 +7742,7 @@ msgstr "" "ett användarkonto för att vara en del av en grupp för att auktorisera " "användaren att komma åt appen." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7730,25 +7753,25 @@ msgstr "" "över appar som är relevanta för dem på startsidan. Endast användare av " "gruppen admin kan dock ändra appar eller Systeminställningar." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Användare och grupper" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Tillgång till alla tjänster och systeminställningar" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Kontrollera LDAP-posten \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Kontrollera nslcd-konfigurationen \"{key}{value}\"" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Kontrollera nsswitch-konfigurationen \"{database}\"" @@ -8399,7 +8422,7 @@ msgstr "" "WordPress-webbplatsen eller bloggen. Aktivera endast efter den första " "installationen av WordPress." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8420,7 +8443,7 @@ msgstr "" "på en plats med hjälp av sök-, kart- och kalendervyer. Enskilda foton kan " "delas med andra genom att skicka en direktlänk." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8431,11 +8454,11 @@ msgstr "" "i Zoph. För ytterligare användare måste konton skapas både i {box_name} och " "i Zoph med samma användarnamn." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Foto Organizer" @@ -8488,34 +8511,35 @@ msgstr "Väntar på att starta: {name}" msgid "Finished: {name}" msgstr "Avslutad: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Paket {expression} är inte tillgänglig för installation" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "Paketet {package_name} är den senaste versionen ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "Installera" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "ladda ner" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "Mediabyte" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "konfigurationsfil: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Timeout väntar på pakethanteraren" diff --git a/plinth/locale/ta/LC_MESSAGES/django.po b/plinth/locale/ta/LC_MESSAGES/django.po index 90c0abe43..f8721ed53 100644 --- a/plinth/locale/ta/LC_MESSAGES/django.po +++ b/plinth/locale/ta/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -31,7 +31,7 @@ msgstr "" msgid "FreedomBox" msgstr "" -#: plinth/daemon.py:107 +#: plinth/daemon.py:105 #, python-brace-format msgid "Service {service_name} is running" msgstr "" @@ -41,17 +41,17 @@ msgstr "" msgid "Listening on {kind} port {listen_address}:{port}" msgstr "" -#: plinth/daemon.py:169 +#: plinth/daemon.py:167 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "" -#: plinth/daemon.py:238 +#: plinth/daemon.py:236 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "" -#: plinth/daemon.py:241 +#: plinth/daemon.py:240 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "" @@ -124,7 +124,7 @@ msgstr "" msgid "Access URL {url} on tcp{kind}" msgstr "" -#: plinth/modules/apache/components.py:158 +#: plinth/modules/apache/components.py:157 #, python-brace-format msgid "Access URL {url}" msgstr "" @@ -836,10 +836,10 @@ msgstr "" msgid "Admin" msgstr "" -#: plinth/modules/bepasty/views.py:88 plinth/modules/searx/views.py:35 -#: plinth/modules/searx/views.py:46 plinth/modules/security/views.py:56 -#: plinth/modules/tor/views.py:73 plinth/modules/torproxy/views.py:71 -#: plinth/modules/zoph/views.py:74 +#: plinth/modules/bepasty/views.py:88 plinth/modules/diagnostics/views.py:52 +#: plinth/modules/searx/views.py:35 plinth/modules/searx/views.py:46 +#: plinth/modules/security/views.py:56 plinth/modules/tor/views.py:73 +#: plinth/modules/torproxy/views.py:71 plinth/modules/zoph/views.py:74 msgid "Configuration updated." msgstr "" @@ -1271,17 +1271,17 @@ msgstr "" msgid "Use the following shared authentication secret:" msgstr "" -#: plinth/modules/datetime/__init__.py:20 +#: plinth/modules/datetime/__init__.py:21 msgid "" "Network time server is a program that maintains the system time in " "synchronization with servers on the Internet." msgstr "" -#: plinth/modules/datetime/__init__.py:67 +#: plinth/modules/datetime/__init__.py:68 msgid "Date & Time" msgstr "" -#: plinth/modules/datetime/__init__.py:121 +#: plinth/modules/datetime/__init__.py:122 msgid "Time synchronized to NTP server" msgstr "" @@ -1340,88 +1340,99 @@ msgstr "" msgid "Bittorrent client written in Python/PyGTK" msgstr "" -#: plinth/modules/diagnostics/__init__.py:25 +#: plinth/modules/diagnostics/__init__.py:27 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" -#: plinth/modules/diagnostics/__init__.py:49 -#: plinth/modules/diagnostics/__init__.py:235 +#: plinth/modules/diagnostics/__init__.py:51 +#: plinth/modules/diagnostics/__init__.py:236 msgid "Diagnostics" msgstr "" -#: plinth/modules/diagnostics/__init__.py:93 +#: plinth/modules/diagnostics/__init__.py:95 msgid "passed" msgstr "" -#: plinth/modules/diagnostics/__init__.py:94 +#: plinth/modules/diagnostics/__init__.py:96 #: plinth/modules/networks/views.py:50 msgid "failed" msgstr "" -#: plinth/modules/diagnostics/__init__.py:95 +#: plinth/modules/diagnostics/__init__.py:97 msgid "error" msgstr "" -#: plinth/modules/diagnostics/__init__.py:96 +#: plinth/modules/diagnostics/__init__.py:98 msgid "warning" msgstr "" #. Translators: This is the unit of computer storage Mebibyte similar to #. Megabyte. -#: plinth/modules/diagnostics/__init__.py:201 +#: plinth/modules/diagnostics/__init__.py:202 msgid "MiB" msgstr "" #. Translators: This is the unit of computer storage Gibibyte similar to #. Gigabyte. -#: plinth/modules/diagnostics/__init__.py:206 +#: plinth/modules/diagnostics/__init__.py:207 msgid "GiB" msgstr "" -#: plinth/modules/diagnostics/__init__.py:213 +#: plinth/modules/diagnostics/__init__.py:214 msgid "You should disable some apps to reduce memory usage." msgstr "" -#: plinth/modules/diagnostics/__init__.py:218 +#: plinth/modules/diagnostics/__init__.py:219 msgid "You should not install any new apps on this system." msgstr "" -#: plinth/modules/diagnostics/__init__.py:230 +#: plinth/modules/diagnostics/__init__.py:231 #, no-python-format, python-brace-format msgid "" "System is low on memory: {percent_used}% used, {memory_available} " "{memory_available_unit} free. {advice_message}" msgstr "" -#: plinth/modules/diagnostics/__init__.py:232 +#: plinth/modules/diagnostics/__init__.py:233 msgid "Low Memory" msgstr "" -#: plinth/modules/diagnostics/__init__.py:254 +#: plinth/modules/diagnostics/__init__.py:264 msgid "Running diagnostics" msgstr "" -#: plinth/modules/diagnostics/__init__.py:295 +#: plinth/modules/diagnostics/__init__.py:307 #, no-python-format, python-brace-format msgid "Found {issue_count} issues during routine tests." msgstr "" -#: plinth/modules/diagnostics/__init__.py:296 +#: plinth/modules/diagnostics/__init__.py:308 msgid "Diagnostics results" msgstr "" -#: plinth/modules/diagnostics/__init__.py:301 +#: plinth/modules/diagnostics/__init__.py:313 msgid "Go to diagnostics results" msgstr "" -#: plinth/modules/diagnostics/templates/diagnostics.html:16 -#: plinth/modules/diagnostics/templates/diagnostics_button.html:11 -msgid "Run Diagnostics" +#: plinth/modules/diagnostics/forms.py:11 +msgid "Enable daily run" msgstr "" -#: plinth/modules/diagnostics/templates/diagnostics.html:21 +#: plinth/modules/diagnostics/forms.py:12 +msgid "When enabled, diagnostic checks will run once a day." +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:11 +msgid "Diagnostics Run" +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:17 +msgid "Run Diagnostics Now" +msgstr "" + +#: plinth/modules/diagnostics/templates/diagnostics.html:22 msgid "View Results" msgstr "" @@ -1444,6 +1455,10 @@ msgstr "" msgid "This app does not support diagnostics" msgstr "" +#: plinth/modules/diagnostics/templates/diagnostics_button.html:11 +msgid "Run Diagnostics" +msgstr "" + #: plinth/modules/diagnostics/templates/diagnostics_full.html:17 msgid "Re-run Diagnostics" msgstr "" @@ -1473,7 +1488,7 @@ msgstr "" msgid "Result" msgstr "" -#: plinth/modules/diagnostics/views.py:100 +#: plinth/modules/diagnostics/views.py:107 msgid "Diagnostic Test" msgstr "" @@ -1979,7 +1994,7 @@ msgstr "" msgid "Direct passthrough rules exist" msgstr "" -#: plinth/modules/firewall/components.py:137 +#: plinth/modules/firewall/components.py:136 #, python-brace-format msgid "Port {name} ({details}) available for internal networks" msgstr "" @@ -1989,7 +2004,7 @@ msgstr "" msgid "Port {name} ({details}) available for external networks" msgstr "" -#: plinth/modules/firewall/components.py:154 +#: plinth/modules/firewall/components.py:153 #, python-brace-format msgid "Port {name} ({details}) unavailable for external networks" msgstr "" @@ -2551,8 +2566,8 @@ msgstr "" msgid "I2P" msgstr "" -#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:62 -#: plinth/modules/torproxy/__init__.py:55 +#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:63 +#: plinth/modules/torproxy/__init__.py:56 msgid "Anonymity Network" msgstr "" @@ -2887,7 +2902,7 @@ msgstr "" msgid "Failed to add content package." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:25 +#: plinth/modules/letsencrypt/__init__.py:27 #, python-brace-format msgid "" "A digital certificate allows users of a web service to verify the identity " @@ -2897,7 +2912,7 @@ msgid "" "Encrypt, a certificate authority (CA)." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:31 +#: plinth/modules/letsencrypt/__init__.py:33 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public's benefit by the Internet Security Research Group (ISRG). Please " @@ -2905,15 +2920,15 @@ msgid "" "\">Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -4898,14 +4913,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -4916,15 +4931,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6197,7 +6212,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6206,13 +6221,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6220,31 +6235,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6339,7 +6354,7 @@ msgstr "" msgid "Error configuring app: {error}" msgstr "" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6348,20 +6363,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6702,14 +6717,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6717,25 +6732,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7314,7 +7329,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7327,7 +7342,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7335,11 +7350,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7388,34 +7403,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/te/LC_MESSAGES/django.po b/plinth/locale/te/LC_MESSAGES/django.po index 90b139a1b..39428fc2c 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2023-10-24 00:04+0000\n" "Last-Translator: Joseph Nuthalapati \n" "Language-Team: Telugu సభ్యుల ఒప్పందాన్ని ఎన్‌క్రిప్ట్ చేద్దాంని " "చదివి, అంగీకరించండి." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "లెట్స్ ఎన్క్రిప్ట్" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "యోగ్యతాపత్రాలు" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "పరీక్షించడం సాధ్యం కాదు: డొమైన్‌లు ఏవీ కాన్ఫిగర్ చేయబడలేదు." @@ -5463,7 +5486,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5473,7 +5496,7 @@ msgstr "" "నియంత్రించడం మరియు ప్రకటనలను మరియు ఇతర చెడ్డ ఇంటర్నెట్ వ్యర్థాలను తొలగించడం కోసం ఆధునిక ఫిల్టరింగ్ " "సామర్థ్యాలతో ఒక కాని క్యాచింగ్ వెబ్ ప్రాక్సీ. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, fuzzy, python-brace-format #| msgid "" #| "You can use Privoxy by modifying your browser proxy settings to your " @@ -5494,15 +5517,15 @@ msgstr "" "డాక్యుమెంటేషన్ http://config.privoxy.org/ లేదా http://p.p లో చూడవచ్చు." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "ప్రివొక్సి" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "వెబ్ ప్రాక్సీ" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "టీసీపీ{kind} పై{proxy} తో యాక్సిస్ {url} చేయండి" @@ -6931,7 +6954,7 @@ msgstr "సింక్ తింగ్" msgid "File Synchronization" msgstr "ఫైళ్ళ సమకాలీకరణ" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6944,13 +6967,13 @@ msgstr "" "టార్ ప్రాజెక్ట్ మీరు టార్ బ్రౌజర్ ను ఉపయోగించాలని సిఫార్సు చేస్తున్నారు." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6958,31 +6981,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "టార్" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "టోర్ ఉల్లిపాయ సేవ" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "టార్ బ్రిడ్జ్ రిలే" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "టార్ రిలే పోర్ట్ అందుబాటులో ఉంది" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 రవాణా నమోదు చేయబడింది" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 రవాణా నమోదు చేయబడింది" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" @@ -7098,7 +7121,7 @@ msgstr "అక్రుతీకరణలో ఒక పొరపాటు జర msgid "Error configuring app: {error}" msgstr "అనువర్తనం స్థాపించుటలో దోషం: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7107,22 +7130,22 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 #, fuzzy #| msgid "Tor Socks Proxy" msgid "Tor Proxy" msgstr "టోర్ సాక్స్ ప్రాతినిధ్య" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "టోర్ సాక్స్ ప్రాతినిధ్య" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "టార్ ద్వారా {kind} లో {url} ను ఆక్సెస్ చెయ్యండి" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "టోర్ వాడుకను నిర్ధారించండి{url} టీ సి పి పై{kind}" @@ -7513,7 +7536,7 @@ msgstr "తరచుగా ఫీచర్ అప్‌డేట్‌లు య msgid "Starting distribution upgrade test." msgstr "పంపిణీ మెరుగుపరుచడం ప్రారంభించబడింది" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7523,7 +7546,7 @@ msgstr "" "విధానంగా పనిచేస్తాయి. కొన్ని యాప్‌లకు యాప్‌ను యాక్సెస్ చేయడానికి వినియోగదారుని ప్రామాణీకరించడానికి సమూహంలో భాగంగా " "వినియోగదారు ఖాతా అవసరం" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7534,25 +7557,25 @@ msgstr "" "చేయవచ్చు. అయినప్పటికీ, అడ్మిన్ సమూహం యొక్క వినియోగదారులు మాత్రమే యాప్‌లు లేదా సిస్టమ్ " "సెట్టింగ్‌లను మార్చవచ్చు." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "వినియోగదారులు మరియు సమూహాలు" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "అన్ని సేవలకు మరియు సిస్టమ్ అమరికలకు ప్రాప్యత" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP నమోదు \"{search_item}\" తనిఖీ" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -8187,7 +8210,7 @@ msgstr "" "సందర్శకులందరినీ అనుమతించండి. నిరుపయోగం చేయడం వలన వర్డుప్రెస్సు సైట్ లేదా బ్లాగును వీక్షించడానికి " "నిర్వాహకులు మాత్రమే అనుమతిస్తుంది. ప్రారంభ వర్డుప్రెస్సు సెటప్ చేసిన తర్వాత మాత్రమే ప్రారంభించండి." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8206,7 +8229,7 @@ msgstr "" "వీక్షణలను ఉపయోగించి ఒక వ్యక్తిని కలిగి ఉన్న అన్ని ఫోటోలు లేదా తేదీలో తీసిన ఫోటోలు లేదా ఒక ప్రదేశంలో తీసిన " "ఫోటోలను కనుగొనడం సులభం. డైరెక్ట్ లింక్‌ని పంపడం ద్వారా వ్యక్తిగత ఫోటోలను ఇతరులతో పంచుకోవచ్చు." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8216,11 +8239,11 @@ msgstr "" "జోఫ్ని సెటప్ చేసిన {box_name} వినియోగదారు కూడా Zophలో నిర్వాహకులు అవుతారు. అదనపు వినియోగదారుల " "కోసం, ఖాతాలు తప్పనిసరిగా {box_name}లో మరియు జోఫ్లో ఒకే వినియోగదారు పేరుతో సృష్టించబడాలి." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "జోఫ్" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "ఫోటో ఆర్గనైజర్" @@ -8272,34 +8295,34 @@ msgstr "" msgid "Finished: {name}" msgstr "సేవ నిలిపివేయబడింది: {name}" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "ప్యాకేజీ {package_name} తాజా వెర్షన్ ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "వ్యవస్థాపిస్తోంది" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "దిగుమతి అవుతోంది" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "ప్రసార మాధ్యమం మార్పు" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "ఆకృతీకరణ ఫైలు: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index eb54ec779..9c15e3859 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2024-01-03 16:09+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish Let's Encrypt Abone Sözleşmesini okuyun ve kabul edin." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Sertifikalar" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Denenemiyor: Hiçbir etki alanı yapılandırılmamış." @@ -5607,7 +5631,7 @@ msgstr "" "herkese açıktır. Tor uygulaması etkinleştirilirse, ek isimsizlik için " "gönderme Tor ağı üzerinden gerçekleşir." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5618,7 +5642,7 @@ msgstr "" "çöplerini kaldırmak için gelişmiş süzme yeteneklerine sahip, önbelleğe " "alınmayan bir web vekil sunucusudur. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5635,15 +5659,15 @@ msgstr "" "href=\"https://www.privoxy.org\">https://www.privoxy.org adresinde " "görebilirsiniz." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Web Vekil Sunucusu" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Tcp{kind} üzerinde {proxy} vekil sunucusu ile {url} adresine erişin" @@ -7124,7 +7148,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Dosya Eşitleme" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7137,7 +7161,7 @@ msgstr "" "gezinirken en iyi koruma için Tor Projesi, Tor Tarayıcı kullanmanızı önerir." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." @@ -7145,7 +7169,7 @@ msgstr "" "Bu uygulama, Tor ağına katkıda bulunmak ve başkalarının sansürü atlatmasına " "yardımcı olmak için aktarma hizmetleri sağlar." -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7157,31 +7181,31 @@ msgstr "" "sunucuları sınırlayan bir İSS kullanılırken bile internetten {box_name} " "cihazına erişilebilir." -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Tor Onion Hizmeti" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Tor Köprüsü Aktarımı" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Tor aktarımı bağlantı noktası kullanılabilir" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Obfs3 taşıma kayıtlı" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Obfs4 taşıma kayıtlı" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Onion hizmeti sürüm 3'tür" @@ -7295,7 +7319,7 @@ msgstr "Yapılandırma güncelleniyor" msgid "Error configuring app: {error}" msgstr "Uygulama yapılandırılırken hata oldu: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7308,20 +7332,20 @@ msgstr "" "ağı aracılığıyla internete erişmek için çeşitli uygulamalar tarafından " "kullanılabilir. İSS sansürü yukarı akış köprüleri kullanılarak atlatılabilir." -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Tor Vekil Sunucusu" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Tor Socks Vekil Sunucusu" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Tor aracılığıyla tcp{kind} üzerinde erişim URL'si {url}" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Tcp{kind} üzerinde {url} adresinde Tor kullanımını onaylama" @@ -7729,7 +7753,7 @@ msgstr "Sık yapılan özellik güncellemeleri etkinleştirildi." msgid "Starting distribution upgrade test." msgstr "Dağıtım yükseltmesi denemesi başlatılıyor." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7740,7 +7764,7 @@ msgstr "" "kullanıcıya, uygulamaya erişme yetkisi vermek için bir kullanıcı hesabının " "bir grubun parçası olmasını gerektirir." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7752,25 +7776,25 @@ msgstr "" "sadece admin grubunun kullanıcıları uygulamaları veya sistem " "ayarlarını değiştirebilir." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Kullanıcılar ve Gruplar" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Tüm hizmetlere ve sistem ayarlarına erişim" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP \"{search_item}\" girişini denetleme" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "\"{key} {value}\" nslcd yapılandırmasını denetleme" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "\"{database}\" nsswitch yapılandırmasını denetleme" @@ -8417,7 +8441,7 @@ msgstr "" "WordPress sitesini veya blogunu görüntülemesine izin verir. Sadece ilk " "WordPress kurulumunu gerçekleştirdikten sonra etkinleştirin." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8439,7 +8463,7 @@ msgstr "" "çekilmiş fotoğrafları bulmak kolaydır. Tek tek fotoğraflar, doğrudan bir " "bağlantı gönderilerek başkalarıyla paylaşılabilir." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8450,11 +8474,11 @@ msgstr "" "Ek kullanıcılar için hesaplar hem {box_name} cihazında hem de Zoph'da aynı " "kullanıcı adıyla oluşturulmak zorundadır." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Fotoğraf Düzenleyici" @@ -8507,34 +8531,35 @@ msgstr "Başlamak için bekleniyor: {name}" msgid "Finished: {name}" msgstr "Tamamlandı: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "{expression} paketi yükleme için mevcut değil" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "{package_name} paketi en son sürümdür ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "yükleniyor" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "indiriliyor" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "ortam değiştirme" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "yapılandırma dosyası: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Paket yöneticisini beklerken zaman aşımı oldu" diff --git a/plinth/locale/uk/LC_MESSAGES/django.po b/plinth/locale/uk/LC_MESSAGES/django.po index 2bafde5ec..cebf761da 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2024-01-07 14:06+0000\n" "Last-Translator: Сергій \n" "Language-Team: Ukrainian Угодою підписувача Let's " "Encrypt перед тим, як користуватися цією службою." -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "Сертифікати" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "Тестування не можливе: Нема налаштованих доменів." @@ -5615,7 +5638,7 @@ msgstr "" "org. Передача відбувається через мережу Tor для додаткової анонімності, " "якщо у вас увімкнено програму Tor." -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5625,7 +5648,7 @@ msgstr "" "підвищення приватності, зміни даних вебсторінок і HTTP-заголовків, контролю " "доступу, а також видалення реклами та іншого небажаного інтернет-мотлоху. " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5642,15 +5665,15 @@ msgstr "" "посиланнями http://config.privoxy.org/" " або http://p.p." -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Вебпроксі" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Доступ за адресою {url} через проксі {proxy} по tcp{kind}" @@ -7124,7 +7147,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Синхронізація файлів" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -7137,7 +7160,7 @@ msgstr "" "під час вебсерфінгу, проєкт Tor радить використовувати Tor Browser." -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." @@ -7145,7 +7168,7 @@ msgstr "" "Цей застосунок надає ретрансляційні послуги, щоб зробити свій внесок у " "мережу Tor і допомогти іншим подолати цензуру." -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -7157,31 +7180,31 @@ msgstr "" "інтернету, навіть якщо ви користуєтеся послугами постачальника інтернету, " "який обмежує доступ до домашніх серверів." -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Сервіс Tor Onion" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Ретранслятор Tor типу міст" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Доступний порт ретрансляції Tor" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "Зареєстровано транспорт Obfs3" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "Зареєстровано транспорт Obfs4" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Служба Onion версії 3" @@ -7294,7 +7317,7 @@ msgstr "Оновлення налаштувань" msgid "Error configuring app: {error}" msgstr "Помилка налаштування застосунку: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -7307,20 +7330,20 @@ msgstr "" "різними застосунками для доступу до інтернету через мережу Tor. Цензурування " "постачальником послуг інтернету може бути обійдене за допомогою мостів." -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Проксі Tor" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "Проксі Tor Socks" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Доступ за адресою {url} на tcp{kind} через Tor" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Підтвердити використання Tor можна за посиланням {url} на tcp{kind}" @@ -7724,7 +7747,7 @@ msgstr "Оновлення частих можливостей активова msgid "Starting distribution upgrade test." msgstr "Запуск тесту оновлення дистрибутиву." -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7735,7 +7758,7 @@ msgstr "" "застосунки також вимагають, щоб обліковий запис був частиною групи, щоб " "отримати авторизований доступ до застосунку." -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7747,25 +7770,25 @@ msgstr "" "користувачі з групи admin можуть змінювати застосунки або системні " "налаштування." -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "Користувачі і групи" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "Доступ до всіх сервісів і налаштувань системи" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Перевірка запису LDAP \"{search_item}\"" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "Перевірте nslcd конфігурацію \"{key} {value}\"" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "Перевірте nsswitch конфігурацію \"{database}\"" @@ -8410,7 +8433,7 @@ msgstr "" "переглядати сайт або блог WordPress. Увімкнути тільки після виконання " "початкового налаштування WordPress." -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -8432,7 +8455,7 @@ msgstr "" "календарного перегляду. Окремими світлинами можна ділитися з іншими, " "надіславши пряме посилання." -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -8443,11 +8466,11 @@ msgstr "" "Для додаткових користувачів потрібно створити облікові записи і в " "{box_name}, і в Zoph з тим же іменем користувача." -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "Zoph" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "Упорядник світлин" @@ -8500,34 +8523,35 @@ msgstr "Очікування запуску: {name}" msgid "Finished: {name}" msgstr "Завершено: {name}" -#: plinth/package.py:215 -#, python-brace-format -msgid "Package {expression} is not available for install" +#: plinth/package.py:214 +#, fuzzy, python-brace-format +#| msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "Пакунок {expression} недоступний для встановлення" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "Пакунок {package_name} має останню версію ({latest_version})" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "встановлення" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "завантаження" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "зміна медія" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "файл конфіґурації: {file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "Час очікування менеджера пакунків" diff --git a/plinth/locale/vi/LC_MESSAGES/django.po b/plinth/locale/vi/LC_MESSAGES/django.po index 225d78023..1eeb50da4 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2021-07-28 08:34+0000\n" "Last-Translator: bruh \n" "Language-Team: Vietnamese Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5161,14 +5180,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5179,15 +5198,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6468,7 +6487,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6477,13 +6496,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6491,31 +6510,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6613,7 +6632,7 @@ msgstr "Đã xảy ra lỗi trong khi thiết lập." msgid "Error configuring app: {error}" msgstr "Lỗi khi cài đặt ứng dụng: {error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6622,20 +6641,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6986,14 +7005,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7001,25 +7020,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7598,7 +7617,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7611,7 +7630,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7619,11 +7638,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7673,34 +7692,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po index 0c23cc957..8117ee9bc 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2024-01-05 07:09+0000\n" "Last-Translator: Eric \n" "Language-Team: Chinese (Simplified) Let's Encypt 订阅者协议。" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "证书" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5093,7 +5114,7 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " @@ -5102,7 +5123,7 @@ msgstr "" "Privoxy 是一个非缓存 Web 代理,具有高级过滤功能,用于增强隐私,修改网页数据" "和 HTTP 标头,控制访问,以及删除广告和其他令人讨厌的互联网垃圾。 " -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5117,15 +5138,15 @@ msgstr "" "config.privoxy.org\">http://config.privoxy.org/ 或 http://p.p 中查看其配置详细信息和文档。" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "Privoxy" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "Web 代理" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "在 tcp{kind} 上通过 {proxy} 访问 {url}" @@ -6431,7 +6452,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6444,13 +6465,13 @@ msgstr "" "href=\"https://www.torproject.org/download/download-easy.html.en\">Tor浏览器" "。" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6458,31 +6479,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "Tor 洋葱服务" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "Tor 网桥中继" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "Tor 中继端口可用" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "已注册 Obfs3 传输" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "已注册 Obfs4 传输" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "Onion 服务版本为 3" @@ -6583,7 +6604,7 @@ msgstr "更新配置" msgid "Error configuring app: {error}" msgstr "配置应用出错:{error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6592,20 +6613,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "Tor 代理" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "在 tcp{kind} 上通过 Tor 访问 {url}" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "确认使用 Tor 通过 tcp{kind} 访问 {url}" @@ -6961,14 +6982,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "启动分发升级测试。" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6976,25 +6997,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "用户和组" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "请检查 LDAP 条目“{search_item}”" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7580,7 +7601,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7593,7 +7614,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7601,11 +7622,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7654,34 +7675,34 @@ msgstr "" msgid "Finished: {name}" msgstr "已完成:{name}" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "安装" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "下载中" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "媒体改变" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "配置文件:{file}" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po index e8fc819b3..bd4dab074 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: 2024-01-01 20:19-0500\n" +"POT-Creation-Date: 2024-01-29 20:14-0500\n" "PO-Revision-Date: 2021-12-23 12:50+0000\n" "Last-Translator: pesder \n" "Language-Team: Chinese (Traditional) Let's Encrypt Subscriber Agreement before using this service." msgstr "" -#: plinth/modules/letsencrypt/__init__.py:58 +#: plinth/modules/letsencrypt/__init__.py:60 msgid "Let's Encrypt" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:59 +#: plinth/modules/letsencrypt/__init__.py:61 msgid "Certificates" msgstr "" -#: plinth/modules/letsencrypt/__init__.py:100 +#: plinth/modules/letsencrypt/__init__.py:104 msgid "Cannot test: No domains are configured." msgstr "" @@ -5022,14 +5037,14 @@ msgid "" "network for additional anonymity if Tor app is enabled." msgstr "" -#: plinth/modules/privoxy/__init__.py:23 +#: plinth/modules/privoxy/__init__.py:24 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk. " msgstr "" -#: plinth/modules/privoxy/__init__.py:28 +#: plinth/modules/privoxy/__init__.py:29 #, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " @@ -5040,15 +5055,15 @@ msgid "" "p\">http://p.p." msgstr "" -#: plinth/modules/privoxy/__init__.py:51 +#: plinth/modules/privoxy/__init__.py:52 msgid "Privoxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:52 +#: plinth/modules/privoxy/__init__.py:53 msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:116 +#: plinth/modules/privoxy/__init__.py:117 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6326,7 +6341,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:32 plinth/modules/torproxy/__init__.py:27 +#: plinth/modules/tor/__init__.py:33 plinth/modules/torproxy/__init__.py:28 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6335,13 +6350,13 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:38 +#: plinth/modules/tor/__init__.py:39 msgid "" "This app provides relay services to contribute to Tor network and help " "others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:41 +#: plinth/modules/tor/__init__.py:42 #, python-brace-format msgid "" "This app provides an onion domain to expose {box_name} services via the Tor " @@ -6349,31 +6364,31 @@ msgid "" "when using an ISP that limits servers at home." msgstr "" -#: plinth/modules/tor/__init__.py:61 +#: plinth/modules/tor/__init__.py:62 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:77 +#: plinth/modules/tor/__init__.py:78 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:81 +#: plinth/modules/tor/__init__.py:82 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:137 +#: plinth/modules/tor/__init__.py:138 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:148 +#: plinth/modules/tor/__init__.py:150 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:158 +#: plinth/modules/tor/__init__.py:161 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:170 +#: plinth/modules/tor/__init__.py:174 msgid "Onion service is version 3" msgstr "" @@ -6471,7 +6486,7 @@ msgstr "設置過程中發生錯誤。" msgid "Error configuring app: {error}" msgstr "安裝應用遇到錯誤:{error}" -#: plinth/modules/torproxy/__init__.py:34 +#: plinth/modules/torproxy/__init__.py:35 #, python-brace-format msgid "" "This app provides a web proxy on your {box_name} for internal networks on " @@ -6480,20 +6495,20 @@ msgid "" "using upstream bridges." msgstr "" -#: plinth/modules/torproxy/__init__.py:54 +#: plinth/modules/torproxy/__init__.py:55 msgid "Tor Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:79 +#: plinth/modules/torproxy/__init__.py:80 msgid "Tor Socks Proxy" msgstr "" -#: plinth/modules/torproxy/__init__.py:139 +#: plinth/modules/torproxy/__init__.py:140 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/torproxy/__init__.py:151 +#: plinth/modules/torproxy/__init__.py:152 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" @@ -6844,14 +6859,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:31 +#: plinth/modules/users/__init__.py:32 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:36 +#: plinth/modules/users/__init__.py:37 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6859,25 +6874,25 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:57 +#: plinth/modules/users/__init__.py:58 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:82 +#: plinth/modules/users/__init__.py:83 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:126 +#: plinth/modules/users/__init__.py:127 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" -#: plinth/modules/users/__init__.py:140 +#: plinth/modules/users/__init__.py:141 #, python-brace-format msgid "Check nslcd config \"{key} {value}\"" msgstr "" -#: plinth/modules/users/__init__.py:170 +#: plinth/modules/users/__init__.py:171 #, python-brace-format msgid "Check nsswitch config \"{database}\"" msgstr "" @@ -7456,7 +7471,7 @@ msgid "" "WordPress site or blog. Enable only after performing initial WordPress setup." msgstr "" -#: plinth/modules/zoph/__init__.py:22 +#: plinth/modules/zoph/__init__.py:23 #, python-brace-format msgid "" "Zoph manages your photo collection. Photos are stored on your {box_name}, " @@ -7469,7 +7484,7 @@ msgid "" "shared with others by sending a direct link." msgstr "" -#: plinth/modules/zoph/__init__.py:33 +#: plinth/modules/zoph/__init__.py:34 #, python-brace-format msgid "" "The {box_name} user who setup Zoph will also become the administrator in " @@ -7477,11 +7492,11 @@ msgid "" "in Zoph with the same user name." msgstr "" -#: plinth/modules/zoph/__init__.py:52 plinth/modules/zoph/manifest.py:6 +#: plinth/modules/zoph/__init__.py:53 plinth/modules/zoph/manifest.py:6 msgid "Zoph" msgstr "" -#: plinth/modules/zoph/__init__.py:53 +#: plinth/modules/zoph/__init__.py:54 msgid "Photo Organizer" msgstr "" @@ -7531,34 +7546,34 @@ msgstr "" msgid "Finished: {name}" msgstr "" -#: plinth/package.py:215 +#: plinth/package.py:214 #, python-brace-format -msgid "Package {expression} is not available for install" +msgid "Package {package_expression} is not available for install" msgstr "" -#: plinth/package.py:230 +#: plinth/package.py:231 #, python-brace-format msgid "Package {package_name} is the latest version ({latest_version})" msgstr "" -#: plinth/package.py:378 +#: plinth/package.py:382 msgid "installing" msgstr "" -#: plinth/package.py:380 +#: plinth/package.py:384 msgid "downloading" msgstr "" -#: plinth/package.py:382 +#: plinth/package.py:386 msgid "media change" msgstr "" -#: plinth/package.py:384 +#: plinth/package.py:388 #, python-brace-format msgid "configuration file: {file}" msgstr "" -#: plinth/package.py:412 plinth/package.py:437 +#: plinth/package.py:416 plinth/package.py:441 msgid "Timeout waiting for package manager" msgstr "" From 4585748fe8755cba0d47494e2d1f6617935f6e9d Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 29 Jan 2024 20:47:49 -0500 Subject: [PATCH 12/13] doc: Fetch latest manual Signed-off-by: James Valleroy --- doc/manual/en/ReleaseNotes.raw.wiki | 18 ++++++++++++++++++ doc/manual/es/ReleaseNotes.raw.wiki | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index b5dc55def..4fb589170 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,24 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 24.3 (2024-01-29) == + +=== Highlights === + + * diagnostics: Add option to toggle daily run + * zoph: Fix failing PHP configuration requirements + +=== Other Changes === + + * diagnostics: Add parameters to !DiagnosticCheck + * diagnostics: Add method to translate checks + * diagnostics: Translate descriptions only in view + * diagnostics: Store results of full run in database + * diagnostics: Simplify getting translated description in results + * diagnostics: Safely access results when showing notification + * diagnostics: Fix a potential iteration of None value in error cases + * glib: Change API for repeating an in-thread scheduled task + == FreedomBox 24.2 (2024-01-15) == * locale: Update translations for Chinese (Simplified), French, Spanish, Swedish, Turkish, Ukrainian diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index b5dc55def..4fb589170 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,24 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 24.3 (2024-01-29) == + +=== Highlights === + + * diagnostics: Add option to toggle daily run + * zoph: Fix failing PHP configuration requirements + +=== Other Changes === + + * diagnostics: Add parameters to !DiagnosticCheck + * diagnostics: Add method to translate checks + * diagnostics: Translate descriptions only in view + * diagnostics: Store results of full run in database + * diagnostics: Simplify getting translated description in results + * diagnostics: Safely access results when showing notification + * diagnostics: Fix a potential iteration of None value in error cases + * glib: Change API for repeating an in-thread scheduled task + == FreedomBox 24.2 (2024-01-15) == * locale: Update translations for Chinese (Simplified), French, Spanish, Swedish, Turkish, Ukrainian From 102863a2aa2324d89c99b2c43974c01698399a11 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 29 Jan 2024 20:50:25 -0500 Subject: [PATCH 13/13] Release v24.3 to unstable Signed-off-by: James Valleroy --- debian/changelog | 22 ++++++++++++++++++++++ plinth/__init__.py | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 3ef1b195f..227c85d75 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,25 @@ +freedombox (24.3) unstable; urgency=medium + + [ James Valleroy ] + * diagnostics: Add parameters to DiagnosticCheck + * diagnostics: Add method to translate checks + * diagnostics: Translate descriptions only in view + * diagnostics: Store results of full run in database + * diagnostics: Add option to toggle daily run + * locale: Update translation strings + * doc: Fetch latest manual + + [ Sunil Mohan Adapa ] + * diagnostics: Simplify getting translated description in results + * diagnostics: Safely access results when showing notification + * diagnostics: Fix a potential iteration of None value in error cases + * glib: Change API for repeating an in-thread scheduled task + + [ Benedek Nagy ] + * zoph: Fix failing PHP configuration requirements + + -- James Valleroy Mon, 29 Jan 2024 20:48:12 -0500 + freedombox (24.2) unstable; urgency=medium [ gallegonovato ] diff --git a/plinth/__init__.py b/plinth/__init__.py index 471938621..82792750a 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '24.2' +__version__ = '24.3'