From e7e9642a11acb6287544dbc867682d9082da12ba Mon Sep 17 00:00:00 2001 From: John Doe Date: Wed, 19 Jun 2024 19:10:11 +0000 Subject: [PATCH 1/6] Translated using Weblate (French) Currently translated at 100.0% (1574 of 1574 strings) --- plinth/locale/fr/LC_MESSAGES/django.po | 103 +++++++++++-------------- 1 file changed, 44 insertions(+), 59 deletions(-) diff --git a/plinth/locale/fr/LC_MESSAGES/django.po b/plinth/locale/fr/LC_MESSAGES/django.po index 1c6edf5ff..e3463eb4e 100644 --- a/plinth/locale/fr/LC_MESSAGES/django.po +++ b/plinth/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-05-06 20:18-0400\n" -"PO-Revision-Date: 2024-04-02 18:01+0000\n" +"PO-Revision-Date: 2024-06-20 19:09+0000\n" "Last-Translator: John Doe \n" "Language-Team: French \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.5-dev\n" +"X-Generator: Weblate 5.6-rc\n" #: config.py:103 #, python-brace-format @@ -1633,7 +1633,7 @@ msgstr "Appli : %(app_name)s" #: modules/diagnostics/templates/diagnostics_app.html:20 #: modules/diagnostics/templates/diagnostics_full.html:48 msgid "Try to repair" -msgstr "" +msgstr "Essayer de réparer" #: modules/diagnostics/templates/diagnostics_app.html:32 msgid "This app does not support diagnostics" @@ -1682,7 +1682,7 @@ msgstr "Test de diagnostic" #: modules/diagnostics/views.py:144 #, python-brace-format msgid "App {app_id} is not installed, cannot repair" -msgstr "" +msgstr "L'application {app_id} n'est pas installée, impossible de réparer" #: modules/dynamicdns/__init__.py:28 #, python-brace-format @@ -3962,6 +3962,9 @@ msgid "" "Directory that MiniDLNA Server will read for content. All sub-directories of " "this will be also scanned for media files." msgstr "" +"Le répertoire que le serveur MiniDLNA lira pour le contenu. Tous les sous-" +"répertoires de ce répertoire seront aussi analysés à la recherche de " +"fichiers multimédias." #: modules/minidlna/manifest.py:10 msgid "vlc" @@ -5293,10 +5296,17 @@ msgid "" "and mobile clients. The Nextcloud server provides a well integrated web " "interface." msgstr "" +"Nextcloud est une plate-forme de productivité auto-hébergé qui fournit des " +"fonctionnalités privées et sûres telles que le partage de fichiers, le " +"travail collaboratif et davantage. Nextcloud comprend le serveur Nextcloud, " +"des applications clientes pour les ordinateurs de bureau et des clients " +"mobiles. Le serveur Nextcloud fournit une interface web bien intégrée." #: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" +"Tous les utilisateurs de FreedomBox peuvent utiliser Nextcloud. Pour " +"effectuer des opérations administratives " #: modules/nextcloud/__init__.py:34 #, python-brace-format @@ -5306,95 +5316,76 @@ msgid "" "done by the upstream project and not by Debian/{box_name}. Updates are " "performed following an independent cycle." msgstr "" +"Veuillez noter que Nextcloud est installé et fonctionne au sein d'un " +"conteneur fourni par la communauté Nextcloud. Les vérifications de sécurité, " +"de qualité, de confidentialité et de légalité sont effectuées par le projet " +"en amont et pas par Debian/{box_name}. Les mises à jour sont effectuées en " +"fonction d'un cycle indépendant." #: modules/nextcloud/__init__.py:40 -#, fuzzy -#| msgid "Uninstalling an app is an experimental feature." msgid "This app is experimental." -msgstr "" -"La désinstallation d’applications est une fonctionnalité expérimentale." +msgstr "Cette application est expérimentale." #: modules/nextcloud/__init__.py:58 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 -#, fuzzy -#| msgid "Next" msgid "Nextcloud" -msgstr "Suivant" +msgstr "Nextcloud" #: modules/nextcloud/__init__.py:60 msgid "File Storage & Collaboration" -msgstr "" +msgstr "Stockage de fichiers et collaboration" #: modules/nextcloud/forms.py:19 -#, fuzzy -#| msgid "Hostname set" msgid "Not set" -msgstr "Nom de machine configuré" +msgstr "Non configuré" #: modules/nextcloud/forms.py:26 -#, fuzzy -#| msgid "Server domain" msgid "Override domain" -msgstr "Domaine du serveur" +msgstr "Remplacer le domaine" #: modules/nextcloud/forms.py:27 -#, fuzzy -#| msgid "" -#| "Used by MediaWiki to generate URLs that point to the wiki such as in " -#| "footer, feeds and emails. Examples: \"myfreedombox.example.org\" or " -#| "\"example.onion\"." msgid "" "Set to the domain or IP address that Nextcloud should be forced to generate " "URLs with. Should not be needed if a valid domain is used to access " "Nextcloud. Examples: \"myfreedombox.example.org\" or \"example.onion\"." msgstr "" -"Utilisé par MediaWiki pour engendrer des URL qui pointent vers le wiki comme " -"dans les pieds de pages, fils et courriels. Exemples : « mafreedombox." -"exemple.org » ou « exemple.onion »." +"Configuré sur le domaine ou l'adresse IP avec lequel Nextcloud devrait être " +"forcé de générer des URL. Exemples : « mafreedombox.exemple.org » ou « " +"exemple.onion »." #: modules/nextcloud/forms.py:33 -#, fuzzy -#| msgid "Administrator Password" msgid "Administrator password" msgstr "Mot de passe administrateur" #: modules/nextcloud/forms.py:34 -#, fuzzy -#| msgid "" -#| "Set a new password for MediaWiki's administrator account (admin). The " -#| "password cannot be a common one and the minimum required length is " -#| "10 characters. Leave this field blank to keep the " -#| "current password." msgid "" "Optional. Set a new password for Nextcloud's administrator account " "(nextcloud-admin). The password cannot be a common one and the minimum " "required length is 10 characters. Leave this field blank to " "keep the current password." msgstr "" -"Définir un nouveau mot de passe pour le compte d’administration de MediaWiki " -"(admin). Le mot de passe ne peut pas être courant et la taille minimale " -"requise est de 10 caractères. Laissez ce champ vide pour " -"conserver le mot de passe actuel." +"Optionnel. Définir u n nouveau mot de passe pour le compte de " +"l'administrateur Nextcloud (nextcloud-admin). Le mot de passe ne peut pas " +"être courant et la taille minimale requise est de 10 caractères. Laissez ce champ vide pour conserver le mot de passe actuel." #: modules/nextcloud/forms.py:41 -#, fuzzy -#| msgid "Default zone is external" msgid "Default phone region" -msgstr "La zone par défaut est externe" +msgstr "Région téléphonique par défaut" #: modules/nextcloud/forms.py:42 msgid "" "The default phone region is required to validate phone numbers in the " "profile settings without a country code." msgstr "" +"La région téléphonique par défaut est nécessaire pour valider les numéro de " +"téléphone dans les réglages du profil sans code de pays." #: modules/nextcloud/views.py:53 -#, fuzzy -#| msgid "Password update failed. Please choose a stronger password" msgid "Password update failed. Please choose a stronger password." msgstr "" "Échec de la mise à jour du mot passe. Veuillez choisir un mot de passe plus " -"sûr" +"sûr." #: modules/openvpn/__init__.py:20 #, python-brace-format @@ -8799,10 +8790,9 @@ msgid "Error installing app: {error}" msgstr "Erreur lors de l’installation de l’appli : {error}" #: setup.py:81 setup.py:151 -#, fuzzy, python-brace-format -#| msgid "Error updating app: {error}" +#, python-brace-format msgid "Error repairing app: {error}" -msgstr "Erreur lors de la mise à jour de l’appli : {error}" +msgstr "Erreur lors de la réparation de l’application : {error}" #: setup.py:84 #, python-brace-format @@ -8818,34 +8808,29 @@ msgid "App updated" msgstr "Application mise à jour" #: setup.py:110 -#, fuzzy -#| msgid "Updating app" msgid "Repairing app" -msgstr "Mise à jour de l’application" +msgstr "Réparation de l’application" #: setup.py:130 -#, fuzzy, python-brace-format -#| msgid "Error uninstalling app: {error}" +#, python-brace-format msgid "Error running diagnostics: {error}" -msgstr "Erreur lors de la désinstallation de l’appli : {error}" +msgstr "Erreur lors de l'exécution des diagnostics : {error}" #: setup.py:143 msgid "Skipping repair, no failed checks" -msgstr "" +msgstr "Réparation ignorée, aucune vérification n'a échoué" #: setup.py:157 msgid "Re-running setup to complete repairs" -msgstr "" +msgstr "Ré-exécution de la configuration pour terminer les réparations" #: setup.py:165 -#, fuzzy -#| msgid "App updated" msgid "App repaired." -msgstr "Application mise à jour" +msgstr "Application réparée." #: setup.py:169 msgid "App repair completed with errors:\n" -msgstr "" +msgstr "Réparation de l'application terminée avec des erreurs :\n" #: setup.py:189 msgid "Uninstalling app" From d87685b95a2794a636144ceaaed3100ac7ceb12f Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 20 May 2024 19:44:11 -0400 Subject: [PATCH 2/6] diagnostics: Add option for automatic repair - Not enabled by default currently. This can be changed after further testing. - Re-use existing operation from diagnostics run. However, this requires changing the app_id of the operation for each app. Tests: - Enable automatic repair, and run diagnostics. See that repairs are run. - Enable automatic repair, and wait for daily diagnostics run. See that repairs are run. Closes: #2399. Signed-off-by: James Valleroy Reviewed-by: Sunil Mohan Adapa --- plinth/modules/diagnostics/__init__.py | 29 +++++++++++++++++++++-- plinth/modules/diagnostics/forms.py | 4 ++++ plinth/modules/diagnostics/views.py | 11 +++++++++ plinth/privileged/packages.py | 3 ++- plinth/setup.py | 32 +++++++++++++++++++------- 5 files changed, 68 insertions(+), 11 deletions(-) diff --git a/plinth/modules/diagnostics/__init__.py b/plinth/modules/diagnostics/__init__.py index f763b239c..8fd453db3 100644 --- a/plinth/modules/diagnostics/__init__.py +++ b/plinth/modules/diagnostics/__init__.py @@ -21,6 +21,7 @@ from plinth.diagnostic_check import (CheckJSONDecoder, CheckJSONEncoder, DiagnosticCheck, Result) from plinth.modules.apache.components import diagnose_url_on_all from plinth.modules.backups.components import BackupRestore +from plinth.setup import run_repair_on_app from . import manifest @@ -256,7 +257,7 @@ def _daily_diagnostics_run(data: None = None): logger.info('Skipping daily diagnostics run (disabled)') -def start_diagnostics(data: None = None): +def start_diagnostics(): """Start full diagnostics as a background operation.""" logger.info('Running full diagnostics') try: @@ -275,6 +276,7 @@ def _run_diagnostics(): from plinth.notification import Notification _run_on_all_enabled_modules() + apps_with_issues = set() with results_lock: results = current_results['results'] # Store the most recent results in the database. @@ -283,13 +285,14 @@ def _run_diagnostics(): issue_count = 0 severity = 'warning' - for _app_id, app_data in results.items(): + 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: + apps_with_issues.add(app_id) issue_count += 1 if check.result != Result.WARNING: severity = 'error' @@ -323,6 +326,14 @@ def _run_diagnostics(): data=data, group='admin') note.dismiss(False) + # If enabled, run automatic repair for apps with failed diagnostics. + if is_automatic_repair_enabled(): + logger.info('Starting automatic repair...') + for app_id in apps_with_issues: + run_repair_on_app(app_id, False) + else: + logger.info('Skipping automatic repair, disabled.') + def are_results_available(): """Return whether diagnostic results are available.""" @@ -374,3 +385,17 @@ def is_daily_run_enabled() -> bool: def set_daily_run_enabled(enabled: bool): """Enable or disable daily run.""" kvstore.set('diagnostics_daily_run_enabled', enabled) + + +def is_automatic_repair_enabled() -> bool: + """Return whether automatic repair is enabled. + + In case it is not set, assume it is not enabled. This default could be + changed later. + """ + return kvstore.get_default('diagnostics_automatic_repair_enabled', False) + + +def set_automatic_repair_enabled(enabled: bool): + """Enable or disable automatic repair.""" + kvstore.set('diagnostics_automatic_repair_enabled', enabled) diff --git a/plinth/modules/diagnostics/forms.py b/plinth/modules/diagnostics/forms.py index 21f2ba25a..5f62b5044 100644 --- a/plinth/modules/diagnostics/forms.py +++ b/plinth/modules/diagnostics/forms.py @@ -10,3 +10,7 @@ class ConfigureForm(forms.Form): daily_run_enabled = forms.BooleanField( label=_('Enable daily run'), required=False, help_text=_('When enabled, diagnostic checks will run once a day.')) + + automatic_repair = forms.BooleanField( + label=_('Enable automatic repair'), required=False, + help_text=_('If issues are found, try to repair them automatically.')) diff --git a/plinth/modules/diagnostics/views.py b/plinth/modules/diagnostics/views.py index 8c8648ac2..f3a73f2be 100644 --- a/plinth/modules/diagnostics/views.py +++ b/plinth/modules/diagnostics/views.py @@ -44,14 +44,25 @@ class DiagnosticsView(AppView): """Return the initial values for the form.""" status = super().get_initial() status['daily_run_enabled'] = diagnostics.is_daily_run_enabled() + status['automatic_repair'] = diagnostics.is_automatic_repair_enabled() return status def form_valid(self, form): """Apply the form changes.""" old_status = form.initial new_status = form.cleaned_data + updated = False + if old_status['daily_run_enabled'] != new_status['daily_run_enabled']: diagnostics.set_daily_run_enabled(new_status['daily_run_enabled']) + updated = True + + if old_status['automatic_repair'] != new_status['automatic_repair']: + diagnostics.set_automatic_repair_enabled( + new_status['automatic_repair']) + updated = True + + if updated: messages.success(self.request, _('Configuration updated.')) return super().form_valid(form) diff --git a/plinth/privileged/packages.py b/plinth/privileged/packages.py index 9045d2fad..90d40ccd1 100644 --- a/plinth/privileged/packages.py +++ b/plinth/privileged/packages.py @@ -40,7 +40,8 @@ def install(app_id: str, packages: list[str], skip_recommends: bool = False, try: _assert_managed_packages(app_id, packages) except Exception: - raise PermissionError(f'Packages are not managed: {packages}') + raise PermissionError( + f'Packages are not managed by {app_id}: {packages}') extra_arguments = [] if skip_recommends: diff --git a/plinth/setup.py b/plinth/setup.py index 6c8bbf4c8..af19995fa 100644 --- a/plinth/setup.py +++ b/plinth/setup.py @@ -97,20 +97,36 @@ def _run_setup_on_app(app, current_version, repair: bool = False): operation.on_update(message, exception_to_update) -def run_repair_on_app(app_id): - """Execute the repair process in a thread.""" +def run_repair_on_app(app_id, create_operation=True): + """Execute the repair process in a thread. + + In case this is called from within another operation, creating a new + operation can be skipped. + """ app = app_module.App.get(app_id) current_version = app.get_setup_version() if not current_version: logger.warning('App %s is not installed, cannot repair', app_id) return - logger.debug('Creating operation to repair app: %s', app_id) - return operation_module.manager.new(f'{app_id}-repair', app_id, - gettext_noop('Repairing app'), - _run_repair_on_app, [app], - show_message=True, - show_notification=True) + if create_operation: + logger.debug('Creating operation to repair app: %s', app_id) + return operation_module.manager.new(f'{app_id}-repair', app_id, + gettext_noop('Repairing app'), + _run_repair_on_app, [app], + show_message=True, + show_notification=True) + + # Re-use existing operation. + try: + operation = operation_module.Operation.get_operation() + except AttributeError: + raise RuntimeError( + 'run_repair_on_app: Expected an existing operation.') + + # XXX: Ugly hack to re-use operation from another app. + operation.app_id = app_id + _run_repair_on_app(app) def _run_repair_on_app(app: app_module.App): From 7c485c0367b0c08013bcddb03005bd6663ea3117 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Tue, 25 Jun 2024 14:29:41 -0700 Subject: [PATCH 3/6] container: Allow podman containers to run inside the container - Allow all system calls from within the container (in particular the openat2 syscall [1]). This enables running podman containers inside the nspawn container. Nextcloud can now be tested/developed inside the container. - List of available system call filter groups can be seen with the command 'systemd-analyze syscall-filter'[2]. Links: 1) https://github.com/containers/podman/issues/7013 2) https://www.freedesktop.org/software/systemd/man/latest/systemd-analyze.html#systemd-analyze%20syscall-filter%20%5BSET...%5D Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- container | 3 +++ 1 file changed, 3 insertions(+) diff --git a/container b/container index f1cc8379d..87f722b24 100755 --- a/container +++ b/container @@ -785,6 +785,9 @@ def _create_nspawn_machine(image_file, distribution): nspawn_options = f'''[Exec] Boot=yes PrivateUsers=no +# Allow all system calls to enable podman containers inside the nspawn +# container. +SystemCallFilter=@known [Files] Overlay={_get_project_folder()}:{overlay_folder}:/freedombox From 3e56c96461358c901bd3917128f81f7a384b0ba9 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 1 Jul 2024 20:11:38 -0400 Subject: [PATCH 4/6] locale: Update translation strings Signed-off-by: James Valleroy --- plinth/locale/ar/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/ar_SA/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/be/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/bg/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/bn/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/cs/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/da/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/de/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/django.pot | 70 +++++----- plinth/locale/el/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/es/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/fa/LC_MESSAGES/django.po | 71 +++++----- plinth/locale/fake/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/fr/LC_MESSAGES/django.po | 76 ++++++----- plinth/locale/gl/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/gu/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/hi/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/hu/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/id/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/it/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/ja/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/kn/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/lt/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/lv/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/nb/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/nl/LC_MESSAGES/django.po | 80 +++++++----- plinth/locale/pl/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/pt/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/ru/LC_MESSAGES/django.po | 107 ++++++++------- plinth/locale/si/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/sl/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/sq/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/sr/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/sv/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/ta/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/te/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/tr/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/uk/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/vi/LC_MESSAGES/django.po | 70 +++++----- plinth/locale/zh_Hans/LC_MESSAGES/django.po | 72 +++++----- plinth/locale/zh_Hant/LC_MESSAGES/django.po | 137 +++++++++++--------- 41 files changed, 1707 insertions(+), 1326 deletions(-) diff --git a/plinth/locale/ar/LC_MESSAGES/django.po b/plinth/locale/ar/LC_MESSAGES/django.po index 7b2d13c80..3d2153376 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-05-06 20:18-0400\n" +"POT-Creation-Date: 2024-07-01 20:10-0400\n" "PO-Revision-Date: 2023-10-19 06:18+0000\n" "Last-Translator: Shaik \n" "Language-Team: Arabic \n" "Language-Team: Arabic (Saudi Arabia) \n" "Language-Team: Bulgarian \n" "Language-Team: Bengali \n" "Language-Team: Czech \n" "Language-Team: Danish \n" "Language-Team: German \n" "Language-Team: LANGUAGE \n" @@ -843,7 +843,7 @@ msgstr "" msgid "Admin" msgstr "" -#: modules/bepasty/views.py:88 modules/diagnostics/views.py:55 +#: modules/bepasty/views.py:88 modules/diagnostics/views.py:66 #: modules/nextcloud/views.py:62 modules/searx/views.py:35 #: modules/searx/views.py:46 modules/security/views.py:56 #: modules/snapshot/views.py:158 modules/tor/views.py:73 @@ -1342,77 +1342,77 @@ msgstr "" msgid "Bittorrent client written in Python/PyGTK" msgstr "" -#: modules/diagnostics/__init__.py:28 +#: modules/diagnostics/__init__.py:29 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 "" -#: modules/diagnostics/__init__.py:52 modules/diagnostics/__init__.py:237 +#: modules/diagnostics/__init__.py:53 modules/diagnostics/__init__.py:238 msgid "Diagnostics" msgstr "" -#: modules/diagnostics/__init__.py:98 +#: modules/diagnostics/__init__.py:99 msgid "passed" msgstr "" -#: modules/diagnostics/__init__.py:99 modules/networks/views.py:50 +#: modules/diagnostics/__init__.py:100 modules/networks/views.py:50 msgid "failed" msgstr "" -#: modules/diagnostics/__init__.py:100 +#: modules/diagnostics/__init__.py:101 msgid "error" msgstr "" -#: modules/diagnostics/__init__.py:101 +#: modules/diagnostics/__init__.py:102 msgid "warning" msgstr "" #. Translators: This is the unit of computer storage Mebibyte similar to #. Megabyte. -#: modules/diagnostics/__init__.py:203 +#: modules/diagnostics/__init__.py:204 msgid "MiB" msgstr "" #. Translators: This is the unit of computer storage Gibibyte similar to #. Gigabyte. -#: modules/diagnostics/__init__.py:208 +#: modules/diagnostics/__init__.py:209 msgid "GiB" msgstr "" -#: modules/diagnostics/__init__.py:215 +#: modules/diagnostics/__init__.py:216 msgid "You should disable some apps to reduce memory usage." msgstr "" -#: modules/diagnostics/__init__.py:220 +#: modules/diagnostics/__init__.py:221 msgid "You should not install any new apps on this system." msgstr "" -#: modules/diagnostics/__init__.py:232 +#: modules/diagnostics/__init__.py:233 #, no-python-format, python-brace-format msgid "" "System is low on memory: {percent_used}% used, {memory_available} " "{memory_available_unit} free. {advice_message}" msgstr "" -#: modules/diagnostics/__init__.py:234 +#: modules/diagnostics/__init__.py:235 msgid "Low Memory" msgstr "" -#: modules/diagnostics/__init__.py:265 +#: modules/diagnostics/__init__.py:266 msgid "Running diagnostics" msgstr "" -#: modules/diagnostics/__init__.py:308 +#: modules/diagnostics/__init__.py:311 #, no-python-format, python-brace-format msgid "Found {issue_count} issues during routine tests." msgstr "" -#: modules/diagnostics/__init__.py:309 +#: modules/diagnostics/__init__.py:312 msgid "Diagnostics results" msgstr "" -#: modules/diagnostics/__init__.py:314 +#: modules/diagnostics/__init__.py:317 msgid "Go to diagnostics results" msgstr "" @@ -1424,6 +1424,14 @@ msgstr "" msgid "When enabled, diagnostic checks will run once a day." msgstr "" +#: modules/diagnostics/forms.py:15 +msgid "Enable automatic repair" +msgstr "" + +#: modules/diagnostics/forms.py:16 +msgid "If issues are found, try to repair them automatically." +msgstr "" + #: modules/diagnostics/templates/diagnostics.html:11 msgid "Diagnostics Run" msgstr "" @@ -1487,11 +1495,11 @@ msgstr "" msgid "Result" msgstr "" -#: modules/diagnostics/views.py:114 +#: modules/diagnostics/views.py:125 msgid "Diagnostic Test" msgstr "" -#: modules/diagnostics/views.py:144 +#: modules/diagnostics/views.py:155 #, python-brace-format msgid "App {app_id} is not installed, cannot repair" msgstr "" @@ -7458,7 +7466,7 @@ msgstr "" msgid "Error installing app: {error}" msgstr "" -#: setup.py:81 setup.py:151 +#: setup.py:81 setup.py:167 #, python-brace-format msgid "Error repairing app: {error}" msgstr "" @@ -7476,45 +7484,45 @@ msgstr "" msgid "App updated" msgstr "" -#: setup.py:110 +#: setup.py:115 msgid "Repairing app" msgstr "" -#: setup.py:130 +#: setup.py:146 #, python-brace-format msgid "Error running diagnostics: {error}" msgstr "" -#: setup.py:143 +#: setup.py:159 msgid "Skipping repair, no failed checks" msgstr "" -#: setup.py:157 +#: setup.py:173 msgid "Re-running setup to complete repairs" msgstr "" -#: setup.py:165 +#: setup.py:181 msgid "App repaired." msgstr "" -#: setup.py:169 +#: setup.py:185 msgid "App repair completed with errors:\n" msgstr "" -#: setup.py:189 +#: setup.py:205 msgid "Uninstalling app" msgstr "" -#: setup.py:205 +#: setup.py:221 #, python-brace-format msgid "Error uninstalling app: {error}" msgstr "" -#: setup.py:208 +#: setup.py:224 msgid "App uninstalled." msgstr "" -#: setup.py:581 +#: setup.py:597 msgid "Updating app packages" msgstr "" diff --git a/plinth/locale/el/LC_MESSAGES/django.po b/plinth/locale/el/LC_MESSAGES/django.po index 35cc2f822..8544d7b07 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-05-06 20:18-0400\n" +"POT-Creation-Date: 2024-07-01 20:10-0400\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Greek \n" "Language-Team: Spanish \n" "Language-Team: Persian \n" "Language-Team: Plinth Developers \n" "Language-Team: French \n" "Language-Team: Galician \n" "Language-Team: Gujarati \n" "Language-Team: Hindi \n" "Language-Team: Hungarian \n" "Language-Team: Indonesian \n" "Language-Team: Italian \n" "Language-Team: Japanese \n" "Language-Team: Kannada \n" "Language-Team: Lithuanian \n" "Language-Team: Latvian \n" "Language-Team: Norwegian Bokmål \n" "Language-Team: Dutch create your own." msgstr "" -"Er kunnen informatie pakketten worden gedownload van het Kiwix " -"project, of maak eigen infopaketten." +"Er kunnen informatie pakketten worden gedownload van het " +"Kiwix project, of maak eigen infopaketten." #: modules/kiwix/__init__.py:53 msgid "Manage Kiwix content server" @@ -8625,7 +8635,7 @@ msgstr "Toepassing updaten" msgid "Error installing app: {error}" msgstr "Fout bij het installeren van de toepassing: {error}" -#: setup.py:81 setup.py:151 +#: setup.py:81 setup.py:167 #, python-brace-format msgid "Error repairing app: {error}" msgstr "Fout bij het repareren van de toepassing: {error}" @@ -8643,45 +8653,45 @@ msgstr "De toepassing is geïnstalleerd." msgid "App updated" msgstr "Toepassing bijgewerkt" -#: setup.py:110 +#: setup.py:115 msgid "Repairing app" msgstr "Toepassing repareren" -#: setup.py:130 +#: setup.py:146 #, python-brace-format msgid "Error running diagnostics: {error}" msgstr "Fout bij het doorlopen van de diagnose: {error}" -#: setup.py:143 +#: setup.py:159 msgid "Skipping repair, no failed checks" msgstr "Reparatie overslaan, geen mislukte tests" -#: setup.py:157 +#: setup.py:173 msgid "Re-running setup to complete repairs" msgstr "Opniew setup doorlopen om reparaties te voltooien" -#: setup.py:165 +#: setup.py:181 msgid "App repaired." msgstr "Toepassing gerepareerd." -#: setup.py:169 +#: setup.py:185 msgid "App repair completed with errors:\n" msgstr "Toepassingsherstel voltooid met fouten:\n" -#: setup.py:189 +#: setup.py:205 msgid "Uninstalling app" msgstr "Toepassing wordt verwijderd" -#: setup.py:205 +#: setup.py:221 #, python-brace-format msgid "Error uninstalling app: {error}" msgstr "Fout bij het verwijderen van de toepassing: {error}" -#: setup.py:208 +#: setup.py:224 msgid "App uninstalled." msgstr "De toepassing is verwijderd." -#: setup.py:581 +#: setup.py:597 msgid "Updating app packages" msgstr "Toepassings-pakketten bijwerken" diff --git a/plinth/locale/pl/LC_MESSAGES/django.po b/plinth/locale/pl/LC_MESSAGES/django.po index 7ad04f970..7ae983b5c 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-05-06 20:18-0400\n" +"POT-Creation-Date: 2024-07-01 20:10-0400\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Polish \n" "Language-Team: Portuguese \n" "Language-Team: Russian сервер GnuDIP. После этого сервер назначит ваше DNS-имя новому IP-адресу, и если кто-то " -"из Интернета запросит ваше DNS-имя, он получит ответ с вашим текущим " -"IP-адресом." +"из Интернета запросит ваше DNS-имя, он получит ответ с вашим текущим IP-" +"адресом." #: modules/dynamicdns/__init__.py:40 msgid "" @@ -2626,8 +2636,8 @@ msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -"Дополнительную информацию о проекте %(box_name)s можно найти на %(box_name)s Wiki." +"Дополнительную информацию о проекте %(box_name)s можно найти на %(box_name)s Wiki." #: modules/help/templates/help_about.html:91 msgid "Learn more" @@ -2796,10 +2806,10 @@ msgid "" "oftc.net/?randomnick=1&channels=freedombox&prompt=1\"> #freedombox " "channel using the IRC web interface." msgstr "" -"Многие участники и пользователи %(box_name)s также доступны в IRC-сети " -"irc.oftc.net. Присоединяйтесь и запрашивайте помощь на канале #freedombox с помощью веб-интерфейса IRC." +"Многие участники и пользователи %(box_name)s также доступны в IRC-сети irc." +"oftc.net. Присоединяйтесь и запрашивайте помощь на канале " +"#freedombox с помощью веб-интерфейса IRC." #: modules/help/templates/help_manual.html:18 msgid "Download as PDF" @@ -5739,9 +5749,9 @@ msgstr "" "Вы можете использовать Privoxy, изменив настройки прокси-сервера вашего " "браузера на имя хоста {box_name} (или IP-адрес) с портом 8118. Only " "connections from local network IP addresses are permitted. While using " -"Privoxy, you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." +"Privoxy, you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." #: modules/privoxy/__init__.py:53 msgid "Privoxy" @@ -5983,8 +5993,9 @@ msgid "" "When enabled, RSS-Bridge can be accessed by any " "user belonging to the feed-reader group." msgstr "" -"Когда эта функция включена, доступ к RSS-мостику может получить любой пользователь, входящий в группу читателей фидов." +"Когда эта функция включена, доступ к RSS-мостику может получить любой пользователь, входящий в группу читателей " +"фидов." #: modules/rssbridge/__init__.py:28 #, python-brace-format @@ -7536,8 +7547,8 @@ msgid "" "for connecting." msgstr "" "При использовании мобильного или настольного приложения для Tiny Tiny RSS " -"используйте для подключения URL /tt-rss или /tt-rss-app." +"используйте для подключения URL /tt-rss или /tt-rss-app." #: modules/ttrss/__init__.py:50 modules/ttrss/manifest.py:44 msgid "Tiny Tiny RSS" @@ -8060,8 +8071,8 @@ msgid "" "Use the change password form to " "change the password." msgstr "" -"Для смены пароля используйте форму изменить пароль ." +"Для смены пароля используйте форму изменить пароль ." #: modules/users/templates/users_update.html:31 #: templates/language-selection.html:17 @@ -8635,7 +8646,7 @@ msgstr "Обновление приложения" msgid "Error installing app: {error}" msgstr "Ошибка при установке приложения: {error}" -#: setup.py:81 setup.py:151 +#: setup.py:81 setup.py:167 #, python-brace-format msgid "Error repairing app: {error}" msgstr "Ошибка при восстановлении приложения: {error}" @@ -8653,45 +8664,45 @@ msgstr "Установлено приложение." msgid "App updated" msgstr "Приложение обновлено" -#: setup.py:110 +#: setup.py:115 msgid "Repairing app" msgstr "Приложение для ремонта" -#: setup.py:130 +#: setup.py:146 #, python-brace-format msgid "Error running diagnostics: {error}" msgstr "Ошибка при выполнении диагностики: {error}" -#: setup.py:143 +#: setup.py:159 msgid "Skipping repair, no failed checks" msgstr "Пропуск ремонта, отсутствие неудачных проверок" -#: setup.py:157 +#: setup.py:173 msgid "Re-running setup to complete repairs" msgstr "Повторное выполнение установки для завершения ремонта" -#: setup.py:165 +#: setup.py:181 msgid "App repaired." msgstr "Приложение отремонтировано." -#: setup.py:169 +#: setup.py:185 msgid "App repair completed with errors:\n" msgstr "Восстановление приложения завершено с ошибками:\n" -#: setup.py:189 +#: setup.py:205 msgid "Uninstalling app" msgstr "Удаление приложения" -#: setup.py:205 +#: setup.py:221 #, python-brace-format msgid "Error uninstalling app: {error}" msgstr "Ошибка при удалении приложения: {error}" -#: setup.py:208 +#: setup.py:224 msgid "App uninstalled." msgstr "Приложение удалено." -#: setup.py:581 +#: setup.py:597 msgid "Updating app packages" msgstr "Обновление пакетов приложений" diff --git a/plinth/locale/si/LC_MESSAGES/django.po b/plinth/locale/si/LC_MESSAGES/django.po index 6f51cac86..e17cf2fc2 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-05-06 20:18-0400\n" +"POT-Creation-Date: 2024-07-01 20:10-0400\n" "PO-Revision-Date: 2021-04-27 13:32+0000\n" "Last-Translator: HelaBasa \n" "Language-Team: Sinhala \n" "Language-Team: Slovenian \n" "Language-Team: Albanian \n" "Language-Team: Serbian \n" "Language-Team: Swedish \n" "Language-Team: LANGUAGE \n" @@ -844,7 +844,7 @@ msgstr "" msgid "Admin" msgstr "" -#: modules/bepasty/views.py:88 modules/diagnostics/views.py:55 +#: modules/bepasty/views.py:88 modules/diagnostics/views.py:66 #: modules/nextcloud/views.py:62 modules/searx/views.py:35 #: modules/searx/views.py:46 modules/security/views.py:56 #: modules/snapshot/views.py:158 modules/tor/views.py:73 @@ -1343,77 +1343,77 @@ msgstr "" msgid "Bittorrent client written in Python/PyGTK" msgstr "" -#: modules/diagnostics/__init__.py:28 +#: modules/diagnostics/__init__.py:29 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 "" -#: modules/diagnostics/__init__.py:52 modules/diagnostics/__init__.py:237 +#: modules/diagnostics/__init__.py:53 modules/diagnostics/__init__.py:238 msgid "Diagnostics" msgstr "" -#: modules/diagnostics/__init__.py:98 +#: modules/diagnostics/__init__.py:99 msgid "passed" msgstr "" -#: modules/diagnostics/__init__.py:99 modules/networks/views.py:50 +#: modules/diagnostics/__init__.py:100 modules/networks/views.py:50 msgid "failed" msgstr "" -#: modules/diagnostics/__init__.py:100 +#: modules/diagnostics/__init__.py:101 msgid "error" msgstr "" -#: modules/diagnostics/__init__.py:101 +#: modules/diagnostics/__init__.py:102 msgid "warning" msgstr "" #. Translators: This is the unit of computer storage Mebibyte similar to #. Megabyte. -#: modules/diagnostics/__init__.py:203 +#: modules/diagnostics/__init__.py:204 msgid "MiB" msgstr "" #. Translators: This is the unit of computer storage Gibibyte similar to #. Gigabyte. -#: modules/diagnostics/__init__.py:208 +#: modules/diagnostics/__init__.py:209 msgid "GiB" msgstr "" -#: modules/diagnostics/__init__.py:215 +#: modules/diagnostics/__init__.py:216 msgid "You should disable some apps to reduce memory usage." msgstr "" -#: modules/diagnostics/__init__.py:220 +#: modules/diagnostics/__init__.py:221 msgid "You should not install any new apps on this system." msgstr "" -#: modules/diagnostics/__init__.py:232 +#: modules/diagnostics/__init__.py:233 #, no-python-format, python-brace-format msgid "" "System is low on memory: {percent_used}% used, {memory_available} " "{memory_available_unit} free. {advice_message}" msgstr "" -#: modules/diagnostics/__init__.py:234 +#: modules/diagnostics/__init__.py:235 msgid "Low Memory" msgstr "" -#: modules/diagnostics/__init__.py:265 +#: modules/diagnostics/__init__.py:266 msgid "Running diagnostics" msgstr "" -#: modules/diagnostics/__init__.py:308 +#: modules/diagnostics/__init__.py:311 #, no-python-format, python-brace-format msgid "Found {issue_count} issues during routine tests." msgstr "" -#: modules/diagnostics/__init__.py:309 +#: modules/diagnostics/__init__.py:312 msgid "Diagnostics results" msgstr "" -#: modules/diagnostics/__init__.py:314 +#: modules/diagnostics/__init__.py:317 msgid "Go to diagnostics results" msgstr "" @@ -1425,6 +1425,14 @@ msgstr "" msgid "When enabled, diagnostic checks will run once a day." msgstr "" +#: modules/diagnostics/forms.py:15 +msgid "Enable automatic repair" +msgstr "" + +#: modules/diagnostics/forms.py:16 +msgid "If issues are found, try to repair them automatically." +msgstr "" + #: modules/diagnostics/templates/diagnostics.html:11 msgid "Diagnostics Run" msgstr "" @@ -1488,11 +1496,11 @@ msgstr "" msgid "Result" msgstr "" -#: modules/diagnostics/views.py:114 +#: modules/diagnostics/views.py:125 msgid "Diagnostic Test" msgstr "" -#: modules/diagnostics/views.py:144 +#: modules/diagnostics/views.py:155 #, python-brace-format msgid "App {app_id} is not installed, cannot repair" msgstr "" @@ -7459,7 +7467,7 @@ msgstr "" msgid "Error installing app: {error}" msgstr "" -#: setup.py:81 setup.py:151 +#: setup.py:81 setup.py:167 #, python-brace-format msgid "Error repairing app: {error}" msgstr "" @@ -7477,45 +7485,45 @@ msgstr "" msgid "App updated" msgstr "" -#: setup.py:110 +#: setup.py:115 msgid "Repairing app" msgstr "" -#: setup.py:130 +#: setup.py:146 #, python-brace-format msgid "Error running diagnostics: {error}" msgstr "" -#: setup.py:143 +#: setup.py:159 msgid "Skipping repair, no failed checks" msgstr "" -#: setup.py:157 +#: setup.py:173 msgid "Re-running setup to complete repairs" msgstr "" -#: setup.py:165 +#: setup.py:181 msgid "App repaired." msgstr "" -#: setup.py:169 +#: setup.py:185 msgid "App repair completed with errors:\n" msgstr "" -#: setup.py:189 +#: setup.py:205 msgid "Uninstalling app" msgstr "" -#: setup.py:205 +#: setup.py:221 #, python-brace-format msgid "Error uninstalling app: {error}" msgstr "" -#: setup.py:208 +#: setup.py:224 msgid "App uninstalled." msgstr "" -#: setup.py:581 +#: setup.py:597 msgid "Updating app packages" msgstr "" diff --git a/plinth/locale/te/LC_MESSAGES/django.po b/plinth/locale/te/LC_MESSAGES/django.po index ba6589e48..4a3a39c3a 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-05-06 20:18-0400\n" +"POT-Creation-Date: 2024-07-01 20:10-0400\n" "PO-Revision-Date: 2024-02-11 20:14+0000\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Telugu \n" "Language-Team: Turkish \n" "Language-Team: Ukrainian \n" "Language-Team: Vietnamese \n" @@ -879,7 +879,7 @@ msgstr "删除" msgid "Admin" msgstr "管理员" -#: modules/bepasty/views.py:88 modules/diagnostics/views.py:55 +#: modules/bepasty/views.py:88 modules/diagnostics/views.py:66 #: modules/nextcloud/views.py:62 modules/searx/views.py:35 #: modules/searx/views.py:46 modules/security/views.py:56 #: modules/snapshot/views.py:158 modules/tor/views.py:73 @@ -1411,54 +1411,54 @@ msgstr "下载目录" msgid "Bittorrent client written in Python/PyGTK" msgstr "用Python/PyGTK编写的Bittorrent客户端" -#: modules/diagnostics/__init__.py:28 +#: modules/diagnostics/__init__.py:29 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 "" "系统诊断将运行测试程序检查您的系统以确认应用程序和服务正在按预期方式运行。" -#: modules/diagnostics/__init__.py:52 modules/diagnostics/__init__.py:237 +#: modules/diagnostics/__init__.py:53 modules/diagnostics/__init__.py:238 msgid "Diagnostics" msgstr "诊断程序" -#: modules/diagnostics/__init__.py:98 +#: modules/diagnostics/__init__.py:99 msgid "passed" msgstr "通过了" -#: modules/diagnostics/__init__.py:99 modules/networks/views.py:50 +#: modules/diagnostics/__init__.py:100 modules/networks/views.py:50 msgid "failed" msgstr "失败" -#: modules/diagnostics/__init__.py:100 +#: modules/diagnostics/__init__.py:101 msgid "error" msgstr "错误" -#: modules/diagnostics/__init__.py:101 +#: modules/diagnostics/__init__.py:102 msgid "warning" msgstr "警告" #. Translators: This is the unit of computer storage Mebibyte similar to #. Megabyte. -#: modules/diagnostics/__init__.py:203 +#: modules/diagnostics/__init__.py:204 msgid "MiB" msgstr "MiB" #. Translators: This is the unit of computer storage Gibibyte similar to #. Gigabyte. -#: modules/diagnostics/__init__.py:208 +#: modules/diagnostics/__init__.py:209 msgid "GiB" msgstr "GiB" -#: modules/diagnostics/__init__.py:215 +#: modules/diagnostics/__init__.py:216 msgid "You should disable some apps to reduce memory usage." msgstr "你应该禁用一些应用程序以减少内存的使用。" -#: modules/diagnostics/__init__.py:220 +#: modules/diagnostics/__init__.py:221 msgid "You should not install any new apps on this system." msgstr "你不应该在这个系统上安装任何新的应用程序。" -#: modules/diagnostics/__init__.py:232 +#: modules/diagnostics/__init__.py:233 #, no-python-format, python-brace-format msgid "" "System is low on memory: {percent_used}% used, {memory_available} " @@ -1467,24 +1467,24 @@ msgstr "" "系统内存不足:已使用 {percent_used},{memory_available} " "{memory_available_unit}可用。{advice_message}" -#: modules/diagnostics/__init__.py:234 +#: modules/diagnostics/__init__.py:235 msgid "Low Memory" msgstr "低内存" -#: modules/diagnostics/__init__.py:265 +#: modules/diagnostics/__init__.py:266 msgid "Running diagnostics" msgstr "运行诊断程序" -#: modules/diagnostics/__init__.py:308 +#: modules/diagnostics/__init__.py:311 #, no-python-format, python-brace-format msgid "Found {issue_count} issues during routine tests." msgstr "" -#: modules/diagnostics/__init__.py:309 +#: modules/diagnostics/__init__.py:312 msgid "Diagnostics results" msgstr "诊断结果" -#: modules/diagnostics/__init__.py:314 +#: modules/diagnostics/__init__.py:317 msgid "Go to diagnostics results" msgstr "转到诊断结果" @@ -1496,6 +1496,16 @@ msgstr "开启每日运行" msgid "When enabled, diagnostic checks will run once a day." msgstr "" +#: modules/diagnostics/forms.py:15 +#, fuzzy +#| msgid "Enable auto-update" +msgid "Enable automatic repair" +msgstr "启用自动更新" + +#: modules/diagnostics/forms.py:16 +msgid "If issues are found, try to repair them automatically." +msgstr "" + #: modules/diagnostics/templates/diagnostics.html:11 msgid "Diagnostics Run" msgstr "运行诊断" @@ -1562,11 +1572,11 @@ msgstr "测试" msgid "Result" msgstr "结果" -#: modules/diagnostics/views.py:114 +#: modules/diagnostics/views.py:125 msgid "Diagnostic Test" msgstr "诊断测试" -#: modules/diagnostics/views.py:144 +#: modules/diagnostics/views.py:155 #, python-brace-format msgid "App {app_id} is not installed, cannot repair" msgstr "" @@ -7726,7 +7736,7 @@ msgstr "" msgid "Error installing app: {error}" msgstr "安装应用出错:{error}" -#: setup.py:81 setup.py:151 +#: setup.py:81 setup.py:167 #, python-brace-format msgid "Error repairing app: {error}" msgstr "修复应用出错:{error}" @@ -7744,45 +7754,45 @@ msgstr "应用已安装。" msgid "App updated" msgstr "应用已更新" -#: setup.py:110 +#: setup.py:115 msgid "Repairing app" msgstr "正在修复应用" -#: setup.py:130 +#: setup.py:146 #, python-brace-format msgid "Error running diagnostics: {error}" msgstr "运行诊断出错:{error}" -#: setup.py:143 +#: setup.py:159 msgid "Skipping repair, no failed checks" msgstr "" -#: setup.py:157 +#: setup.py:173 msgid "Re-running setup to complete repairs" msgstr "" -#: setup.py:165 +#: setup.py:181 msgid "App repaired." msgstr "应用已修复。" -#: setup.py:169 +#: setup.py:185 msgid "App repair completed with errors:\n" msgstr "" -#: setup.py:189 +#: setup.py:205 msgid "Uninstalling app" msgstr "卸载应用" -#: setup.py:205 +#: setup.py:221 #, python-brace-format msgid "Error uninstalling app: {error}" msgstr "卸载应用出错:{error}" -#: setup.py:208 +#: setup.py:224 msgid "App uninstalled." msgstr "应用已卸载。" -#: setup.py:581 +#: setup.py:597 msgid "Updating app packages" msgstr "更新软件包中" diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po index d828cac9a..f669e127a 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-05-06 20:18-0400\n" +"POT-Creation-Date: 2024-07-01 20:10-0400\n" "PO-Revision-Date: 2024-06-03 11:47+0000\n" "Last-Translator: Ray Kuo \n" "Language-Team: Chinese (Traditional) GnuDIP 伺服器。之後," -"伺服器將將您的 DNS 名稱分配給新的 IP,如果有人從網路上詢問您的 DNS 名稱," -"他們將收到包含您當前 IP 地址的回應。" +"解決方案是將 DNS 名稱分配給您的 IP 地址,並在您的網路服務供應商更改您的 IP 時" +"更新 DNS 名稱。動態 DNS 允許您將當前的公共 IP 地址推送到一個 GnuDIP 伺服" +"器。之後,伺服器將將您的 DNS 名稱分配給新的 IP,如果有人從網路上詢問您的 DNS " +"名稱,他們將收到包含您當前 IP 地址的回應。" #: modules/dynamicdns/__init__.py:40 msgid "" @@ -1612,10 +1620,10 @@ msgid "" "freedombox.org or you may find free update URL based services at freedns.afraid.org." msgstr "" -"如果您正在尋找免費的動態 DNS 帳戶,您可以在 ddns.freedombox.org 找到免費的 GnuDIP 服務," -"或者您也可以在 freedns.afraid.org 找到基於更新 URL 的免費服務。" +"如果您正在尋找免費的動態 DNS 帳戶,您可以在 ddns.freedombox.org 找到免費的 GnuDIP " +"服務,或者您也可以在 freedns.afraid.org 找到基於更新 URL 的免費服務。" #: modules/dynamicdns/__init__.py:61 msgid "Dynamic DNS Client" @@ -1631,24 +1639,25 @@ msgid "" "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" -"URL 中可以使用變數 <User>、<Pass>、<Ip> 和 " -"<Domain>。有關詳細信息,請參閱示例提供者的更新 URL 模板。" +"URL 中可以使用變數 <User>、<Pass>、<Ip> 和 <Domain>。" +"有關詳細信息,請參閱示例提供者的更新 URL 模板。" #: modules/dynamicdns/forms.py:22 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnuDIP protocol or your provider is not listed " "you may use the update URL of your provider." -msgstr "請根據您的供應商選擇一個更新協議。如果您的供應商不支持 GnuDIP " -"協議,或者您的供應商未列出,您可以使用您的供應商的更新 URL。" +msgstr "" +"請根據您的供應商選擇一個更新協議。如果您的供應商不支持 GnuDIP 協議,或者您的" +"供應商未列出,您可以使用您的供應商的更新 URL。" #: modules/dynamicdns/forms.py:27 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" -"請不要在此處輸入 URL(例如 \"https://example.com/\"),而只需輸入 GnuDIP " -"伺服器的主機名稱(例如 \"example.com\")。" +"請不要在此處輸入 URL(例如 \"https://example.com/\"),而只需輸入 GnuDIP 伺服" +"器的主機名稱(例如 \"example.com\")。" #: modules/dynamicdns/forms.py:31 #, python-brace-format @@ -1804,7 +1813,8 @@ msgstr "已經是最新的" msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." -msgstr "XMPP是一種開放和標準化的通信協定。在這裡,您可以運行和配置名為 ejabberd 的 " +msgstr "" +"XMPP是一種開放和標準化的通信協定。在這裡,您可以運行和配置名為 ejabberd 的 " "XMPP 伺服器。" #: modules/ejabberd/__init__.py:32 @@ -1816,9 +1826,9 @@ msgid "" "any user with a {box_name} login." msgstr "" "要進行實際通信,您可以使用 Web 用戶端或任何其他 " -"XMPP " -"用戶端。啟用後,任何具有 {box_name} 登錄名的 " -"使用者都可以訪問 ejabberd。" +"XMPP 用戶端" +"。啟用後,任何具有 {box_name} 登錄名的 使用者都" +"可以訪問 ejabberd。" #: modules/ejabberd/__init__.py:40 #, python-brace-format @@ -1826,8 +1836,8 @@ msgid "" "ejabberd needs a STUN/TURN server for audio/video calls. Install the Coturn app or configure an external server." msgstr "" -"ejabberd 需要一個用於音訊/視頻通話的 STUN/TURN 伺服器。安裝 Coturn 應用程式或配置外部伺服器。" +"ejabberd 需要一個用於音訊/視頻通話的 STUN/TURN 伺服器。安裝 Coturn 應用程式或配置外部伺服器。" #: modules/ejabberd/__init__.py:61 msgid "ejabberd" @@ -1847,7 +1857,8 @@ msgstr "網域名稱" msgid "" "Domains to be used by ejabberd. Note that user accounts are unique for each " "domain, and migrating users to a new domain name is not yet implemented." -msgstr "ejabberd 要使用的域。請注意,每個域的用戶帳戶都是唯一的,尚未實現將使用者遷移" +msgstr "" +"ejabberd 要使用的域。請注意,每個域的用戶帳戶都是唯一的,尚未實現將使用者遷移" "到新功能變數名稱。" #: modules/ejabberd/forms.py:26 @@ -1963,8 +1974,8 @@ msgid "" "Roundcube app provides web interface " "for users to access email." msgstr "" -"Roundcube 應用程式 " -"提供使用者存取電子郵件的 Web 介面。" +"Roundcube 應用程式 提供使用者存取電子" +"郵件的 Web 介面。" #: modules/email/__init__.py:44 msgid "" @@ -2098,8 +2109,8 @@ msgid "" "network traffic on your {box_name}. Keeping a firewall enabled and properly " "configured reduces risk of security threat from the Internet." msgstr "" -"防火牆是一個安全系統,用於控制您的 {box_name} 上傳入和傳出的網路流量。" -"保持防火牆啟用並正確配置可降低來自 Internet 的安全性威脅的風險。" +"防火牆是一個安全系統,用於控制您的 {box_name} 上傳入和傳出的網路流量。保持防" +"火牆啟用並正確配置可降低來自 Internet 的安全性威脅的風險。" #: modules/firewall/__init__.py:61 msgid "Firewall" @@ -7627,7 +7638,7 @@ msgstr "" msgid "Error installing app: {error}" msgstr "安裝應用遇到錯誤:{error}" -#: setup.py:81 setup.py:151 +#: setup.py:81 setup.py:167 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error repairing app: {error}" @@ -7649,51 +7660,51 @@ msgstr "應用已完成安裝。" msgid "App updated" msgstr "" -#: setup.py:110 +#: setup.py:115 msgid "Repairing app" msgstr "" -#: setup.py:130 +#: setup.py:146 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error running diagnostics: {error}" msgstr "安裝應用遇到錯誤:{error}" -#: setup.py:143 +#: setup.py:159 msgid "Skipping repair, no failed checks" msgstr "" -#: setup.py:157 +#: setup.py:173 msgid "Re-running setup to complete repairs" msgstr "" -#: setup.py:165 +#: setup.py:181 msgid "App repaired." msgstr "" -#: setup.py:169 +#: setup.py:185 msgid "App repair completed with errors:\n" msgstr "" -#: setup.py:189 +#: setup.py:205 #, fuzzy #| msgid "Error installing application: {error}" msgid "Uninstalling app" msgstr "安裝應用遇到錯誤:{error}" -#: setup.py:205 +#: setup.py:221 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error uninstalling app: {error}" msgstr "安裝應用遇到錯誤:{error}" -#: setup.py:208 +#: setup.py:224 #, fuzzy #| msgid "Application installed." msgid "App uninstalled." msgstr "應用已完成安裝。" -#: setup.py:581 +#: setup.py:597 msgid "Updating app packages" msgstr "" From 2a51fb8c9b4d69b3a069958b5b213b6df47e9536 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 1 Jul 2024 20:55:10 -0400 Subject: [PATCH 5/6] doc: Fetch latest manual Signed-off-by: James Valleroy --- doc/manual/en/ReleaseNotes.raw.wiki | 6 ++++++ doc/manual/es/ReleaseNotes.raw.wiki | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 699ca051c..f503c7e85 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,12 @@ 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.14 (2024-07-01) == + + * container: Allow podman containers to run inside the container + * diagnostics: Add option for automatic repair + * locale: Update translations for French + == FreedomBox 24.13 (2024-06-17) == * locale: Update translations for Czech, Dutch, Swedish, Ukrainian diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index 699ca051c..f503c7e85 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,12 @@ 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.14 (2024-07-01) == + + * container: Allow podman containers to run inside the container + * diagnostics: Add option for automatic repair + * locale: Update translations for French + == FreedomBox 24.13 (2024-06-17) == * locale: Update translations for Czech, Dutch, Swedish, Ukrainian From 2cbbd95609019288784ce8941e7dda675ff7223e Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 1 Jul 2024 20:55:34 -0400 Subject: [PATCH 6/6] Release v24.14 to unstable Signed-off-by: James Valleroy --- debian/changelog | 15 +++++++++++++++ plinth/__init__.py | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 1d237847b..dab49ea18 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,18 @@ +freedombox (24.14) unstable; urgency=medium + + [ John Doe ] + * Translated using Weblate (French) + + [ James Valleroy ] + * diagnostics: Add option for automatic repair + * locale: Update translation strings + * doc: Fetch latest manual + + [ Sunil Mohan Adapa ] + * container: Allow podman containers to run inside the container + + -- James Valleroy Mon, 01 Jul 2024 20:44:53 -0400 + freedombox (24.13) unstable; urgency=medium [ Tymofii Lytvynenko ] diff --git a/plinth/__init__.py b/plinth/__init__.py index e4e9656e6..a71ae01a7 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '24.13' +__version__ = '24.14'