From 0ae40087ef3c82f0a857833bfead7b6c2ad9ac70 Mon Sep 17 00:00:00 2001 From: Burak Yavuz Date: Tue, 19 Nov 2024 04:07:51 +0000 Subject: [PATCH 01/82] Translated using Weblate (Turkish) Currently translated at 100.0% (1775 of 1775 strings) --- plinth/locale/tr/LC_MESSAGES/django.po | 34 ++++++++++---------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index 9958e910e..5f9136720 100644 --- a/plinth/locale/tr/LC_MESSAGES/django.po +++ b/plinth/locale/tr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-11-06 05:06+0000\n" +"PO-Revision-Date: 2024-11-19 23:24+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.8.2\n" +"X-Generator: Weblate 5.9-dev\n" #: config.py:103 #, python-brace-format @@ -5730,29 +5730,24 @@ msgstr "" #: modules/networks/templates/wifi_scan.html:14 msgid "No Wi-Fi device detected." -msgstr "" +msgstr "Algılanan kablosuz (Wi-Fi) aygıtı yok." #: modules/networks/templates/wifi_scan.html:21 -#, fuzzy, python-format -#| msgid "Delete %(username)s" +#, python-format msgid "Device: %(interface_name)s" -msgstr "%(username)s Kullanıcısını Sil" +msgstr "Aygıt: %(interface_name)s" #: modules/networks/templates/wifi_scan.html:27 -#, fuzzy -#| msgid "Last Connected Time" msgid "Last scanned: " -msgstr "Son Bağlanma Zamanı" +msgstr "Son taranan: " #: modules/networks/templates/wifi_scan.html:31 msgid "never" -msgstr "" +msgstr "asla" #: modules/networks/templates/wifi_scan.html:52 -#, fuzzy -#| msgid "Wi-Fi network not found" msgid "No Wi-Fi networks found." -msgstr "Kablosuz (Wi-Fi) ağı bulunamadı" +msgstr "Bulunan kablosuz (Wi-Fi) ağları yok." #: modules/networks/views.py:27 msgid "disabled" @@ -6852,19 +6847,16 @@ msgstr "" "href=\"{users_url}\">herhangi bir kullanıcı tarafından erişilebilir." #: modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Tiny Tiny RSS to " -#| "follow various websites. When adding a feed, enable authentication and " -#| "use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Tiny Tiny RSS to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"Çeşitli web sitelerini takip etmek için Tiny Tiny " -"RSS ile RSS-Bridge'i kullanabilirsiniz. Bir bildirim eklerken, kimlik " -"doğrulamayı etkinleştirin ve {box_name} kimlik bilgilerinizi kullanın." +"Çeşitli web sitelerini takip etmek için Miniflux veya Tiny Tiny RSS ile RSS-Bridge'i " +"kullanabilirsiniz. Bir bildirim eklerken, kimlik doğrulamayı etkinleştirin " +"ve {box_name} kimlik bilgilerinizi kullanın." #: modules/rssbridge/__init__.py:48 modules/ttrss/__init__.py:47 msgid "Read and subscribe to news feeds" From b446ef67a169267409a7a179c0b49a9879565bbf Mon Sep 17 00:00:00 2001 From: 109247019824 Date: Tue, 19 Nov 2024 03:19:04 +0000 Subject: [PATCH 02/82] Translated using Weblate (Bulgarian) Currently translated at 46.7% (829 of 1775 strings) --- plinth/locale/bg/LC_MESSAGES/django.po | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index 9a1d2fcfb..507e9c7f1 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-11-06 05:06+0000\n" +"PO-Revision-Date: 2024-11-19 23:24+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian \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.8.2\n" +"X-Generator: Weblate 5.9-dev\n" #: config.py:103 #, python-brace-format @@ -6264,19 +6264,16 @@ msgstr "" "потребител, принадлежащ към групата feed-reader." #: modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Tiny Tiny RSS to " -#| "follow various websites. When adding a feed, enable authentication and " -#| "use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Tiny Tiny RSS to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"Можете да използвате RSS-Bridge заедно с Tiny Tiny " -"RSS, за да следвате различни страници. При добавяне на емисия, включете " -"удостоверяването и използвайте данните за вход на {box_name}." +"Можете да използвате RSS-Bridge заедно с Miniflux или Tiny Tiny RSS, за да следвате " +"различни страници. При добавяне на емисия, включете удостоверяването и " +"използвайте данните за вход на {box_name}." #: modules/rssbridge/__init__.py:48 modules/ttrss/__init__.py:47 msgid "Read and subscribe to news feeds" From f3a79cfe8b00b4ff59424c2a8edb700110780e8f Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 19 Nov 2024 07:10:35 +0000 Subject: [PATCH 03/82] Translated using Weblate (Albanian) Currently translated at 99.7% (1771 of 1775 strings) --- plinth/locale/sq/LC_MESSAGES/django.po | 34 ++++++++++---------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index 10c638de6..7cf94cc97 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-11-06 05:06+0000\n" +"PO-Revision-Date: 2024-11-19 23:24+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.8.2\n" +"X-Generator: Weblate 5.9-dev\n" #: config.py:103 #, python-brace-format @@ -5767,29 +5767,24 @@ msgstr "" #: modules/networks/templates/wifi_scan.html:14 msgid "No Wi-Fi device detected." -msgstr "" +msgstr "S’u pikas pajisje Wi-Fi." #: modules/networks/templates/wifi_scan.html:21 -#, fuzzy, python-format -#| msgid "Delete %(username)s" +#, python-format msgid "Device: %(interface_name)s" -msgstr "Fshije %(username)s" +msgstr "Pajisje: %(interface_name)s" #: modules/networks/templates/wifi_scan.html:27 -#, fuzzy -#| msgid "Last Connected Time" msgid "Last scanned: " -msgstr "Kohë e Lidhjes së Fundit" +msgstr "Skanuar së fundi më: " #: modules/networks/templates/wifi_scan.html:31 msgid "never" -msgstr "" +msgstr "kurrë" #: modules/networks/templates/wifi_scan.html:52 -#, fuzzy -#| msgid "Wi-Fi network not found" msgid "No Wi-Fi networks found." -msgstr "S’u gjet rrjet Wi-Fi" +msgstr "S’u gjetën rrjete Wi-Fi." #: modules/networks/views.py:27 msgid "disabled" @@ -6898,19 +6893,16 @@ msgstr "" "prurjeve." #: modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Tiny Tiny RSS to " -#| "follow various websites. When adding a feed, enable authentication and " -#| "use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Tiny Tiny RSS to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"RSS-Bridge-in mund ta përdorni me Tiny Tiny RSS " -"për të ndjekur sajte të ndryshëm. Kur shtohet një prurje, aktivizoni " -"mirëfilltësimin dhe përdorni kredencialet tuaj për {box_name}." +"RSS-Bridge-in mund ta përdorni me Miniflux, " +"ose Tiny Tiny RSS për të ndjekur sajte të " +"ndryshëm. Kur shtohet një prurje, aktivizoni mirëfilltësimin dhe përdorni " +"kredencialet tuaj për {box_name} credentials." #: modules/rssbridge/__init__.py:48 modules/ttrss/__init__.py:47 msgid "Read and subscribe to news feeds" From 08eab8ca6309c01d51a6afc38615a91c31082b42 Mon Sep 17 00:00:00 2001 From: Ettore Atalan Date: Wed, 20 Nov 2024 22:12:32 +0000 Subject: [PATCH 04/82] Translated using Weblate (German) Currently translated at 98.6% (1751 of 1775 strings) --- plinth/locale/de/LC_MESSAGES/django.po | 44 ++++++++------------------ 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index 118bb9f54..292d00086 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-11-07 15:00+0000\n" -"Last-Translator: Dietmar \n" +"PO-Revision-Date: 2024-11-20 22:29+0000\n" +"Last-Translator: Ettore Atalan \n" "Language-Team: German \n" "Language: de\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.8.2\n" +"X-Generator: Weblate 5.9-dev\n" #: config.py:103 #, python-brace-format @@ -3013,10 +3013,8 @@ msgstr "" "Cockpit oder SSH)." #: modules/help/templates/help_about.html:85 -#, fuzzy -#| msgid "Learn more" msgid "Learn" -msgstr "Mehr erfahren" +msgstr "Kennenlernen" #: modules/help/templates/help_about.html:88 msgid "Homepage" @@ -3035,10 +3033,8 @@ msgid "Translate" msgstr "Übersetzen" #: modules/help/templates/help_about.html:117 -#, fuzzy -#| msgid "Get Support" msgid "Support" -msgstr "Unterstützung erhalten" +msgstr "Unterstützung" #: modules/help/templates/help_about.html:121 msgid "Forum" @@ -3619,8 +3615,6 @@ msgid "Web chat" msgstr "Web-Chat" #: modules/jsxc/manifest.py:16 modules/quassel/manifest.py:54 -#, fuzzy -#| msgid "IRC Client" msgid "Client" msgstr "Client" @@ -3702,8 +3696,6 @@ msgid "Offline reader" msgstr "Offline-Leser" #: modules/kiwix/manifest.py:24 -#, fuzzy -#| msgid "Archive name" msgid "Archival" msgstr "Archivierung" @@ -4347,8 +4339,6 @@ msgid "Game server" msgstr "Spiele Server" #: modules/minetest/manifest.py:49 -#, fuzzy -#| msgid "Block Sandbox" msgid "Block sandbox" msgstr "Block-Sandkasten" @@ -4542,8 +4532,6 @@ msgstr "Aggregation von Nachrichten" #: modules/miniflux/manifest.py:138 modules/rssbridge/manifest.py:16 #: modules/ttrss/manifest.py:55 -#, fuzzy -#| msgid "SSH" msgid "RSS" msgstr "RSS" @@ -5837,29 +5825,24 @@ msgstr "" #: modules/networks/templates/wifi_scan.html:14 msgid "No Wi-Fi device detected." -msgstr "" +msgstr "Kein Wi-Fi-Gerät erkannt." #: modules/networks/templates/wifi_scan.html:21 -#, fuzzy, python-format -#| msgid "Delete %(username)s" +#, python-format msgid "Device: %(interface_name)s" -msgstr "%(username)s löschen" +msgstr "Gerät: %(interface_name)s" #: modules/networks/templates/wifi_scan.html:27 -#, fuzzy -#| msgid "Last Connected Time" msgid "Last scanned: " -msgstr "Letzte verbundene Zeit" +msgstr "Zuletzt gescannt: " #: modules/networks/templates/wifi_scan.html:31 msgid "never" -msgstr "" +msgstr "nie" #: modules/networks/templates/wifi_scan.html:52 -#, fuzzy -#| msgid "Wi-Fi network not found" msgid "No Wi-Fi networks found." -msgstr "Wi-Fi-Netzwerk nicht gefunden" +msgstr "Keine Wi-Fi-Netzwerke gefunden." #: modules/networks/views.py:27 msgid "disabled" @@ -5882,7 +5865,6 @@ msgid "link-local" msgstr "link-lokal" #: modules/networks/views.py:32 -#, fuzzy msgid "dhcp" msgstr "dhcp" @@ -7252,7 +7234,7 @@ msgstr "Websuche" #: modules/searx/manifest.py:17 msgid "Metasearch Engine" -msgstr "" +msgstr "Metasuchmaschine" #: modules/security/forms.py:13 msgid "Fail2Ban (recommended)" @@ -8333,7 +8315,7 @@ msgstr "TiddlyWiki" #: modules/tiddlywiki/__init__.py:66 msgid "Non-linear Notebooks" -msgstr "" +msgstr "Nicht-lineare Notizbücher" #: modules/tiddlywiki/forms.py:32 msgid "A TiddlyWiki file with .html file extension" From a9a5efbbddc6de871ad37d7ae0f9448ea6982d68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=8E=8B=E5=8F=AB=E6=88=91=E6=9D=A5=E5=B7=A1?= =?UTF-8?q?=E5=B1=B1?= Date: Wed, 20 Nov 2024 00:32:40 +0000 Subject: [PATCH 05/82] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 63.5% (1128 of 1775 strings) --- plinth/locale/zh_Hans/LC_MESSAGES/django.po | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po index 732044139..68ae0b7ff 100644 --- a/plinth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hans/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Plinth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-11-06 05:06+0000\n" +"PO-Revision-Date: 2024-11-20 22:29+0000\n" "Last-Translator: 大王叫我来巡山 \n" "Language-Team: Chinese (Simplified Han script) Date: Wed, 20 Nov 2024 08:00:27 +0000 Subject: [PATCH 06/82] Translated using Weblate (Czech) Currently translated at 100.0% (1775 of 1775 strings) --- plinth/locale/cs/LC_MESSAGES/django.po | 34 ++++++++++---------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po index 7d9d2b5f3..01f479d2d 100644 --- a/plinth/locale/cs/LC_MESSAGES/django.po +++ b/plinth/locale/cs/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-11-07 15:00+0000\n" +"PO-Revision-Date: 2024-11-20 22:29+0000\n" "Last-Translator: Jiří Podhorecký \n" "Language-Team: Czech \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" -"X-Generator: Weblate 5.8.2\n" +"X-Generator: Weblate 5.9-dev\n" #: config.py:103 #, python-brace-format @@ -5705,29 +5705,24 @@ msgstr "" #: modules/networks/templates/wifi_scan.html:14 msgid "No Wi-Fi device detected." -msgstr "" +msgstr "Nebylo zjištěno žádné zařízení Wi-Fi." #: modules/networks/templates/wifi_scan.html:21 -#, fuzzy, python-format -#| msgid "Delete %(username)s" +#, python-format msgid "Device: %(interface_name)s" -msgstr "Smazat %(username)s" +msgstr "Zařízení: %(interface_name)s" #: modules/networks/templates/wifi_scan.html:27 -#, fuzzy -#| msgid "Last Connected Time" msgid "Last scanned: " -msgstr "Čas posledního připojení" +msgstr "Naposledy skenováno: " #: modules/networks/templates/wifi_scan.html:31 msgid "never" -msgstr "" +msgstr "nikdy" #: modules/networks/templates/wifi_scan.html:52 -#, fuzzy -#| msgid "Wi-Fi network not found" msgid "No Wi-Fi networks found." -msgstr "Síť Wi-Fi nebyla nalezena" +msgstr "Nenalezeny žádné sítě Wi-Fi." #: modules/networks/views.py:27 msgid "disabled" @@ -6820,19 +6815,16 @@ msgstr "" "href=\"{users_url}\">každý uživatel patřící do skupiny feed-reader." #: modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Tiny Tiny RSS to " -#| "follow various websites. When adding a feed, enable authentication and " -#| "use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Tiny Tiny RSS to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"RSS-Bridge můžete používat s Tiny Tiny RSS pro " -"sledování různých webových stránek. Při přidávání kanálu povolte ověřování a " -"použijte své přihlašovací údaje {box_name}." +"RSS-Bridge můžete používat s Miniflux nebo Tiny Tiny RSS pro sledování různých webových " +"stránek. Při přidávání kanálu povolte ověřování a použijte své přihlašovací " +"údaje {box_name}." #: modules/rssbridge/__init__.py:48 modules/ttrss/__init__.py:47 msgid "Read and subscribe to news feeds" From 2ce9599b71425f7ca3a742cb1b631b08bb8ac790 Mon Sep 17 00:00:00 2001 From: 109247019824 Date: Wed, 20 Nov 2024 05:32:22 +0000 Subject: [PATCH 07/82] Translated using Weblate (Bulgarian) Currently translated at 47.2% (838 of 1775 strings) --- plinth/locale/bg/LC_MESSAGES/django.po | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index 507e9c7f1..4dc3177f0 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-11-19 23:24+0000\n" +"PO-Revision-Date: 2024-11-20 22:29+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian \n" @@ -5278,40 +5278,40 @@ msgstr "" #: modules/networks/templates/wifi_scan.html:14 msgid "No Wi-Fi device detected." -msgstr "" +msgstr "Не са намерени устройства за безжична мрежа." #: modules/networks/templates/wifi_scan.html:21 #, python-format msgid "Device: %(interface_name)s" -msgstr "" +msgstr "Устройство: %(interface_name)s" #: modules/networks/templates/wifi_scan.html:27 msgid "Last scanned: " -msgstr "" +msgstr "Последна проверка: " #: modules/networks/templates/wifi_scan.html:31 msgid "never" -msgstr "" +msgstr "никога" #: modules/networks/templates/wifi_scan.html:52 msgid "No Wi-Fi networks found." -msgstr "" +msgstr "Не са намерени безжични мрежи." #: modules/networks/views.py:27 msgid "disabled" -msgstr "" +msgstr "изключено" #: modules/networks/views.py:28 msgid "automatic" -msgstr "" +msgstr "автоматично" #: modules/networks/views.py:29 msgid "manual" -msgstr "" +msgstr "ръчно" #: modules/networks/views.py:30 msgid "shared" -msgstr "" +msgstr "споделено" #: modules/networks/views.py:31 msgid "link-local" From 6c4f48555970c90500510843942ffe0a13750a04 Mon Sep 17 00:00:00 2001 From: Paul Lettich Date: Thu, 21 Nov 2024 00:53:53 +0000 Subject: [PATCH 08/82] Translated using Weblate (German) Currently translated at 98.9% (1756 of 1775 strings) --- plinth/locale/de/LC_MESSAGES/django.po | 28 +++++++++++--------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index 292d00086..61a0f2ddd 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-11-20 22:29+0000\n" -"Last-Translator: Ettore Atalan \n" +"PO-Revision-Date: 2024-11-21 17:59+0000\n" +"Last-Translator: Paul Lettich \n" "Language-Team: German \n" "Language: de\n" @@ -2101,7 +2101,7 @@ msgid "" "Name Services page." msgstr "" "Die Domäne Ihres XMPP-Servers ist nicht festgelegt. Sie können Ihre Domäne " -"auf der Seite Namensdienste konfigurieren." +"auf der Seite Namensdienste konfigurieren." #: modules/email/__init__.py:26 msgid "" @@ -4803,7 +4803,7 @@ msgstr "Dienste" #: modules/names/templates/names.html:56 msgid "Resolver Status" -msgstr "" +msgstr "Status des Resolvers" #: modules/names/templates/names.html:66 msgid "Global" @@ -4925,7 +4925,7 @@ msgstr "" #: modules/networks/forms.py:56 msgid "Use DNS-over-TLS" -msgstr "" +msgstr "DNS-over-TLS benutzen" #: modules/networks/forms.py:90 msgid "IPv4 Addressing Method" @@ -6953,20 +6953,16 @@ msgstr "" "a> der zur Feed-Reader-Gruppe gehört, aufgerufen werden." #: modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Tiny Tiny RSS to " -#| "follow various websites. When adding a feed, enable authentication and " -#| "use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Tiny Tiny RSS to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"Sie können RSS-Bridge mit Tiny Tiny RSS " -"verwenden, um verschiedenen Websites zu folgen. Aktivieren Sie beim " -"Hinzufügen eines Feeds die Authentifizierung und verwenden Sie Ihre " -"{box_name}-Anmeldeinformationen." +"Sie können RSS-Bridge mit Miniflux oder Tiny Tiny RSS verwenden, um verschiedenen Websites " +"zu folgen. Aktivieren Sie beim Hinzufügen eines Feeds die Authentifizierung " +"und verwenden Sie Ihre {box_name}-Anmeldeinformationen." #: modules/rssbridge/__init__.py:48 modules/ttrss/__init__.py:47 msgid "Read and subscribe to news feeds" @@ -6996,7 +6992,7 @@ msgstr "" #: modules/rssbridge/manifest.py:16 msgid "News" -msgstr "" +msgstr "Nachrichten" #: modules/samba/__init__.py:23 msgid "" @@ -8761,7 +8757,7 @@ msgstr "" #: modules/upgrades/__init__.py:350 msgid "Check for package holds" -msgstr "" +msgstr "Auf Paket-Sperren überprüfen" #: modules/upgrades/forms.py:15 msgid "Enable auto-update" From 4705a86f906d67d21a91ef6893486bf47eeded8e Mon Sep 17 00:00:00 2001 From: John Doe Date: Thu, 21 Nov 2024 15:47:05 +0000 Subject: [PATCH 09/82] Translated using Weblate (French) Currently translated at 100.0% (1775 of 1775 strings) --- plinth/locale/fr/LC_MESSAGES/django.po | 695 ++++++++++--------------- 1 file changed, 288 insertions(+), 407 deletions(-) diff --git a/plinth/locale/fr/LC_MESSAGES/django.po b/plinth/locale/fr/LC_MESSAGES/django.po index 592b58735..7bfdea4a6 100644 --- a/plinth/locale/fr/LC_MESSAGES/django.po +++ b/plinth/locale/fr/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-11-01 17:00+0000\n" -"Last-Translator: Coucouf \n" +"PO-Revision-Date: 2024-11-21 18:00+0000\n" +"Last-Translator: John Doe \n" "Language-Team: French \n" "Language: fr\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.8.2-dev\n" +"X-Generator: Weblate 5.9-dev\n" #: config.py:103 #, python-brace-format @@ -328,6 +328,10 @@ msgid "" "file previously downloaded from the result of a successful backup on a " "{box_name}. It must have a .tar.gz extension." msgstr "" +"Choisissez le fichier de sauvegarde à téléverser depuis l'ordinateur local. " +"Cela doit être un fichier préalablement téléchargé à partir du résultat " +"d'une sauvegarde réussie sur une {box_name}. Il doit avoir l'extension .tar." +"gz." #: modules/backups/forms.py:152 msgid "Repository path format incorrect." @@ -2237,7 +2241,7 @@ msgstr "IMAP" #: modules/email/manifest.py:82 msgid "Spam control" -msgstr "" +msgstr "Contrôle des pourriels" #: modules/email/templates/email-aliases.html:13 #: modules/email/templates/email.html:15 @@ -2304,6 +2308,10 @@ msgid "" "a single HTML file on your {box_name}. You can use it as a personal wiki, as " "a web notebook, or for project documentation." msgstr "" +"Feather Wiki est un outil pour créer des wikis simples et autonomes, chacun " +"stocké dans un unique fichier HTML sur votre {box_name}. Vous pouvez " +"l'utiliser comme un wiki personnel, un carnet de notes sur la Toile ou bien " +"pour la documentation d'un projet." #: modules/featherwiki/__init__.py:29 msgid "" @@ -2311,6 +2319,9 @@ msgid "" "wiki per topic. Customize each wiki to your liking with extensions and other " "customization options." msgstr "" +"Chaque wiki set un petit fichier. Créez autant de wikis que vous le " +"souhaitez, par exemple un wiki par sujet. Personnalisez chaque wiki selon " +"vos envies avec des extensions et d'autres options de personnalisation." #: modules/featherwiki/__init__.py:33 #, python-brace-format @@ -2318,6 +2329,9 @@ msgid "" "Feather Wiki is downloaded from {box_name} website and not from Debian. " "Wikis need to be upgraded to newer version manually." msgstr "" +"Feather Wiki est téléchargé depuis le site Internet de {box_name} et pas " +"depuis Debian. Les wikis doivent être mis à jour vers les versions plus " +"récentes manuellement." #: modules/featherwiki/__init__.py:37 modules/tiddlywiki/__init__.py:41 #, python-brace-format @@ -2327,6 +2341,10 @@ msgid "" "{box_name} belonging to the wiki group. Simultaneous editing is not " "supported." msgstr "" +"Les wikis ne sont pas publics par défaut, mais ils peuvent être téléchargés " +"pour être partagés ou publiés. Ils peuvent être édités par tout utilisateur sur {box_name} appartenant au groupe " +"wiki. L'édition simultanée n'est pas prise en charge." #: modules/featherwiki/__init__.py:56 modules/ikiwiki/__init__.py:80 #: modules/tiddlywiki/__init__.py:61 @@ -2334,44 +2352,44 @@ msgid "View and edit wiki applications" msgstr "Consultation et modification des applications de wiki" #: modules/featherwiki/__init__.py:59 modules/featherwiki/manifest.py:9 -#, fuzzy -#| msgid "Create Wiki/Blog" msgid "Feather Wiki" -msgstr "Créer Wiki/Blogue" +msgstr "Feather Wiki" #: modules/featherwiki/__init__.py:61 msgid "Personal Notebooks" -msgstr "" +msgstr "Carnets de notes personnels" #: modules/featherwiki/forms.py:13 modules/tiddlywiki/forms.py:13 msgid "Name of the wiki file, with file extension \".html\"" -msgstr "" +msgstr "Nom du fichier wiki, avec l'extension de fichier « .html »" #: modules/featherwiki/forms.py:15 modules/tiddlywiki/forms.py:15 msgid "" "Wiki title and description can be set from within the wiki. This file name " "is independent of the wiki title." msgstr "" +"Le titre du wiki et sa description peuvent être réglés depuis le wiki lui-" +"même. Le nom du fichier est indépendant du titre du wiki." #: modules/featherwiki/forms.py:23 modules/tiddlywiki/forms.py:23 msgid "New name for the wiki file, with file extension \".html\"" -msgstr "" +msgstr "Nouveau nom pour le fichier wiki, avec l'extension de fichier « .html »" #: modules/featherwiki/forms.py:25 modules/tiddlywiki/forms.py:25 msgid "Renaming the file has no effect on the title of the wiki." -msgstr "" +msgstr "Renommer le fichier n'a aucun effet sur le titre du wiki." #: modules/featherwiki/forms.py:32 msgid "A Feather Wiki file with .html file extension" -msgstr "" +msgstr "Un fichier Feather Wiki avec l'extension de fichier .html" #: modules/featherwiki/forms.py:35 msgid "Feather Wiki files must be in HTML format" -msgstr "" +msgstr "Les fichiers Feather Wiki doivent être au format HTML" #: modules/featherwiki/forms.py:37 msgid "Upload an existing Feather Wiki file from this computer." -msgstr "" +msgstr "Téléverser un fichier Feather Wiki existant depuis cet ordinateur." #: modules/featherwiki/manifest.py:18 modules/help/templates/help_about.html:96 #: modules/ikiwiki/manifest.py:15 modules/mediawiki/__init__.py:52 @@ -2382,33 +2400,27 @@ msgstr "Wiki" #: modules/featherwiki/manifest.py:18 modules/infinoted/manifest.py:46 #: modules/tiddlywiki/manifest.py:20 msgid "Note taking" -msgstr "" +msgstr "Prise de notes" #: modules/featherwiki/manifest.py:18 modules/ikiwiki/manifest.py:15 #: modules/mediawiki/manifest.py:25 modules/tiddlywiki/manifest.py:21 #: modules/wordpress/manifest.py:26 -#, fuzzy -#| msgid "Website Security" msgid "Website" -msgstr "Sécurité du site web" +msgstr "Site Web" #: modules/featherwiki/manifest.py:18 modules/tiddlywiki/manifest.py:25 msgid "Quine" -msgstr "" +msgstr "Quine" #: modules/featherwiki/manifest.py:18 modules/nextcloud/manifest.py:56 #: modules/tiddlywiki/manifest.py:26 -#, fuzzy -#| msgid "Debian:" msgid "Non-Debian" -msgstr "Debian :" +msgstr "Non Debian" #: modules/featherwiki/templates/featherwiki_configure.html:12 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:12 -#, fuzzy -#| msgid "Manage Libraries" msgid "Manage Wikis" -msgstr "Gérer les collections" +msgstr "Gérer les wikis" #: modules/featherwiki/templates/featherwiki_configure.html:16 #: modules/featherwiki/templates/featherwiki_configure.html:18 @@ -2416,67 +2428,57 @@ msgstr "Gérer les collections" #: modules/tiddlywiki/templates/tiddlywiki_configure.html:16 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:18 #: modules/tiddlywiki/views.py:47 -#, fuzzy -#| msgid "Create Wiki/Blog" msgid "Create Wiki" -msgstr "Créer Wiki/Blogue" +msgstr "Créer un wiki" #: modules/featherwiki/templates/featherwiki_configure.html:21 #: modules/featherwiki/templates/featherwiki_configure.html:23 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:21 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:23 -#, fuzzy -#| msgid "Upload File" msgid "Upload Wiki" -msgstr "Téléverser un fichier" +msgstr "Téléverser un wiki" #: modules/featherwiki/templates/featherwiki_configure.html:30 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:30 -#, fuzzy -#| msgid "No libraries available." msgid "No wikis available." -msgstr "Vous n’avez actuellement aucune collection." +msgstr "Vous n’avez actuellement aucun wiki." #: modules/featherwiki/templates/featherwiki_configure.html:36 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:36 -#, fuzzy, python-format -#| msgid "Go to site %(site)s" +#, python-format msgid "Go to wiki %(wiki)s" -msgstr "Aller au site %(site)s" +msgstr "Aller au wiki %(wiki)s" #: modules/featherwiki/templates/featherwiki_configure.html:43 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:43 -#, fuzzy, python-format -#| msgid "Enable ikiwiki" +#, python-format msgid "Rename wiki %(wiki)s" -msgstr "Activer ikiwiki" +msgstr "Renommer le wiki %(wiki)s" #: modules/featherwiki/templates/featherwiki_configure.html:50 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:50 -#, fuzzy, python-format -#| msgid "Delete site %(site)s" +#, python-format msgid "Delete wiki %(wiki)s" -msgstr "Supprimer le site %(site)s" +msgstr "Supprimer le wiki %(wiki)s" #: modules/featherwiki/templates/featherwiki_delete.html:12 #: modules/tiddlywiki/templates/tiddlywiki_delete.html:12 -#, fuzzy, python-format -#| msgid "Delete Wiki or Blog %(name)s" +#, python-format msgid "Delete wiki %(name)s" -msgstr "Supprimer le wiki ou blogue %(name)s" +msgstr "Supprimer le wiki %(name)s" #: modules/featherwiki/templates/featherwiki_delete.html:18 msgid "" "Hint: You can download a copy of this wiki from within " "Feather Wiki before deleting it." msgstr "" +"Astuce : vous pouvez télécharger une copie de ce wiki " +"depuis Feather Wiki avant de l'effacer." #: modules/featherwiki/templates/featherwiki_delete.html:25 #: modules/tiddlywiki/templates/tiddlywiki_delete.html:25 -#, fuzzy -#| msgid "Delete this archive permanently?" msgid "Delete this wiki file permanently?" -msgstr "Supprimer définitivement cette archive ?" +msgstr "Supprimer définitivement ce fichier wiki ?" #: modules/featherwiki/templates/featherwiki_upload_file.html:20 #: modules/tiddlywiki/templates/tiddlywiki_upload_file.html:20 @@ -2484,60 +2486,45 @@ msgid "Upload" msgstr "Téléverser" #: modules/featherwiki/views.py:20 modules/tiddlywiki/views.py:20 -#, fuzzy -#| msgid "A share with this name already exists." msgid "A wiki file with the given name already exists." -msgstr "Un partage existe déjà avec ce nom." +msgstr "Un fichier wiki existe déjà avec ce nom." #: modules/featherwiki/views.py:54 modules/tiddlywiki/views.py:54 -#, fuzzy -#| msgid "Archive created." msgid "Wiki created." -msgstr "Archive créée." +msgstr "Wiki créé." #: modules/featherwiki/views.py:59 modules/tiddlywiki/views.py:59 -#, fuzzy -#| msgid "An error occurred while creating the library." msgid "An error occurred while creating the wiki." -msgstr "Une erreur est survenue pendant la création de la collection." +msgstr "Une erreur est survenue pendant la création du wiki." #: modules/featherwiki/views.py:76 modules/tiddlywiki/views.py:76 -#, fuzzy -#| msgid "MediaWiki" msgid "Rename Wiki" -msgstr "MediaWiki" +msgstr "Renommer le wiki" #: modules/featherwiki/views.py:84 modules/tiddlywiki/views.py:84 msgid "Wiki renamed." -msgstr "" +msgstr "Le wiki a été renommé." #: modules/featherwiki/views.py:89 modules/tiddlywiki/views.py:89 -#, fuzzy -#| msgid "An error occurred while creating the library." msgid "An error occurred while renaming the wiki." -msgstr "Une erreur est survenue pendant la création de la collection." +msgstr "Une erreur est survenue pendant le renommage du wiki." #: modules/featherwiki/views.py:106 modules/tiddlywiki/views.py:106 -#, fuzzy -#| msgid "Upload File" msgid "Upload Wiki File" -msgstr "Téléverser un fichier" +msgstr "Téléverser un fichier wiki" #: modules/featherwiki/views.py:115 modules/tiddlywiki/views.py:116 msgid "Wiki file added." -msgstr "" +msgstr "Fichier wiki ajouté." #: modules/featherwiki/views.py:119 modules/tiddlywiki/views.py:120 -#, fuzzy -#| msgid "Failed to add content package." msgid "Failed to add wiki file." -msgstr "Échec de l’ajout du paquet de contenu." +msgstr "Échec de l’ajout du fichier wiki." #: modules/featherwiki/views.py:138 modules/tiddlywiki/views.py:139 -#, fuzzy, python-brace-format -#| msgid "Could not delete {name}: {error}" +#, python-brace-format msgid "Could not delete {name}" -msgstr "La suppression de {name} a échoué : {error}" +msgstr "La suppression de {name} a échoué" #: modules/firewall/__init__.py:25 #, python-brace-format @@ -2641,10 +2628,8 @@ msgstr "" "firewall\">Cockpit." #: modules/first_boot/__init__.py:61 -#, fuzzy -#| msgid "Setup Complete!" msgid "Setup complete! Next steps:" -msgstr "Configuration initiale terminée !" +msgstr "Configuration terminée ! Prochaines étapes :" #: modules/first_boot/__init__.py:63 #, python-brace-format @@ -2652,14 +2637,16 @@ msgid "" "Initial setup has been completed. Perform the next steps to make your " "{box_name} operational." msgstr "" +"La configuration initiale est terminée. Effectuez les prochaines étapes pour " +"rendre votre {box_name} opérationnel." #: modules/first_boot/__init__.py:66 msgid "Next steps" -msgstr "" +msgstr "Prochaines étapes" #: modules/first_boot/__init__.py:73 msgid "See next steps" -msgstr "" +msgstr "Voir les prochaines étapes" #: modules/first_boot/forms.py:14 #, python-brace-format @@ -2677,10 +2664,8 @@ msgid "Firstboot Wizard Secret" msgstr "Secret de l’assistant Firstboot" #: modules/first_boot/templates/firstboot_complete.html:11 -#, fuzzy -#| msgid "Setup Complete!" msgid "Setup Complete! Next Steps:" -msgstr "Configuration initiale terminée !" +msgstr "Configuration terminée ! Prochaines étapes :" #: modules/first_boot/templates/firstboot_complete.html:18 #, python-format @@ -2688,6 +2673,9 @@ msgid "" "Automatic software update " "runs daily by default. For the first time, manually run it now." msgstr "" +"La mise à jour logicielle " +"automatique s'exécute par défaut quotidiennement. Pour la première fois, " +"exécutez-la manuellement maintenant." #: modules/first_boot/templates/firstboot_complete.html:27 #: modules/upgrades/templates/upgrades_configure.html:108 @@ -2699,6 +2687,8 @@ msgstr "Lancer la mise à jour" msgid "" "Review privacy options." msgstr "" +"Passez en revue les options de " +"confidentialité." #: modules/first_boot/templates/firstboot_complete.html:46 #, python-format @@ -2706,12 +2696,16 @@ msgid "" "Review and setup network " "connections. Change the default Wi-Fi password, if applicable." msgstr "" +"Passez en revue et configurez les connexions réseau. Modifiez le mot de passe Wi-Fi par défaut, le " +"cas échéant." #: modules/first_boot/templates/firstboot_complete.html:57 #, python-format msgid "" "Configure a domain name." msgstr "" +"Configurer un nom de domaine." #: modules/first_boot/templates/firstboot_complete.html:67 #, python-format @@ -2719,6 +2713,8 @@ msgid "" "Configure and schedule remote backups." msgstr "" +"Configurer et planifier des sauvegardes distantes." #: modules/first_boot/templates/firstboot_complete.html:78 #, python-format @@ -2726,6 +2722,8 @@ msgid "" "Put %(box_name)s to use by installing apps." msgstr "" +"Commencez à utiliser %(box_name)s en installant des applications." #: modules/first_boot/templates/firstboot_welcome.html:29 msgid "Start Setup" @@ -2832,18 +2830,16 @@ msgid "Git" msgstr "Git" #: modules/gitweb/manifest.py:37 -#, fuzzy -#| msgid "Simple Git Hosting" msgid "Git hosting" -msgstr "Hébergement Git simple" +msgstr "Hébergement Git" #: modules/gitweb/manifest.py:37 msgid "Version control" -msgstr "" +msgstr "Contrôle des versions" #: modules/gitweb/manifest.py:37 msgid "Developer tool" -msgstr "" +msgstr "Outil pour développeurs" #: modules/gitweb/templates/gitweb_configure.html:13 msgid "Manage Repositories" @@ -3023,10 +3019,8 @@ msgstr "" "Cockpit ou du SSH)." #: modules/help/templates/help_about.html:85 -#, fuzzy -#| msgid "Learn more" msgid "Learn" -msgstr "En savoir plus" +msgstr "Apprendre" #: modules/help/templates/help_about.html:88 msgid "Homepage" @@ -3038,17 +3032,15 @@ msgstr "Faire un don" #: modules/help/templates/help_about.html:107 msgid "Join project" -msgstr "" +msgstr "Rejoindre le projet" #: modules/help/templates/help_about.html:111 msgid "Translate" -msgstr "" +msgstr "Traduire" #: modules/help/templates/help_about.html:117 -#, fuzzy -#| msgid "Get Support" msgid "Support" -msgstr "Obtenir de l’aide" +msgstr "Support" #: modules/help/templates/help_about.html:121 msgid "Forum" @@ -3360,8 +3352,6 @@ msgstr "Serveur mandataire I2P" #: modules/i2p/manifest.py:43 modules/tor/manifest.py:59 #: modules/torproxy/manifest.py:56 -#, fuzzy -#| msgid "Anonymity Network" msgid "Anonymity network" msgstr "Réseau d’anonymisation" @@ -3369,7 +3359,7 @@ msgstr "Réseau d’anonymisation" #: modules/shadowsocks/manifest.py:19 modules/shadowsocksserver/manifest.py:18 #: modules/tor/manifest.py:60 modules/torproxy/manifest.py:57 msgid "Censorship resistance" -msgstr "" +msgstr "Résistance à la censure" #: modules/i2p/templates/i2p.html:12 msgid "I2P Proxies and Tunnels" @@ -3457,7 +3447,7 @@ msgstr "Mot de passe du compte admin" #: modules/ikiwiki/manifest.py:15 modules/wordpress/manifest.py:26 msgid "Blog" -msgstr "" +msgstr "Blogue" #: modules/ikiwiki/templates/ikiwiki_configure.html:12 msgid "Manage Wikis and Blogs" @@ -3575,7 +3565,7 @@ msgstr "" #: modules/infinoted/manifest.py:46 msgid "Collaborative editing" -msgstr "" +msgstr "Édition collaborative" #: modules/janus/__init__.py:23 msgid "Janus is a lightweight WebRTC server." @@ -3603,14 +3593,12 @@ msgid "Janus Video Room" msgstr "Salle de visio Janus" #: modules/janus/manifest.py:16 -#, fuzzy -#| msgid "WebRTC server" msgid "WebRTC" -msgstr "Serveur WebRTC" +msgstr "WebRTC" #: modules/janus/manifest.py:16 msgid "Web conference" -msgstr "" +msgstr "Conférence Web" #: modules/janus/templates/janus_video_room.html:205 #: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:263 @@ -3634,16 +3622,12 @@ msgid "Chat Client" msgstr "Client de discussion" #: modules/jsxc/manifest.py:16 -#, fuzzy -#| msgid "Web Search" msgid "Web chat" -msgstr "Recherche web" +msgstr "Discussion sur le Web" #: modules/jsxc/manifest.py:16 modules/quassel/manifest.py:54 -#, fuzzy -#| msgid "IRC Client" msgid "Client" -msgstr "Client IRC" +msgstr "Client" #: modules/kiwix/__init__.py:21 msgid "" @@ -3720,22 +3704,16 @@ msgstr "" "immédiatement effacé pour économiser de l'espace disque." #: modules/kiwix/manifest.py:23 -#, fuzzy -#| msgid "Offline Wikipedia" msgid "Offline reader" -msgstr "Wikipédia hors ligne" +msgstr "Lecteur hors ligne" #: modules/kiwix/manifest.py:24 -#, fuzzy -#| msgid "Archive name" msgid "Archival" -msgstr "Nom de l'archive" +msgstr "Archivage" #: modules/kiwix/manifest.py:26 -#, fuzzy -#| msgid "Offline Wikipedia" msgid "Wikipedia" -msgstr "Wikipédia hors ligne" +msgstr "Wikipédia" #: modules/kiwix/templates/kiwix-add-package.html:24 #, python-format @@ -3789,10 +3767,8 @@ msgid "Add a new content package" msgstr "Ajouter un nouveau paquet de contenu" #: modules/kiwix/views.py:76 -#, fuzzy -#| msgid "Content package added." msgid "Content package already exists." -msgstr "Paquet de contenu ajouté." +msgstr "Le paquet de contenu existe déjà." #: modules/kiwix/views.py:79 msgid "Failed to add content package." @@ -3888,15 +3864,12 @@ msgid "Obtain" msgstr "Obtenir" #: modules/letsencrypt/templates/letsencrypt.html:112 -#, fuzzy, python-format -#| msgid "" -#| "No domains have been configured. Configure " -#| "domains to be able to obtain certificates for them." +#, python-format msgid "" "No domains have been configured. Configure " "domains to be able to obtain certificates for them." msgstr "" -"Aucun domaine n’a été configuré. Configurez des " +"Aucun domaine n’a été configuré. Configurez des " "domaines pour pouvoir obtenir leurs certificats." #: modules/letsencrypt/views.py:40 @@ -4023,16 +3996,12 @@ msgid "FluffyChat" msgstr "FluffyChat" #: modules/matrixsynapse/manifest.py:101 modules/quassel/manifest.py:54 -#, fuzzy -#| msgid "IRC Chatroom" msgid "Chat room" -msgstr "Canal de tchat IRC" +msgstr "Salon de discussion" #: modules/matrixsynapse/manifest.py:105 -#, fuzzy -#| msgid "Media streaming server" msgid "Matrix server" -msgstr "Serveur de streaming de médias" +msgstr "Serveur Matrix" #: modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:15 #: modules/miniflux/templates/miniflux.html:12 @@ -4062,10 +4031,8 @@ msgid "" msgstr "" "\n" " Attention ! Le changement du nom de domaine après\n" -"\n" " cette étape nécessitera la désinstallation et la réinstallation de " "l'application,\n" -"\n" " ce qui effacera les données de l'application.\n" " " @@ -4381,20 +4348,16 @@ msgstr "" "manière." #: modules/minetest/manifest.py:49 -#, fuzzy -#| msgid "Updated server." msgid "Game server" -msgstr "Serveur mis à jour." +msgstr "Serveur de jeu" #: modules/minetest/manifest.py:49 -#, fuzzy -#| msgid "Block Sandbox" msgid "Block sandbox" msgstr "Bac à sable cubique" #: modules/minetest/manifest.py:49 msgid "Platform" -msgstr "" +msgstr "Plateforme" #: modules/minetest/templates/minetest.html:17 modules/networks/forms.py:105 #: modules/networks/forms.py:145 @@ -4457,24 +4420,20 @@ msgid "totem" msgstr "totem" #: modules/minidlna/manifest.py:116 -#, fuzzy -#| msgid "Simple Media Server" msgid "Media server" -msgstr "Serveur de médias simple" +msgstr "Serveur de médias" #: modules/minidlna/manifest.py:116 msgid "Television" -msgstr "" +msgstr "Télévision" #: modules/minidlna/manifest.py:116 msgid "UPnP" -msgstr "" +msgstr "UpnP" #: modules/minidlna/manifest.py:116 -#, fuzzy -#| msgid "MiniDLNA" msgid "DLNA" -msgstr "MiniDLNA" +msgstr "DLNA" #: modules/minidlna/views.py:33 msgid "Updated media directory" @@ -4488,6 +4447,11 @@ msgid "" "subscribe to your favorite sites and access full article contents within the " "reader itself." msgstr "" +"Miniflux est un outil fondé sur le Web qui agrège les nouvelles et les mises " +"à jour de blogues depuis des sites Web variés en un format centralisé et " +"facile à lire. Il a une interface simple et se concentre sur une expérience " +"de lecture sans distraction. Vous pouvez vous abonner à vos sites favoris et " +"accéder au contenu des articles complets depuis le lecteur lui-même." #: modules/miniflux/__init__.py:23 msgid "" @@ -4497,159 +4461,138 @@ msgid "" "are several third-party clients as well." msgstr "" +"Les fonctionnalités clefs comprennent des raccourcis clavier pour une " +"navigation rapide, une recherche en texte intégral, le filtrage des " +"articles, des catégories et des favoris. Miniflux préserve la vie privée de " +"l'utilisateur en enlevant les traceurs. L'interface principale est fondée " +"sur le Web. Il existe également plusieurs clients tiers." #: modules/miniflux/__init__.py:42 modules/miniflux/manifest.py:10 msgid "Miniflux" -msgstr "" +msgstr "Miniflux" #: modules/miniflux/__init__.py:44 modules/ttrss/__init__.py:51 msgid "News Feed Reader" msgstr "Lecteur de fils d’actualités" #: modules/miniflux/forms.py:12 -#, fuzzy -#| msgid "Enter a valid username." msgid "Enter a username for the user." -msgstr "Entrez un nom d’utilisateur valide." +msgstr "Entrez un nom d’utilisateur pour l'utilisateur." #: modules/miniflux/forms.py:16 msgid "Enter a strong password with a minimum of 6 characters." -msgstr "" +msgstr "Saisissez un mot de passe solide avec un minimum de 6 caractères." #: modules/miniflux/forms.py:18 -#, fuzzy -#| msgid "Updating configuration" msgid "Password confirmation" -msgstr "Mise à jour de la configuration" +msgstr "Confirmation du mot de passe" #: modules/miniflux/forms.py:20 -#, fuzzy -#| msgid "" -#| "Enter the password for user \"{user}\" to authorize account modifications." msgid "Enter the same password for confirmation." -msgstr "" -"Veuillez saisir votre mot de passe de l’utilisateur « {user} » pour " -"confirmer ces modifications de compte." +msgstr "Saisissez le même mot de passe pour confirmation." #: modules/miniflux/forms.py:31 -#, fuzzy -#| msgid "Password updated" msgid "Passwords do not match." -msgstr "Mot de passe mis à jour" +msgstr "Les mots de passe ne correspondent pas." #: modules/miniflux/manifest.py:18 msgid "Fluent Reader Lite" -msgstr "" +msgstr "Fluent Reader Lite" #: modules/miniflux/manifest.py:33 -#, fuzzy -#| msgid "News Feed Reader" msgid "Fluent Reader" -msgstr "Lecteur de fils d’actualités" +msgstr "Fluent Reader" #: modules/miniflux/manifest.py:46 msgid "FluxNews" -msgstr "" +msgstr "FluxNews" #: modules/miniflux/manifest.py:61 msgid "MiniFlutt" -msgstr "" +msgstr "MiniFlutt" #: modules/miniflux/manifest.py:71 msgid "NetNewsWire" -msgstr "" +msgstr "NetNewsWire" #: modules/miniflux/manifest.py:86 msgid "Newsflash" -msgstr "" +msgstr "Newsflash" #: modules/miniflux/manifest.py:96 -#, fuzzy -#| msgid "Read" msgid "Read You" -msgstr "Lecture" +msgstr "Read You" #: modules/miniflux/manifest.py:106 msgid "RSS Guard" -msgstr "" +msgstr "RSS Guard" #: modules/miniflux/manifest.py:138 modules/ttrss/manifest.py:55 -#, fuzzy -#| msgid "News Feed Reader" msgid "Feed reader" -msgstr "Lecteur de fils d’actualités" +msgstr "Liseuse de flux" #: modules/miniflux/manifest.py:138 modules/ttrss/manifest.py:55 msgid "News aggregation" -msgstr "" +msgstr "Agrégation de nouvelles" #: modules/miniflux/manifest.py:138 modules/rssbridge/manifest.py:16 #: modules/ttrss/manifest.py:55 -#, fuzzy -#| msgid "SSH" msgid "RSS" -msgstr "SSH" +msgstr "RSS" #: modules/miniflux/manifest.py:138 modules/rssbridge/manifest.py:16 #: modules/ttrss/manifest.py:55 msgid "ATOM" -msgstr "" +msgstr "ATOM" #: modules/miniflux/templates/miniflux.html:14 msgid "" "Create an admin user to get started. Other users can be created from within " "Miniflux." msgstr "" +"Créez un utilisateur admin pour commencer. Les autres utilisateurs peuvent " +"être créés depuis Miniflux lui-même." #: modules/miniflux/templates/miniflux.html:22 #: modules/miniflux/templates/miniflux.html:24 -#, fuzzy -#| msgid "Create User" msgid "Create admin user" -msgstr "Créer un utilisateur" +msgstr "Créer un utilisateur admin" #: modules/miniflux/templates/miniflux.html:27 #: modules/miniflux/templates/miniflux.html:29 -#, fuzzy -#| msgid "Set SuperUser Password" msgid "Reset user password" -msgstr "Définir le mot de passe du super utilisateur" +msgstr "Réinitialiser le mot de passe de l'utilisateur" #: modules/miniflux/views.py:38 -#, fuzzy -#| msgid "Create User" msgid "Create Admin User" -msgstr "Créer un utilisateur" +msgstr "Créer un utilisateur administrateur" #: modules/miniflux/views.py:48 -#, fuzzy, python-brace-format -#| msgid "Invalid username: {username}" +#, python-brace-format msgid "Created admin user: {username}" -msgstr "Nom d’utilisateur invalide : {username}" +msgstr "Utilisateur admin créé : {username}" #: modules/miniflux/views.py:53 -#, fuzzy, python-brace-format -#| msgid "An error occurred while creating the repository." +#, python-brace-format msgid "An error occurred while creating the user: {error}." -msgstr "Une erreur est survenue pendant la création du dépôt." +msgstr "Une erreur est survenue pendant la création de l'utilisateur : {error}." #: modules/miniflux/views.py:70 -#, fuzzy -#| msgid "Set SuperUser Password" msgid "Reset User Password" -msgstr "Définir le mot de passe du super utilisateur" +msgstr "Réinitialiser le mode passe de l'utilisateur" #: modules/miniflux/views.py:80 -#, fuzzy, python-brace-format -#| msgid "Invalid username: {username}" +#, python-brace-format msgid "Password reset for user: {username}" -msgstr "Nom d’utilisateur invalide : {username}" +msgstr "Mot de passe réinitialisé pour l'utilisateur : {username}" #: modules/miniflux/views.py:85 -#, fuzzy, python-brace-format -#| msgid "An error occurred during configuration." +#, python-brace-format msgid "An error occurred during password reset: {error}." -msgstr "Une erreur est survenue pendant la configuration." +msgstr "" +"Une erreur est survenue pendant la réinitialisation du mot de passe : " +"{error}." #: modules/mumble/__init__.py:25 msgid "" @@ -4724,7 +4667,7 @@ msgstr "Mumla" #: modules/mumble/manifest.py:67 msgid "Group conference" -msgstr "" +msgstr "Conférence de groupe" #: modules/mumble/manifest.py:67 modules/radicale/manifest.py:91 #: modules/shadowsocks/forms.py:24 @@ -4763,12 +4706,12 @@ msgstr "Services de nommage" #: modules/names/__init__.py:171 msgid "Package systemd-resolved is installed" -msgstr "" +msgstr "Le paquet systemd-resolved est installé" #: modules/names/__init__.py:195 #, python-brace-format msgid "Resolve domain name: {domain}" -msgstr "" +msgstr "Résoudre le nom de domaine : {domain}" #: modules/names/components.py:14 msgid "All" @@ -4784,11 +4727,11 @@ msgstr "Secure Shell" #: modules/names/forms.py:21 msgid "Use DNS-over-TLS for resolving domains (global preference)" -msgstr "" +msgstr "Utiliser DNS-sur-TLS pour résoudre les domaines (préférence globale)" #: modules/names/forms.py:49 msgid "Use DNSSEC when resolving domains (global preference)" -msgstr "" +msgstr "Utiliser DNSSEC lors de la résolution des domaines (préférence globale)" #: modules/names/forms.py:84 msgid "Hostname" @@ -4842,28 +4785,24 @@ msgstr "oui" #: modules/names/resolved.py:92 modules/networks/forms.py:29 #: modules/networks/views.py:124 msgid "opportunistic" -msgstr "" +msgstr "opportuniste" #: modules/names/resolved.py:93 modules/names/resolved.py:103 #: modules/networks/forms.py:30 modules/networks/views.py:123 -#, fuzzy -#| msgid "Dino" msgid "no" -msgstr "Dino" +msgstr "non" #: modules/names/resolved.py:102 msgid "allow-downgrade" -msgstr "" +msgstr "autoriser le déclassement" #: modules/names/resolved.py:110 -#, fuzzy -#| msgid "Get Support" msgid "supported" -msgstr "Obtenir de l’aide" +msgstr "pris en charge" #: modules/names/resolved.py:110 msgid "unsupported" -msgstr "" +msgstr "non pris en charge" #: modules/names/templates/names.html:12 msgid "Domains" @@ -4875,66 +4814,56 @@ msgstr "Services" #: modules/names/templates/names.html:56 msgid "Resolver Status" -msgstr "" +msgstr "État du résolveur" #: modules/names/templates/names.html:66 msgid "Global" -msgstr "" +msgstr "Global" #: modules/names/templates/names.html:68 msgid "Link" -msgstr "" +msgstr "Lien" #: modules/names/templates/names.html:73 #: modules/networks/templates/connection_show.html:264 msgid "DNS-over-TLS" -msgstr "" +msgstr "DNS-sur-TLS" #: modules/names/templates/names.html:77 -#, fuzzy -#| msgid "Enable DNSSEC" msgid "DNSSEC" -msgstr "Activer DNSSEC" +msgstr "DNSSEC" #: modules/names/templates/names.html:82 -#, fuzzy -#| msgid "Second DNS Server" msgid "Current DNS Server" -msgstr "Second Serveur DNS" +msgstr "Serveur DNS actuel" #: modules/names/templates/names.html:88 -#, fuzzy -#| msgid "DNS Server" msgid "DNS Servers" -msgstr "Serveur DNS" +msgstr "Serveurs DNS" #: modules/names/templates/names.html:98 -#, fuzzy -#| msgid "DNS Server" msgid "Fallback DNS Servers" -msgstr "Serveur DNS" +msgstr "Serveurs DNS de repli" #: modules/names/templates/names.html:112 msgid "" "systemd-resolved package is not installed. Install it for additional " "functionality." msgstr "" +"Le paquet systemd-resolved n'est pas installé. Installez-le pour des " +"fonctionnalités supplémentaires." #: modules/names/templates/names.html:121 templates/setup.html:66 msgid "Install" msgstr "Installer" #: modules/names/templates/names.html:126 -#, fuzzy -#| msgid "Error during installation" msgid "Error retrieving status:" -msgstr "Erreur pendant l’installation" +msgstr "Erreur lors de la récupération de l'état :" #: modules/names/views.py:81 -#, fuzzy -#| msgid "Hostname" msgid "Set Hostname" -msgstr "Nom de machine" +msgstr "Définir le nom d'hôte" #: modules/names/views.py:99 #, python-brace-format @@ -4942,10 +4871,8 @@ msgid "Error setting hostname: {exception}" msgstr "Erreur lors de la définition du nom de machine : {exception}" #: modules/names/views.py:115 -#, fuzzy -#| msgid "Domain Name" msgid "Set Domain Name" -msgstr "Nom de domaine" +msgstr "Définir le nom de domaine" #: modules/names/views.py:133 #, python-brace-format @@ -5010,7 +4937,7 @@ msgstr "" #: modules/networks/forms.py:56 msgid "Use DNS-over-TLS" -msgstr "" +msgstr "Utiliser DNS-sur-TLS" #: modules/networks/forms.py:90 msgid "IPv4 Addressing Method" @@ -5112,16 +5039,12 @@ msgstr "" "connexion Internet de ce réseau" #: modules/networks/forms.py:136 -#, fuzzy -#| msgid "" -#| "Automatic: Configure automatically, use Internet connection from this " -#| "network" msgid "" "Link-local: Configure automatically to use an address that is only relevant " "to this network." msgstr "" -"Automatique : configurer automatiquement, utiliser la connexion Internet de " -"ce réseau" +"Link-local : configurer automatiquement pour utiliser une adresse qui n'est " +"pertinent que pour ce réseau." #: modules/networks/forms.py:141 msgid "Ignore: Ignore this addressing method" @@ -5129,7 +5052,7 @@ msgstr "Ignorer : ignorer cette méthode d’attribution" #: modules/networks/forms.py:142 msgid "Disabled: Disable IPv6 for this connection" -msgstr "" +msgstr "Désactivé : désactiver IPv6 pour cette connexion" #: modules/networks/forms.py:147 msgid "Prefix" @@ -5674,10 +5597,8 @@ msgid "Edit Connection" msgstr "Modifier la connexion" #: modules/networks/templates/connections_fields.html:24 -#, fuzzy -#| msgid "Generic" msgid "General" -msgstr "Générique" +msgstr "Général" #: modules/networks/templates/connections_fields_pppoe.html:16 network.py:30 msgid "PPPoE" @@ -5920,29 +5841,24 @@ msgstr "" #: modules/networks/templates/wifi_scan.html:14 msgid "No Wi-Fi device detected." -msgstr "" +msgstr "Aucun périphérique Wi-Fi détecté." #: modules/networks/templates/wifi_scan.html:21 -#, fuzzy, python-format -#| msgid "Delete %(username)s" +#, python-format msgid "Device: %(interface_name)s" -msgstr "Supprimer %(username)s" +msgstr "Appareil : %(interface_name)s" #: modules/networks/templates/wifi_scan.html:27 -#, fuzzy -#| msgid "Last Connected Time" msgid "Last scanned: " -msgstr "Date de dernière connexion" +msgstr "Dernière analyse : " #: modules/networks/templates/wifi_scan.html:31 msgid "never" -msgstr "" +msgstr "jamais" #: modules/networks/templates/wifi_scan.html:52 -#, fuzzy -#| msgid "Wi-Fi network not found" msgid "No Wi-Fi networks found." -msgstr "Réseau wifi introuvable" +msgstr "Aucun réseau Wi-Fi n'a pu être trouvé." #: modules/networks/views.py:27 msgid "disabled" @@ -5966,13 +5882,11 @@ msgstr "lien local" #: modules/networks/views.py:32 msgid "dhcp" -msgstr "" +msgstr "dhcp" #: modules/networks/views.py:33 -#, fuzzy -#| msgid "Ignore" msgid "ignore" -msgstr "Ignorer" +msgstr "ignorer" #: modules/networks/views.py:40 msgid "unmanaged" @@ -6124,10 +6038,8 @@ msgid "mesh point" msgstr "Point d’accès au réseau maillé" #: modules/networks/views.py:122 -#, fuzzy -#| msgid "Default" msgid "default" -msgstr "Défaut" +msgstr "par défaut" #: modules/networks/views.py:155 msgid "Cannot show connection: Connection not found." @@ -6291,20 +6203,16 @@ msgstr "" "téléphone dans les réglages du profil sans code de pays." #: modules/nextcloud/manifest.py:56 modules/syncthing/manifest.py:58 -#, fuzzy -#| msgid "System" msgid "File sync" -msgstr "Système" +msgstr "Synchronisation de fichiers" #: modules/nextcloud/manifest.py:56 modules/sharing/__init__.py:34 msgid "Sharing" msgstr "Partages" #: modules/nextcloud/manifest.py:56 -#, fuzzy -#| msgid "Group Share" msgid "Groupware" -msgstr "Partage de groupe" +msgstr "Logiciel de groupe" #: modules/nextcloud/views.py:53 msgid "Password update failed. Please choose a stronger password." @@ -6355,16 +6263,12 @@ msgid "Tunnelblick" msgstr "Tunnelblick" #: modules/openvpn/manifest.py:60 modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "DNS server" msgid "VPN server" -msgstr "Serveur DNS" +msgstr "Serveur VPN" #: modules/openvpn/manifest.py:60 modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "Name Services" msgid "Remote access" -msgstr "Serveur de Noms" +msgstr "Accès à distance" #: modules/openvpn/templates/openvpn.html:12 msgid "Profile" @@ -6739,7 +6643,7 @@ msgstr "" #: modules/privacy/forms.py:28 msgid "Allow using fallback DNS servers" -msgstr "" +msgstr "Autoriser l'utilisation des serveurs DNS de repli" #: modules/privacy/forms.py:30 msgid "" @@ -6748,6 +6652,10 @@ msgid "" "available. Can be disabled in most cases if network connectivity is stable " "and reliable." msgstr "" +"Utiliser des serveurs DNS publics bien connus pour résoudre les noms de " +"domaines dans des circonstances inhabituelles où aucun serveur DNS n'est " +"connu mais où la connectivité Internet est disponible. Peut être désactivé " +"dans la plupart des cas si la connectivité est stable et fiable." #: modules/privoxy/__init__.py:25 msgid "" @@ -6794,20 +6702,16 @@ msgstr "Accéder à l’URL {url} avec le mandataire {proxy} sur tcp{kind}" #: modules/privoxy/manifest.py:10 msgid "Ad blocker" -msgstr "" +msgstr "Bloqueur de publicités" #: modules/privoxy/manifest.py:10 modules/shadowsocks/manifest.py:18 #: modules/torproxy/manifest.py:55 -#, fuzzy -#| msgid "Gobby Server" msgid "Proxy server" -msgstr "Serveur Gobby" +msgstr "Serveur mandataire" #: modules/privoxy/manifest.py:10 modules/samba/manifest.py:90 -#, fuzzy -#| msgid "Local Network Domain" msgid "Local network" -msgstr "Domaine de réseau local" +msgstr "Réseau local" #: modules/quassel/__init__.py:24 #, python-brace-format @@ -6853,7 +6757,7 @@ msgstr "Quasseldroid" #: modules/quassel/manifest.py:54 msgid "IRC" -msgstr "" +msgstr "IRC" #: modules/radicale/__init__.py:25 #, python-brace-format @@ -6964,22 +6868,20 @@ msgstr "" "existants." #: modules/radicale/manifest.py:91 -#, fuzzy -#| msgid "GNOME Calendar" msgid "Calendar" -msgstr "Agenda GNOME" +msgstr "Calendrier" #: modules/radicale/manifest.py:91 modules/roundcube/manifest.py:23 msgid "Contacts" -msgstr "" +msgstr "Contacts" #: modules/radicale/manifest.py:91 msgid "CalDAV" -msgstr "" +msgstr "CalDAV" #: modules/radicale/manifest.py:91 msgid "CardDAV" -msgstr "" +msgstr "CardDAV" #: modules/radicale/views.py:32 msgid "Access rights configuration updated" @@ -7054,10 +6956,8 @@ msgstr "" "quel compte il veut se connecter." #: modules/roundcube/manifest.py:23 -#, fuzzy -#| msgid "FairEmail" msgid "Email" -msgstr "FairEmail" +msgstr "Courriel" #: modules/rssbridge/__init__.py:21 msgid "" @@ -7079,19 +6979,16 @@ msgstr "" "des lecteurs de fils d’actualités." #: modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Tiny Tiny RSS to " -#| "follow various websites. When adding a feed, enable authentication and " -#| "use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Tiny Tiny RSS to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"Vous pouvez utiliser RSS-Bridge avec Tiny Tiny RSS pour suivre différents sites internet. Lors de l’ajout d’un fil, activez " -"l’authentification et utilisez les identifiants de {box_name}." +"Vous pouvez utiliser RSS-Bridge avec Miniflux " +"ou bien Tiny Tiny RSS pour suivre différents " +"sites Internet. Lors de l’ajout d’un fil, activez l’authentification et " +"utilisez les identifiants de {box_name}." #: modules/rssbridge/__init__.py:48 modules/ttrss/__init__.py:47 msgid "Read and subscribe to news feeds" @@ -7116,14 +7013,12 @@ msgstr "" "accéder." #: modules/rssbridge/manifest.py:16 -#, fuzzy -#| msgid "RSS Feed Generator" msgid "Feed generator" -msgstr "Générateur de fil RSS" +msgstr "Générateur de fils" #: modules/rssbridge/manifest.py:16 msgid "News" -msgstr "" +msgstr "Nouvelles" #: modules/samba/__init__.py:23 msgid "" @@ -7204,22 +7099,16 @@ msgid "Dolphin" msgstr "Dolphin" #: modules/samba/manifest.py:91 -#, fuzzy -#| msgid "Network Interface" msgid "Network drive" -msgstr "Interface réseau" +msgstr "Unité de réseau" #: modules/samba/manifest.py:92 -#, fuzzy -#| msgid "Media streaming server" msgid "Media storage" -msgstr "Serveur de streaming de médias" +msgstr "Stockage de médias" #: modules/samba/manifest.py:93 -#, fuzzy -#| msgid "Backups" msgid "Backup storage" -msgstr "Sauvegardes" +msgstr "Stockage des sauvegardes" #: modules/samba/templates/samba.html:20 msgid "Shares" @@ -7364,14 +7253,12 @@ msgid "Strict" msgstr "Strict" #: modules/searx/manifest.py:17 -#, fuzzy -#| msgid "Web Search" msgid "Web search" msgstr "Recherche web" #: modules/searx/manifest.py:17 msgid "Metasearch Engine" -msgstr "" +msgstr "Moteur de métarecherche" #: modules/security/forms.py:13 msgid "Fail2Ban (recommended)" @@ -7532,13 +7419,11 @@ msgstr "Shaarlier" #: modules/shaarli/manifest.py:34 msgid "Link blog" -msgstr "" +msgstr "Blogue de liens" #: modules/shaarli/manifest.py:34 -#, fuzzy -#| msgid "in use" msgid "Single user" -msgstr "en utilisation" +msgstr "Utilisateur unique" #: modules/shadowsocks/__init__.py:18 modules/shadowsocksserver/__init__.py:18 msgid "" @@ -7612,22 +7497,16 @@ msgstr "" "le serveur." #: modules/shadowsocks/manifest.py:20 modules/shadowsocksserver/manifest.py:19 -#, fuzzy -#| msgid "Encryption" msgid "Encrypted tunnel" -msgstr "Chiffrement" +msgstr "Tunnel chiffré" #: modules/shadowsocks/manifest.py:21 -#, fuzzy -#| msgid "Endpoint" msgid "Entry point" -msgstr "Serveur distant" +msgstr "Point d'entrée" #: modules/shadowsocks/manifest.py:22 modules/shadowsocksserver/manifest.py:21 -#, fuzzy -#| msgid "Shadowsocks Client" msgid "Shadowsocks" -msgstr "Client Shadowsocks" +msgstr "Shadowsocks" #: modules/shadowsocksserver/__init__.py:26 #, python-brace-format @@ -7665,10 +7544,8 @@ msgstr "" "Méthode de chiffrement. Les clients doivent utiliser la même configuration." #: modules/shadowsocksserver/manifest.py:20 -#, fuzzy -#| msgid "Endpoint" msgid "Exit point" -msgstr "Serveur distant" +msgstr "Point de sortie" #: modules/sharing/__init__.py:17 #, python-brace-format @@ -7731,10 +7608,8 @@ msgstr "" "Les partages peuvent être soit publics soit partagés avec au moins un groupe" #: modules/sharing/manifest.py:19 modules/zoph/manifest.py:26 -#, fuzzy -#| msgid "Sharing" msgid "Web sharing" -msgstr "Partages" +msgstr "Partage Web" #: modules/sharing/templates/sharing.html:18 #: modules/sharing/templates/sharing.html:21 @@ -8256,7 +8131,7 @@ msgstr "Aller à l'alimentation" #: modules/storage/__init__.py:447 modules/storage/tests/test_storage.py:396 msgid "grub package is configured" -msgstr "" +msgstr "Le paquet grub est configuré" #: modules/storage/forms.py:63 msgid "Invalid directory name." @@ -8426,6 +8301,11 @@ msgid "" "several short notes called Tiddlers and link them together into a dense " "graph." msgstr "" +"TiddlyWiki est une application interactive qui s'exécute entièrement dans le " +"navigateur Web. Chaque wiki est une fichier HTML autonome stocké sur votre " +"{box_name}. Au lieu de rédiger des longues pages wiki, TiddlyWiki vous " +"encourage à écrire des courtes notes appelées Tiddlers et à les lier " +"ensemble dans une graphique dense." #: modules/tiddlywiki/__init__.py:30 msgid "" @@ -8435,6 +8315,12 @@ msgid "" "TiddlyWiki. Encrypting individual tiddlers or password-protecting a wiki " "file is possible from within the application." msgstr "" +"C'est une application versatile avec un large éventail de cas d'utilisation -" +" carnet de notes non linéaire, site Web, base de connaissances personnelle, " +"système de gestion de tâches et de projets, journal intime, etc. Les " +"extension peuvent étendre les fonctionnalités de TiddlyWiki. Le chiffrement " +"de tiddlers individuels ou la protection par mot de passe d'un fichier wiki " +"est possible depuis l'application elle-même." #: modules/tiddlywiki/__init__.py:37 #, python-brace-format @@ -8442,48 +8328,55 @@ msgid "" "TiddlyWiki is downloaded from {box_name} website and not from Debian. Wikis " "need to be upgraded to newer version manually." msgstr "" +"TiddlyWiki est téléchargé depuis le site Web de {box_name} et pas depuis " +"Debian. Les wikis doivent être mis à jour vers des versions plus récentes " +"manuellement." #: modules/tiddlywiki/__init__.py:46 msgid "Create a new wiki or upload your existing wiki file to get started." msgstr "" +"Pour commencer, créez un nouveau wiki ou téléversez votre fichier de wiki " +"existant." #: modules/tiddlywiki/__init__.py:64 modules/tiddlywiki/manifest.py:9 msgid "TiddlyWiki" -msgstr "" +msgstr "TiddlyWiki" #: modules/tiddlywiki/__init__.py:66 msgid "Non-linear Notebooks" -msgstr "" +msgstr "Carnets de notes non linéaires" #: modules/tiddlywiki/forms.py:32 msgid "A TiddlyWiki file with .html file extension" -msgstr "" +msgstr "Un fichier TiddlyWiki avec une extension de fichier .html" #: modules/tiddlywiki/forms.py:35 msgid "TiddlyWiki files must be in HTML format" -msgstr "" +msgstr "Les fichiers TiddlyWiki doivent être au format HTML" #: modules/tiddlywiki/forms.py:37 msgid "Upload an existing TiddlyWiki file from this computer." -msgstr "" +msgstr "Téléverser un fichier TiddlyWiki existant depuis cet ordinateur." #: modules/tiddlywiki/manifest.py:22 msgid "Journal" -msgstr "" +msgstr "Journal" #: modules/tiddlywiki/manifest.py:23 msgid "Digital garden" -msgstr "" +msgstr "Jardin numérique" #: modules/tiddlywiki/manifest.py:24 msgid "Zettelkasten" -msgstr "" +msgstr "Zettelkasten" #: modules/tiddlywiki/templates/tiddlywiki_delete.html:18 msgid "" "Hint: You can download a copy of this wiki from within " "TiddlyWiki before deleting it." msgstr "" +"Astuce : vous pouvez télécharger une copie de ce wiki " +"depuis TiddlyWiki avant de l'effacer." #: modules/tor/__init__.py:33 modules/torproxy/__init__.py:29 msgid "" @@ -8643,10 +8536,8 @@ msgid "Orbot: Proxy with Tor" msgstr "Orbot : Mandataire utilisant Tor" #: modules/tor/manifest.py:57 -#, fuzzy -#| msgid "Onion Service" msgid "Onion services" -msgstr "Service Onion" +msgstr "Services Onion" #: modules/tor/manifest.py:58 msgid "Relay" @@ -8864,16 +8755,16 @@ msgid "FreedomBox Updated" msgstr "FreedomBox mise à jour" #: modules/upgrades/__init__.py:138 -#, fuzzy -#| msgid "Software Update" msgid "Run software update manually" -msgstr "Mise à jour du système" +msgstr "Exécuter la mise à jour logicielle manuellement" #: modules/upgrades/__init__.py:140 msgid "" "Automatic software update runs daily by default. For the first time, " "manually run it now." msgstr "" +"La mise à jour des logiciels s'exécute par défaut quotidiennement. Pour la " +"première fois, exécutez-la manuellement maintenant." #: modules/upgrades/__init__.py:242 msgid "Could not start distribution update" @@ -8903,7 +8794,7 @@ msgstr "" #: modules/upgrades/__init__.py:350 msgid "Check for package holds" -msgstr "" +msgstr "Vérifier la mise en attente des paquets" #: modules/upgrades/forms.py:15 msgid "Enable auto-update" @@ -9196,22 +9087,21 @@ msgstr "" "par # sont ignorées." #: modules/users/forms.py:252 -#, fuzzy -#| msgid "Delete User" msgid "Delete user" -msgstr "Supprimer Utilisateur" +msgstr "Supprimer l'utilisateur" #: modules/users/forms.py:254 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" +"Supprimer le compte de l'utilisateur enlèvera également tous les fichiers " +"relatifs à l'utilisateur. L'effacement des fichiers peut être évité en " +"définissant le compte de l'utilisateur comme inactif." #: modules/users/forms.py:305 -#, fuzzy -#| msgid "Failed to add user to group." msgid "Failed to delete user." -msgstr "Échec de l’ajout de l’utilisateur au groupe." +msgstr "Échec de la suppression de l'utilisateur." #: modules/users/forms.py:320 msgid "Renaming LDAP user failed." @@ -9338,10 +9228,11 @@ msgid "Save Changes" msgstr "Appliquer les changements" #: modules/users/templates/users_update.html:41 -#, fuzzy, python-format -#| msgid "Delete user %(username)s permanently?" +#, python-format msgid "Delete user %(username)s and all the user's files?" -msgstr "Supprimer définitivement l’utilisateur %(username)s ?" +msgstr "" +"Supprimer l’utilisateur %(username)s et tous les fichiers de " +"l'utilisateur ?" #: modules/users/templates/users_update.html:46 templates/messages.html:11 msgid "Close" @@ -9352,12 +9243,13 @@ msgid "" "Deleting a user account also removes all the files user's home directory. If " "you wish to keep these files, disable the user account instead." msgstr "" +"Supprimer un compte d'utilisateur efface également tous les fichiers dans le " +"répertoire personnel de l'utilisateur. Si vous voulez conserver ces " +"fichiers, désactivez plutôt le compte de l'utilisateur." #: modules/users/templates/users_update.html:59 -#, fuzzy -#| msgid "Delete files" msgid "Delete user and files" -msgstr "Supprimer des fichiers" +msgstr "Supprimer l'utilisateur et les fichiers" #: modules/users/templates/users_update.html:62 msgid "Cancel" @@ -9378,10 +9270,9 @@ msgid "Edit User" msgstr "Modification de l’utilisateur" #: modules/users/views.py:111 -#, fuzzy, python-format -#| msgid "User %(username)s created." +#, python-format msgid "User %(username)s deleted." -msgstr "Utilisateur %(username)s créé." +msgstr "L'utilisateur %(username)s supprimé." #: modules/users/views.py:130 msgid "Change Password" @@ -9516,10 +9407,8 @@ msgstr "" "lequel tout le trafic est envoyé." #: modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "IRC Client" msgid "VPN client" -msgstr "Client IRC" +msgstr "Client VPN" #: modules/wireguard/templates/wireguard.html:10 msgid "As a Server" @@ -9810,7 +9699,7 @@ msgstr "" #: modules/wordpress/manifest.py:26 msgid "Content management system" -msgstr "" +msgstr "Système de gestion de contenu" #: modules/zoph/__init__.py:24 #, python-brace-format @@ -9869,13 +9758,11 @@ msgstr "" #: modules/zoph/manifest.py:26 msgid "Photo" -msgstr "" +msgstr "Photo" #: modules/zoph/manifest.py:26 -#, fuzzy -#| msgid "Photo Organizer" msgid "Organizer" -msgstr "Photothèque" +msgstr "Organisateur" #: modules/zoph/templates/zoph-pre-setup.html:15 #: modules/zoph/templates/zoph-pre-setup.html:28 @@ -9896,10 +9783,9 @@ msgid "Generic" msgstr "Générique" #: operation.py:120 -#, fuzzy, python-brace-format -#| msgid "Error: {name}: {exception_message}" +#, python-brace-format msgid "Error: {name}: {exception}" -msgstr "Erreur : {name} : {exception_message}" +msgstr "Erreur : {name} : {exception}" #: operation.py:123 #, python-brace-format @@ -9951,22 +9837,19 @@ msgid "Updating app" msgstr "Mise à jour de l’application" #: setup.py:78 -#, fuzzy, python-brace-format -#| msgid "Error installing app: {error}" +#, python-brace-format msgid "Error installing app: {exception}" -msgstr "Erreur lors de l’installation de l’appli : {error}" +msgstr "Erreur lors de l’installation de l’application : {exception}" #: setup.py:80 -#, fuzzy, python-brace-format -#| msgid "Error repairing app: {error}" +#, python-brace-format msgid "Error repairing app: {exception}" -msgstr "Erreur lors de la réparation de l’application : {error}" +msgstr "Erreur lors de la réparation de l’application : {exception}" #: setup.py:82 -#, fuzzy, python-brace-format -#| msgid "Error updating app: {error}" +#, python-brace-format msgid "Error updating app: {exception}" -msgstr "Erreur lors de la mise à jour de l’appli : {error}" +msgstr "Erreur lors de la mise à jour de l’application : {exception}" #: setup.py:85 msgid "App installed." @@ -10036,7 +9919,7 @@ msgstr "" #: templates/404.html:10 #, python-format msgid "Page not found - %(box_name)s" -msgstr "Page introuvable − %(box_name)s :" +msgstr "Page introuvable − %(box_name)s" #: templates/404.html:18 msgid "404" @@ -10086,10 +9969,8 @@ msgid "Service %(service_name)s is not running." msgstr "Le service %(service_name)s n’est pas actif." #: templates/apps.html:29 -#, fuzzy -#| msgid "Search the web" msgid "Search with tags" -msgstr "Recherches sur le Web" +msgstr "Recherches avec des étiquettes" #: templates/base.html:31 msgid "" From 536721df19640339d6e3a9951ab2e05177a946b6 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Tue, 26 Nov 2024 11:44:19 -0800 Subject: [PATCH 10/82] tags: Fix issue with JS init on a page without tags - On a page without tags, tags.js still loads and initializes. When a tag input search bar does not exist on the page, this leads to a harmless exception getting printed on the browser console. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- static/tags.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/static/tags.js b/static/tags.js index 2b293789e..93d83c4c3 100644 --- a/static/tags.js +++ b/static/tags.js @@ -175,7 +175,9 @@ document.addEventListener('DOMContentLoaded', function () { }); const addTagInput = document.getElementById('add-tag-input'); - addTagInput.addEventListener('keyup', onTagInputKeyUp); + if (addTagInput) { // When page loads without tag input element + addTagInput.addEventListener('keyup', onTagInputKeyUp); + } const dropdownItems = document.querySelectorAll('.tag-input li.dropdown-item'); dropdownItems.forEach(item => { From 987577fae28d1b71183040aad2f5aee0ed077c9f Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Tue, 26 Nov 2024 11:55:02 -0800 Subject: [PATCH 11/82] notifications: Don't error when dismissing missing notifications Fixes: #2468. - Two browser tabs could be loaded with the interface and the same notification could be dismissed twice. When dismissing the notification for the second time, we currently throw a 404 error. Instead silently ignore the error. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- plinth/views.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plinth/views.py b/plinth/views.py index b2ee60e67..84fdca4b5 100644 --- a/plinth/views.py +++ b/plinth/views.py @@ -568,9 +568,8 @@ def notification_dismiss(request, id): """Dismiss a notification.""" from .notification import Notification notes = Notification.list(key=id, user=request.user) - if not notes: - raise Http404 - - notes[0].dismiss() + if notes: + # If a notification is not found, no need to dismiss it. + notes[0].dismiss() return HttpResponseRedirect(_get_redirect_url_from_param(request)) From 50cedaf528c54a7a4e44b3a0ff2a68f8f7b1d925 Mon Sep 17 00:00:00 2001 From: Veiko Aasa Date: Thu, 28 Nov 2024 07:35:47 +0200 Subject: [PATCH 12/82] tags: tests: Fix deprecated webdriver attribute Fixes errors in functional tests: `AttributeError: 'WebDriver' object has no attribute 'find_element_by_id'` Tests: - All tags tests pass. Signed-off-by: Veiko Aasa Reviewed-by: Sunil Mohan Adapa --- plinth/tests/tags/test_functional.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plinth/tests/tags/test_functional.py b/plinth/tests/tags/test_functional.py index fa7663b79..7a91f315b 100644 --- a/plinth/tests/tags/test_functional.py +++ b/plinth/tests/tags/test_functional.py @@ -47,13 +47,13 @@ def test_bittorrent_tag(session_browser, bittorrent_tag): def test_search_for_tag(session_browser, bittorrent_tag): """Test that searching for a tag returns the expected apps.""" - search_input = session_browser.driver.find_element_by_id('add-tag-input') + search_input = session_browser.find_by_id('add-tag-input').first with functional.wait_for_page_update( session_browser, timeout=10, expected_url='/plinth/apps/?tag=BitTorrent&tag=File+sharing'): search_input.click() - search_input.send_keys('file sharing') - search_input.send_keys(Keys.ENTER) + search_input.type('file sharing') + search_input.type(Keys.ENTER) for app in ['deluge', 'samba', 'sharing', 'syncthing', 'transmission']: _is_app_listed(session_browser, app) @@ -61,7 +61,7 @@ def test_search_for_tag(session_browser, bittorrent_tag): def test_click_on_tag(session_browser, bittorrent_tag): """Test that clicking on a tag lists the expected apps.""" - search_input = session_browser.driver.find_element_by_id('add-tag-input') + search_input = session_browser.find_by_id('add-tag-input').first with functional.wait_for_page_update( session_browser, timeout=10, expected_url='/plinth/apps/?tag=BitTorrent&tag=File+sync'): @@ -79,10 +79,10 @@ def test_tag_localization(session_browser, locale): badge = session_browser.find_by_css('.tag-badge[data-tag="Sharing"]').first assert 'Compartir' in badge.text - search_input = session_browser.driver.find_element_by_id('add-tag-input') + search_input = session_browser.find_by_id('add-tag-input').first with functional.wait_for_page_update( session_browser, timeout=10, expected_url='/plinth/apps/?tag=Sharing&tag=Bookmarks'): search_input.click() - search_input.send_keys('Marcadores') - search_input.send_keys(Keys.ENTER) + search_input.type('Marcadores') + search_input.type(Keys.ENTER) From 5ed6d19ff9092ac0ef799e5b6099e4ae9f0127e9 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sat, 30 Nov 2024 10:41:07 -0500 Subject: [PATCH 13/82] radicale: Update link to supported clients Signed-off-by: James Valleroy Reviewed-by: Sunil Mohan Adapa --- plinth/modules/radicale/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plinth/modules/radicale/__init__.py b/plinth/modules/radicale/__init__.py index acc046597..645da94c0 100644 --- a/plinth/modules/radicale/__init__.py +++ b/plinth/modules/radicale/__init__.py @@ -24,8 +24,8 @@ _description = [ format_lazy( _('Radicale is a CalDAV and CardDAV server. It allows synchronization ' 'and sharing of scheduling and contact data. To use Radicale, a ' - 'supported client application is needed. Radicale can ' + '' + 'supported client application is needed. Radicale can ' 'be accessed by any user with a {box_name} login.'), box_name=_(cfg.box_name)), _('Radicale provides a basic web interface, which only supports creating ' From b346169312205871fb2365c8a11a39c89cb3d7c1 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Tue, 26 Nov 2024 17:32:44 -0800 Subject: [PATCH 14/82] help: Add a class to the help index page - So that the page appearance can be easily customized in CSS. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/help/templates/help_index.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plinth/modules/help/templates/help_index.html b/plinth/modules/help/templates/help_index.html index 3bccca533..c50ae1a51 100644 --- a/plinth/modules/help/templates/help_index.html +++ b/plinth/modules/help/templates/help_index.html @@ -7,6 +7,8 @@ {% load firstboot_extras %} {% load static %} +{% block body_class %}help-page{% endblock %} + {% block content-container %}

{% trans "Help" %}

From 37e6e3b9b306669a7147633104b735c812e52165 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Tue, 26 Nov 2024 17:42:49 -0800 Subject: [PATCH 15/82] ui: Align app icons in the center for home, apps, and help pages Overall, this is something we can try out. - This looks better in some cases - Default large list of disabled apps - Home page with very few icons - Help index page /plinth/help - Mobile views - This looks somewhat worse in some cases - Last row of a large list of apps, esp. when the number apps left is even and the number of apps in the previous row is not (similarly with odd number of apps). - Mismatch between enabled/disabled app section. Thanks to @Ged296123 and @fefekrzr for suggesting the change. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- static/themes/default/css/main.css | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/static/themes/default/css/main.css b/static/themes/default/css/main.css index 2d0825116..dcca81531 100644 --- a/static/themes/default/css/main.css +++ b/static/themes/default/css/main.css @@ -504,11 +504,12 @@ footer { } } -/* Cards in Apps, System and Help pages */ +/* Cards in Index, Apps, System and Help pages */ .card-list { display: flex; flex-wrap: wrap; - justify-content: left; + justify-content: center; + margin: 0 auto; } .card-section-title, .system-section-title { @@ -572,6 +573,11 @@ a.menu_link_active { } /* System page - special card styling */ +.system-page .card-list { + justify-content: left; + margin: 0; +} + .system-page .card { text-align: left; width: 20.625rem; From 3f20c1668dc4eabc44adcfdd925fbb714956d12e Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 27 Nov 2024 10:32:33 -0800 Subject: [PATCH 16/82] ui: Allow users to provide a CSS file to customize styling - Don't include the file if it does not exist to avoid a 404 error every time a page it loaded. - Load the file from a know path under the already known custom static path. Tests: - When the user.css file is created, it added to the web page. It is prioritized over the main.css with CSS cascading rules. - When the user.css file does not exist on the filesystem, it is not added to the web page. - When custom static directory (/var/www/plint) does not exist on the filesystem, a debug log message is printed that this directory is not served. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/context_processors.py | 3 ++- plinth/templates/base.html | 6 +++++- plinth/web_server.py | 21 ++++++++++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/plinth/context_processors.py b/plinth/context_processors.py index c1028758c..1518afa78 100644 --- a/plinth/context_processors.py +++ b/plinth/context_processors.py @@ -8,7 +8,7 @@ import re from django.utils.translation import gettext as _ from django.utils.translation import gettext_noop -from plinth import cfg +from plinth import cfg, web_server from plinth.utils import is_user_admin @@ -35,6 +35,7 @@ def common(request): 'active_menu_urls': active_menu_urls, 'box_name': _(cfg.box_name), 'user_is_admin': is_user_admin(request, True), + 'user_css': web_server.get_user_css(), 'notifications': notifications_context['notifications'], 'notifications_max_severity': notifications_context['max_severity'] } diff --git a/plinth/templates/base.html b/plinth/templates/base.html index e3897abb4..c2f5c6215 100644 --- a/plinth/templates/base.html +++ b/plinth/templates/base.html @@ -50,10 +50,14 @@ - + + {% if user_css %} + + {% endif %} + diff --git a/plinth/web_server.py b/plinth/web_server.py index 6b6317598..9020c8be4 100644 --- a/plinth/web_server.py +++ b/plinth/web_server.py @@ -5,6 +5,7 @@ Setup CherryPy web server. import logging import os +import pathlib import sys import warnings from typing import ClassVar @@ -27,6 +28,24 @@ MODULES_EXCLUDED_FROM_AUTORELOAD = [ 'psycopg2', ] +_CUSTOM_STATIC_URL = '/custom/static' + +_USER_CSS_PATH = 'css/user.css' + + +def get_custom_static_url(): + """Return the URL path fragment for custom static URL.""" + return f'{cfg.server_dir}{_CUSTOM_STATIC_URL}' + + +def get_user_css(): + """Return the URL path fragement for user CSS if it exists else None.""" + user_css_path = pathlib.Path(cfg.custom_static_dir) / _USER_CSS_PATH + if not user_css_path.exists(): + return None + + return get_custom_static_url() + '/' + _USER_CSS_PATH + def _mount_static_directory(static_dir, static_url): config = { @@ -64,7 +83,7 @@ def init(): _mount_static_directory(static_dir, web_framework.get_static_url()) custom_static_dir = cfg.custom_static_dir - custom_static_url = '/plinth/custom/static' + custom_static_url = get_custom_static_url() if os.path.exists(custom_static_dir): _mount_static_directory(custom_static_dir, custom_static_url) else: From 9504eab6e37bdb253e34f05218b4c74559ac1684 Mon Sep 17 00:00:00 2001 From: Carles Pina i Estany Date: Sun, 1 Dec 2024 07:52:21 +0000 Subject: [PATCH 17/82] Added po-debconf Catalan translation Reviewed-by: James Valleroy --- debian/po/ca.po | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 debian/po/ca.po diff --git a/debian/po/ca.po b/debian/po/ca.po new file mode 100644 index 000000000..7685425c6 --- /dev/null +++ b/debian/po/ca.po @@ -0,0 +1,36 @@ +# Catalan translation of plinth's debconf messages +# Copyright © 2024 Free Software Foundation, Inc. +# This file is distributed under the same license as the plinth package. +# poc senderi , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: plinth\n" +"Report-Msgid-Bugs-To: plinth@packages.debian.org\n" +"POT-Creation-Date: 2019-11-18 18:11-0500\n" +"PO-Revision-Date: 2024-11-05 22:18+0100\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Last-Translator: poc senderi \n" +"Language-Team: Catalan \n" +"X-Generator: Poedit 2.4.2\n" + +#. Type: note +#. Description +#: ../templates:1001 +msgid "FreedomBox first wizard secret - ${secret}" +msgstr "Secret per a l'engegada inicial del «wizard» de FreedomBox - ${secret}" + +#. Type: note +#. Description +#: ../templates:1001 +msgid "" +"Please note down the above secret. You will be asked to enter this in the " +"first screen after you launch the FreedomBox web interface. In case you lose " +"it, you can retrieve it by running the following command:" +msgstr "" +"Anoteu el secret anterior. Us serà demanat a la primera pantalla després " +"d'engegar la interfície web del FreedomBox. En cas que el perdeu, el podeu " +"recuperar executant la següent ordre:" From f2fad4f1cf5913416f0a0ad2956e97cea0d72034 Mon Sep 17 00:00:00 2001 From: gfbdrgng Date: Mon, 2 Dec 2024 05:39:20 +0000 Subject: [PATCH 18/82] Translated using Weblate (Russian) Currently translated at 98.1% (1742 of 1775 strings) --- plinth/locale/ru/LC_MESSAGES/django.po | 807 +++++++++++-------------- 1 file changed, 338 insertions(+), 469 deletions(-) diff --git a/plinth/locale/ru/LC_MESSAGES/django.po b/plinth/locale/ru/LC_MESSAGES/django.po index 8ce19be55..0ec1932be 100644 --- a/plinth/locale/ru/LC_MESSAGES/django.po +++ b/plinth/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-05-26 04:09+0000\n" +"PO-Revision-Date: 2024-12-03 05:00+0000\n" "Last-Translator: gfbdrgng \n" "Language-Team: Russian \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.9-dev\n" #: config.py:103 #, python-brace-format @@ -329,6 +329,9 @@ msgid "" "file previously downloaded from the result of a successful backup on a " "{box_name}. It must have a .tar.gz extension." msgstr "" +"Выберите файл резервной копии для загрузки с локального компьютера. Это " +"должен быть файл, ранее загруженный в результате успешного резервного " +"копирования на {box_name}. Он должен иметь расширение .tar.gz." #: modules/backups/forms.py:152 msgid "Repository path format incorrect." @@ -874,14 +877,13 @@ msgstr "" #: modules/bepasty/manifest.py:23 modules/deluge/manifest.py:21 #: modules/samba/manifest.py:89 modules/sharing/manifest.py:19 #: modules/syncthing/manifest.py:58 modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "File & Snippet Sharing" msgid "File sharing" -msgstr "Обмен файлами и фрагментами" +msgstr "Обмен файлами" #: modules/bepasty/manifest.py:23 +#, fuzzy msgid "Pastebin" -msgstr "" +msgstr "Pastebin" #: modules/bepasty/templates/bepasty.html:12 msgid "Manage Passwords" @@ -1116,19 +1118,15 @@ msgstr "Библиотека с таким названием уже сущес #: modules/calibre/manifest.py:20 msgid "Ebook" -msgstr "" +msgstr "Электронная книга" #: modules/calibre/manifest.py:20 -#, fuzzy -#| msgid "E-book Library" msgid "Library" -msgstr "Электронная библиотека" +msgstr "Библиотека" #: modules/calibre/manifest.py:20 -#, fuzzy -#| msgid "E-book Library" msgid "Ebook reader" -msgstr "Электронная библиотека" +msgstr "Читалка для электронных книг" #: modules/calibre/templates/calibre-delete-library.html:11 #, python-format @@ -1240,16 +1238,12 @@ msgid "Server Administration" msgstr "Администрирование сервера" #: modules/config/__init__.py:18 -#, fuzzy -#| msgid "" -#| "Here you can set some general configuration options like hostname, domain " -#| "name, webserver home page etc." msgid "" "Here you can set some general configuration options like webserver home page " "etc." msgstr "" -"Здесь вы можете установить такие опции конфигурации, как имя хоста, доменное " -"имя, домашняя страница веб-сервера и тому подобное." +"Здесь вы можете задать некоторые общие параметры конфигурации, например " +"домашнюю страницу веб-сервера и т. д." #: modules/config/__init__.py:40 msgid "General Configuration" @@ -1387,15 +1381,17 @@ msgstr "Неверный список URI серверов STUN/TURN" #: modules/coturn/manifest.py:7 modules/janus/manifest.py:16 msgid "Video conference" -msgstr "" +msgstr "Видеоконференция" #: modules/coturn/manifest.py:7 +#, fuzzy msgid "STUN" -msgstr "" +msgstr "STUN" #: modules/coturn/manifest.py:7 +#, fuzzy msgid "TURN" -msgstr "" +msgstr "TURN" #: modules/coturn/templates/coturn.html:15 msgid "Use the following URLs to configure your communication server:" @@ -1486,17 +1482,15 @@ msgstr "БитТоррент" #: modules/deluge/manifest.py:21 modules/roundcube/manifest.py:23 #: modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "Launch web client" msgid "Web client" -msgstr "Запустить веб-клиент" +msgstr "Веб клиент" #: modules/deluge/manifest.py:21 modules/syncthing/manifest.py:58 #: modules/transmission/manifest.py:39 #, fuzzy #| msgid "I2P" msgid "P2P" -msgstr "I2P" +msgstr "P2P" #: modules/diagnostics/__init__.py:29 msgid "" @@ -1512,7 +1506,7 @@ msgstr "Диагностика" #: modules/diagnostics/__init__.py:99 msgid "skipped" -msgstr "" +msgstr "пропустить" #: modules/diagnostics/__init__.py:100 msgid "passed" @@ -1593,14 +1587,12 @@ msgstr "" "день." #: modules/diagnostics/forms.py:15 -#, fuzzy -#| msgid "Enable auto-update" msgid "Enable automatic repair" -msgstr "Включить автообновление" +msgstr "Включить автоматическое восстановление" #: modules/diagnostics/forms.py:16 msgid "If issues are found, try to repair them automatically." -msgstr "" +msgstr "Если проблемы обнаружены, попробуйте устранить их автоматически." #: modules/diagnostics/templates/diagnostics.html:11 msgid "Diagnostics Run" @@ -2052,54 +2044,43 @@ msgid "Gajim" msgstr "Gajim" #: modules/ejabberd/manifest.py:124 modules/matrixsynapse/manifest.py:102 -#, fuzzy -#| msgid "Encryption" msgid "Encrypted messaging" -msgstr "Шифрование" +msgstr "Зашифрованные сообщения" #: modules/ejabberd/manifest.py:125 modules/matrixsynapse/manifest.py:103 #: modules/mumble/manifest.py:67 msgid "Audio chat" -msgstr "" +msgstr "Аудио чат" #: modules/ejabberd/manifest.py:126 modules/matrixsynapse/manifest.py:104 -#, fuzzy -#| msgid "Video Room" msgid "Video chat" -msgstr "Видео комната" +msgstr "Видео чат" #: modules/ejabberd/manifest.py:127 modules/jsxc/manifest.py:16 +#, fuzzy msgid "XMPP" -msgstr "" +msgstr "XMPP" #: modules/ejabberd/templates/ejabberd.html:18 -#, fuzzy, python-format -#| msgid "" -#| "Your XMPP server domain is set to %(domainname)s. User IDs will " -#| "look like username@%(domainname)s. You can setup your domain on " -#| "the system Configure page." +#, python-format msgid "" "Your XMPP server domain is set to %(domain_name)s. User IDs will look " "like username@%(domain_name)s. You can setup your domain on the " "system Name Services page." msgstr "" -"Ваш домен сервера XMPP имеет значение %(domainname)s Идентификаторы " -"пользователей будет выглядеть как username@%(domainname)s. Вы можете " -"настроить ваш домен на странице Настройка." +"Домен вашего XMPP-сервера установлен на %(имя_домена)s. " +"Идентификаторы пользователей будут выглядеть как имя " +"пользователя@%(имя_домена)s. Вы можете настроить свой домен на странице " +"системы Name Services." #: modules/ejabberd/templates/ejabberd.html:25 -#, fuzzy, python-format -#| msgid "" -#| "Your XMPP server domain is set to %(domainname)s. User IDs will " -#| "look like username@%(domainname)s. You can setup your domain on " -#| "the system Configure page." +#, python-format msgid "" "Your XMPP server domain is not set. You can setup your domain on the system " "Name Services page." msgstr "" -"Ваш домен сервера XMPP имеет значение %(domainname)s Идентификаторы " -"пользователей будет выглядеть как username@%(domainname)s. Вы можете " -"настроить ваш домен на странице Настройка." +"Домен вашего XMPP-сервера не задан. Вы можете настроить свой домен на " +"странице системы Name Services." #: modules/email/__init__.py:26 msgid "" @@ -2222,18 +2203,17 @@ msgid "FairEmail" msgstr "FairEmail" #: modules/email/manifest.py:82 -#, fuzzy -#| msgid "Email Server" msgid "Email server" -msgstr "Сервер электронной почты" +msgstr "Сервер Электронной почты" #: modules/email/manifest.py:82 +#, fuzzy msgid "IMAP" -msgstr "" +msgstr "IMAP" #: modules/email/manifest.py:82 msgid "Spam control" -msgstr "" +msgstr "Контроль спама" #: modules/email/templates/email-aliases.html:13 #: modules/email/templates/email.html:15 @@ -2300,6 +2280,10 @@ msgid "" "a single HTML file on your {box_name}. You can use it as a personal wiki, as " "a web notebook, or for project documentation." msgstr "" +"Feather Wiki - это инструмент для создания простых самодостаточных вики, " +"каждая из которых хранится в одном HTML-файле на вашем {box_name}. Вы можете " +"использовать его в качестве персональной вики, веб-блокнота или проектной " +"документации." #: modules/featherwiki/__init__.py:29 msgid "" @@ -2307,6 +2291,9 @@ msgid "" "wiki per topic. Customize each wiki to your liking with extensions and other " "customization options." msgstr "" +"Каждая вики - это небольшой файл. Создавайте столько вики, сколько хотите, " +"например, по одной вики на тему. Настройте каждую вики по своему вкусу с " +"помощью расширений и других возможностей настройки." #: modules/featherwiki/__init__.py:33 #, python-brace-format @@ -2314,6 +2301,8 @@ msgid "" "Feather Wiki is downloaded from {box_name} website and not from Debian. " "Wikis need to be upgraded to newer version manually." msgstr "" +"Feather Wiki загружается с сайта {box_name}, а не из Debian. Вики необходимо " +"обновлять до новой версии вручную." #: modules/featherwiki/__init__.py:37 modules/tiddlywiki/__init__.py:41 #, python-brace-format @@ -2323,6 +2312,10 @@ msgid "" "{box_name} belonging to the wiki group. Simultaneous editing is not " "supported." msgstr "" +"Вики по умолчанию не являются публичными, но их можно загрузить для " +"совместного использования или публикации. Их может редактировать любой пользователь на {box_name}, принадлежащий к вики-" +"группе. Одновременное редактирование не поддерживается." #: modules/featherwiki/__init__.py:56 modules/ikiwiki/__init__.py:80 #: modules/tiddlywiki/__init__.py:61 @@ -2331,41 +2324,43 @@ msgstr "Просмотр и редактирование приложений Wi #: modules/featherwiki/__init__.py:59 modules/featherwiki/manifest.py:9 msgid "Feather Wiki" -msgstr "" +msgstr "Перо Вики" #: modules/featherwiki/__init__.py:61 msgid "Personal Notebooks" -msgstr "" +msgstr "Личные блокноты" #: modules/featherwiki/forms.py:13 modules/tiddlywiki/forms.py:13 msgid "Name of the wiki file, with file extension \".html\"" -msgstr "" +msgstr "Имя вики-файла с расширением \".html\"" #: modules/featherwiki/forms.py:15 modules/tiddlywiki/forms.py:15 msgid "" "Wiki title and description can be set from within the wiki. This file name " "is independent of the wiki title." msgstr "" +"Название и описание вики можно задать из самой вики. Имя файла не зависит от " +"названия вики." #: modules/featherwiki/forms.py:23 modules/tiddlywiki/forms.py:23 msgid "New name for the wiki file, with file extension \".html\"" -msgstr "" +msgstr "Новое название файла вики с расширением \".html\"" #: modules/featherwiki/forms.py:25 modules/tiddlywiki/forms.py:25 msgid "Renaming the file has no effect on the title of the wiki." -msgstr "" +msgstr "Переименование файла не влияет на название вики." #: modules/featherwiki/forms.py:32 msgid "A Feather Wiki file with .html file extension" -msgstr "" +msgstr "Файл Feather Wiki с расширением .html" #: modules/featherwiki/forms.py:35 msgid "Feather Wiki files must be in HTML format" -msgstr "" +msgstr "Файлы Feather Wiki должны быть в формате HTML" #: modules/featherwiki/forms.py:37 msgid "Upload an existing Feather Wiki file from this computer." -msgstr "" +msgstr "Загрузите существующий файл Feather Wiki с этого компьютера." #: modules/featherwiki/manifest.py:18 modules/help/templates/help_about.html:96 #: modules/ikiwiki/manifest.py:15 modules/mediawiki/__init__.py:52 @@ -2376,33 +2371,28 @@ msgstr "Wiki" #: modules/featherwiki/manifest.py:18 modules/infinoted/manifest.py:46 #: modules/tiddlywiki/manifest.py:20 msgid "Note taking" -msgstr "" +msgstr "Взятие на заметку" #: modules/featherwiki/manifest.py:18 modules/ikiwiki/manifest.py:15 #: modules/mediawiki/manifest.py:25 modules/tiddlywiki/manifest.py:21 #: modules/wordpress/manifest.py:26 -#, fuzzy -#| msgid "Website Security" msgid "Website" -msgstr "Безопасность Веб-сайта" +msgstr "Веб-сайт" #: modules/featherwiki/manifest.py:18 modules/tiddlywiki/manifest.py:25 +#, fuzzy msgid "Quine" -msgstr "" +msgstr "Quine" #: modules/featherwiki/manifest.py:18 modules/nextcloud/manifest.py:56 #: modules/tiddlywiki/manifest.py:26 -#, fuzzy -#| msgid "Debian:" msgid "Non-Debian" -msgstr "Debian:" +msgstr "Не-Debian" #: modules/featherwiki/templates/featherwiki_configure.html:12 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:12 -#, fuzzy -#| msgid "Manage Libraries" msgid "Manage Wikis" -msgstr "Управление библиотеками" +msgstr "Управление википроектами" #: modules/featherwiki/templates/featherwiki_configure.html:16 #: modules/featherwiki/templates/featherwiki_configure.html:18 @@ -2410,67 +2400,57 @@ msgstr "Управление библиотеками" #: modules/tiddlywiki/templates/tiddlywiki_configure.html:16 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:18 #: modules/tiddlywiki/views.py:47 -#, fuzzy -#| msgid "Create Wiki or Blog" msgid "Create Wiki" -msgstr "Создать Блог или Вики" +msgstr "Создать вики" #: modules/featherwiki/templates/featherwiki_configure.html:21 #: modules/featherwiki/templates/featherwiki_configure.html:23 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:21 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:23 -#, fuzzy -#| msgid "Upload File" msgid "Upload Wiki" -msgstr "Загрузить файл" +msgstr "Загрузить Вики" #: modules/featherwiki/templates/featherwiki_configure.html:30 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:30 -#, fuzzy -#| msgid "No libraries available." msgid "No wikis available." -msgstr "Нет доступных библиотек." +msgstr "Вики-сайты отсутствуют." #: modules/featherwiki/templates/featherwiki_configure.html:36 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:36 -#, fuzzy, python-format -#| msgid "Go to site %(site)s" +#, python-format msgid "Go to wiki %(wiki)s" -msgstr "Перейти к %(site)s" +msgstr "Перейти к вики %(вики)" #: modules/featherwiki/templates/featherwiki_configure.html:43 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:43 -#, fuzzy, python-format -#| msgid "Enable ikiwiki" +#, python-format msgid "Rename wiki %(wiki)s" -msgstr "Включить ikiwiki" +msgstr "Переименовать вики %(wiki)s" #: modules/featherwiki/templates/featherwiki_configure.html:50 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:50 -#, fuzzy, python-format -#| msgid "Delete site %(site)s" +#, python-format msgid "Delete wiki %(wiki)s" -msgstr "Удаление узла %(site)s" +msgstr "Удалить вики %(wiki)s" #: modules/featherwiki/templates/featherwiki_delete.html:12 #: modules/tiddlywiki/templates/tiddlywiki_delete.html:12 -#, fuzzy, python-format -#| msgid "Delete Wiki or Blog %(name)s" +#, python-format msgid "Delete wiki %(name)s" -msgstr "Удалить Вики или Блог %(name)s" +msgstr "Удалить вики %(name)s" #: modules/featherwiki/templates/featherwiki_delete.html:18 msgid "" "Hint: You can download a copy of this wiki from within " "Feather Wiki before deleting it." msgstr "" +"Подсказка: Вы можете загрузить копию этой вики из Feather " +"Wiki, прежде чем удалять ее." #: modules/featherwiki/templates/featherwiki_delete.html:25 #: modules/tiddlywiki/templates/tiddlywiki_delete.html:25 -#, fuzzy -#| msgid "Delete this archive permanently?" msgid "Delete this wiki file permanently?" -msgstr "Окончательно удалить этот архив?" +msgstr "Удалить этот вики-файл навсегда?" #: modules/featherwiki/templates/featherwiki_upload_file.html:20 #: modules/tiddlywiki/templates/tiddlywiki_upload_file.html:20 @@ -2478,60 +2458,45 @@ msgid "Upload" msgstr "Скачать" #: modules/featherwiki/views.py:20 modules/tiddlywiki/views.py:20 -#, fuzzy -#| msgid "A share with this name already exists." msgid "A wiki file with the given name already exists." -msgstr "Общий ресурс с таким именем уже существует." +msgstr "Файл wiki с указанным именем уже существует." #: modules/featherwiki/views.py:54 modules/tiddlywiki/views.py:54 -#, fuzzy -#| msgid "Archive created." msgid "Wiki created." -msgstr "Архив создан." +msgstr "Вики создана." #: modules/featherwiki/views.py:59 modules/tiddlywiki/views.py:59 -#, fuzzy -#| msgid "An error occurred while creating the library." msgid "An error occurred while creating the wiki." -msgstr "Ошибка при создании библиотеки." +msgstr "При создании вики произошла ошибка." #: modules/featherwiki/views.py:76 modules/tiddlywiki/views.py:76 -#, fuzzy -#| msgid "MediaWiki" msgid "Rename Wiki" -msgstr "MediaWiki" +msgstr "Переименовать Вики" #: modules/featherwiki/views.py:84 modules/tiddlywiki/views.py:84 msgid "Wiki renamed." -msgstr "" +msgstr "Вики переименована." #: modules/featherwiki/views.py:89 modules/tiddlywiki/views.py:89 -#, fuzzy -#| msgid "An error occurred while creating the library." msgid "An error occurred while renaming the wiki." -msgstr "Ошибка при создании библиотеки." +msgstr "При переименовании вики произошла ошибка." #: modules/featherwiki/views.py:106 modules/tiddlywiki/views.py:106 -#, fuzzy -#| msgid "Upload File" msgid "Upload Wiki File" -msgstr "Загрузить файл" +msgstr "Загрузить вики-файл" #: modules/featherwiki/views.py:115 modules/tiddlywiki/views.py:116 msgid "Wiki file added." -msgstr "" +msgstr "Добавлен вики-файл." #: modules/featherwiki/views.py:119 modules/tiddlywiki/views.py:120 -#, fuzzy -#| msgid "Failed to add content package." msgid "Failed to add wiki file." -msgstr "Не удалось добавить пакет содержимого." +msgstr "Не удалось добавить файл wiki." #: modules/featherwiki/views.py:138 modules/tiddlywiki/views.py:139 -#, fuzzy, python-brace-format -#| msgid "Could not delete {name}: {error}" +#, python-brace-format msgid "Could not delete {name}" -msgstr "Не удалось удалить {name}: {error}" +msgstr "Не удалось удалить {name}" #: modules/firewall/__init__.py:25 #, python-brace-format @@ -2635,10 +2600,8 @@ msgstr "" "firewall\">Cockpit." #: modules/first_boot/__init__.py:61 -#, fuzzy -#| msgid "Setup Complete!" msgid "Setup complete! Next steps:" -msgstr "Установка Завершена!" +msgstr "Настройка завершена! Следующие шаги:" #: modules/first_boot/__init__.py:63 #, python-brace-format @@ -2646,14 +2609,16 @@ msgid "" "Initial setup has been completed. Perform the next steps to make your " "{box_name} operational." msgstr "" +"Первоначальная настройка завершена. Выполните следующие шаги, чтобы ввести " +"{box_name} в эксплуатацию." #: modules/first_boot/__init__.py:66 msgid "Next steps" -msgstr "" +msgstr "Следующие шаги" #: modules/first_boot/__init__.py:73 msgid "See next steps" -msgstr "" +msgstr "Смотрите следующие шаги" #: modules/first_boot/forms.py:14 #, python-brace-format @@ -2671,10 +2636,8 @@ msgid "Firstboot Wizard Secret" msgstr "Ассистент при первой загрузке" #: modules/first_boot/templates/firstboot_complete.html:11 -#, fuzzy -#| msgid "Setup Complete!" msgid "Setup Complete! Next Steps:" -msgstr "Установка Завершена!" +msgstr "Настройка завершена! Следующие шаги:" #: modules/first_boot/templates/firstboot_complete.html:18 #, python-format @@ -2682,6 +2645,9 @@ msgid "" "Automatic software update " "runs daily by default. For the first time, manually run it now." msgstr "" +"Автоматическое обновление " +"программного обеспечения запускается ежедневно по умолчанию. В первый " +"раз запустите его вручную сейчас." #: modules/first_boot/templates/firstboot_complete.html:27 #: modules/upgrades/templates/upgrades_configure.html:108 @@ -2693,6 +2659,8 @@ msgstr "Обновить сейчас" msgid "" "Review privacy options." msgstr "" +"Просмотрите опции " +"конфиденциальности." #: modules/first_boot/templates/firstboot_complete.html:46 #, python-format @@ -2700,12 +2668,15 @@ msgid "" "Review and setup network " "connections. Change the default Wi-Fi password, if applicable." msgstr "" +"Просмотрите и настройте сетевые подключения. Измените пароль Wi-Fi по умолчанию, если это " +"необходимо." #: modules/first_boot/templates/firstboot_complete.html:57 #, python-format msgid "" "Configure a domain name." -msgstr "" +msgstr "Настройте имя домена." #: modules/first_boot/templates/firstboot_complete.html:67 #, python-format @@ -2713,6 +2684,8 @@ msgid "" "Configure and schedule remote backups." msgstr "" +"Настройка и планирование удаленных резервных копий." #: modules/first_boot/templates/firstboot_complete.html:78 #, python-format @@ -2720,6 +2693,8 @@ msgid "" "Put %(box_name)s to use by installing apps." msgstr "" +"Используйте %(box_name)s для установки приложений." #: modules/first_boot/templates/firstboot_welcome.html:29 msgid "Start Setup" @@ -2827,18 +2802,16 @@ msgid "Git" msgstr "Git" #: modules/gitweb/manifest.py:37 -#, fuzzy -#| msgid "Simple Git Hosting" msgid "Git hosting" -msgstr "Простой хостинг Git" +msgstr "Git-хостинг" #: modules/gitweb/manifest.py:37 msgid "Version control" -msgstr "" +msgstr "Контроль версий" #: modules/gitweb/manifest.py:37 msgid "Developer tool" -msgstr "" +msgstr "Инструмент разработчика" #: modules/gitweb/templates/gitweb_configure.html:13 msgid "Manage Repositories" @@ -3009,10 +2982,8 @@ msgstr "" "i>\" в терминале (с использованием Cockpit или SSH)." #: modules/help/templates/help_about.html:85 -#, fuzzy -#| msgid "Learn more" msgid "Learn" -msgstr "Подробнее" +msgstr "Узнать" #: modules/help/templates/help_about.html:88 msgid "Homepage" @@ -3024,17 +2995,15 @@ msgstr "Пожертвовать" #: modules/help/templates/help_about.html:107 msgid "Join project" -msgstr "" +msgstr "Присоединяйтесь к проекту" #: modules/help/templates/help_about.html:111 msgid "Translate" -msgstr "" +msgstr "Перевести" #: modules/help/templates/help_about.html:117 -#, fuzzy -#| msgid "Get Support" msgid "Support" -msgstr "Получить поддержку" +msgstr "Поддержка" #: modules/help/templates/help_about.html:121 msgid "Forum" @@ -3337,16 +3306,14 @@ msgstr "I2P Прокси" #: modules/i2p/manifest.py:43 modules/tor/manifest.py:59 #: modules/torproxy/manifest.py:56 -#, fuzzy -#| msgid "Anonymity Network" msgid "Anonymity network" -msgstr "Анонимная сеть" +msgstr "Сеть анонимности" #: modules/i2p/manifest.py:43 modules/kiwix/manifest.py:25 #: modules/shadowsocks/manifest.py:19 modules/shadowsocksserver/manifest.py:18 #: modules/tor/manifest.py:60 modules/torproxy/manifest.py:57 msgid "Censorship resistance" -msgstr "" +msgstr "Противодействие цензуре" #: modules/i2p/templates/i2p.html:12 msgid "I2P Proxies and Tunnels" @@ -3431,7 +3398,7 @@ msgstr "Пароль учетной записи администратора" #: modules/ikiwiki/manifest.py:15 modules/wordpress/manifest.py:26 msgid "Blog" -msgstr "" +msgstr "Блог" #: modules/ikiwiki/templates/ikiwiki_configure.html:12 msgid "Manage Wikis and Blogs" @@ -3548,7 +3515,7 @@ msgstr "" #: modules/infinoted/manifest.py:46 msgid "Collaborative editing" -msgstr "" +msgstr "Совместное редактирование" #: modules/janus/__init__.py:23 msgid "Janus is a lightweight WebRTC server." @@ -3579,11 +3546,11 @@ msgstr "Видеокомната Janus" #, fuzzy #| msgid "WebRTC server" msgid "WebRTC" -msgstr "Сервер WebRTC" +msgstr "WebRTC" #: modules/janus/manifest.py:16 msgid "Web conference" -msgstr "" +msgstr "Веб-конференция" #: modules/janus/templates/janus_video_room.html:205 #: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:263 @@ -3607,16 +3574,12 @@ msgid "Chat Client" msgstr "Чат-клиент" #: modules/jsxc/manifest.py:16 -#, fuzzy -#| msgid "Web Search" msgid "Web chat" -msgstr "Веб-поиск" +msgstr "Веб чат" #: modules/jsxc/manifest.py:16 modules/quassel/manifest.py:54 -#, fuzzy -#| msgid "IRC Client" msgid "Client" -msgstr "IRC-клиент" +msgstr "Клиент" #: modules/kiwix/__init__.py:21 msgid "" @@ -3692,22 +3655,18 @@ msgstr "" "удален для экономии места на диске." #: modules/kiwix/manifest.py:23 -#, fuzzy -#| msgid "Offline Wikipedia" msgid "Offline reader" -msgstr "Локальная Википедия" +msgstr "Автономный читатель" #: modules/kiwix/manifest.py:24 -#, fuzzy -#| msgid "Archive name" msgid "Archival" -msgstr "Имя архива" +msgstr "Архив" #: modules/kiwix/manifest.py:26 #, fuzzy #| msgid "Offline Wikipedia" msgid "Wikipedia" -msgstr "Локальная Википедия" +msgstr "Wikipedia" #: modules/kiwix/templates/kiwix-add-package.html:24 #, python-format @@ -3761,10 +3720,8 @@ msgid "Add a new content package" msgstr "Добавьте новый пакет контента" #: modules/kiwix/views.py:76 -#, fuzzy -#| msgid "Content package added." msgid "Content package already exists." -msgstr "Добавлен пакет контента." +msgstr "Пакет содержимого уже существует." #: modules/kiwix/views.py:79 msgid "Failed to add content package." @@ -3858,16 +3815,13 @@ msgid "Obtain" msgstr "Получить" #: modules/letsencrypt/templates/letsencrypt.html:112 -#, fuzzy, python-format -#| msgid "" -#| "No domains have been configured. Configure " -#| "domains to be able to obtain certificates for them." +#, python-format msgid "" "No domains have been configured. Configure " "domains to be able to obtain certificates for them." msgstr "" -"Домены не настроены. Настройте домены, чтобы " -"иметь возможность получать для них сертификаты." +"Нет настроенных доменов. Настройте домены, " +"чтобы иметь возможность получать для них сертификаты." #: modules/letsencrypt/views.py:40 #, python-brace-format @@ -3993,16 +3947,12 @@ msgid "FluffyChat" msgstr "FluffyChat" #: modules/matrixsynapse/manifest.py:101 modules/quassel/manifest.py:54 -#, fuzzy -#| msgid "IRC Chatroom" msgid "Chat room" -msgstr "Чат IRC" +msgstr "Чат комната" #: modules/matrixsynapse/manifest.py:105 -#, fuzzy -#| msgid "Media streaming server" msgid "Matrix server" -msgstr "Сервер потоковой передачи мультимедиа" +msgstr "Matrix сервер" #: modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:15 #: modules/miniflux/templates/miniflux.html:12 @@ -4342,20 +4292,16 @@ msgstr "" "Когда выключено, игроки не могут умереть или получить урон любого рода." #: modules/minetest/manifest.py:49 -#, fuzzy -#| msgid "Updated server." msgid "Game server" -msgstr "Обновленный сервер." +msgstr "Игровой сервер" #: modules/minetest/manifest.py:49 -#, fuzzy -#| msgid "Block Sandbox" msgid "Block sandbox" -msgstr "Песочница" +msgstr "Блокировать песочницу" #: modules/minetest/manifest.py:49 msgid "Platform" -msgstr "" +msgstr "Платформа" #: modules/minetest/templates/minetest.html:17 modules/networks/forms.py:105 #: modules/networks/forms.py:145 @@ -4417,24 +4363,23 @@ msgid "totem" msgstr "totem" #: modules/minidlna/manifest.py:116 -#, fuzzy -#| msgid "Simple Media Server" msgid "Media server" -msgstr "Простой медиа-сервер" +msgstr "Медиа сервер" #: modules/minidlna/manifest.py:116 msgid "Television" -msgstr "" +msgstr "Телевидение" #: modules/minidlna/manifest.py:116 +#, fuzzy msgid "UPnP" -msgstr "" +msgstr "UPnP" #: modules/minidlna/manifest.py:116 #, fuzzy #| msgid "MiniDLNA" msgid "DLNA" -msgstr "MiniDLNA" +msgstr "DLNA" #: modules/minidlna/views.py:33 msgid "Updated media directory" @@ -4448,6 +4393,11 @@ msgid "" "subscribe to your favorite sites and access full article contents within the " "reader itself." msgstr "" +"Miniflux - это веб-инструмент, который объединяет новости и обновления " +"блогов с различных сайтов в один централизованный, удобный для чтения " +"формат. Он имеет простой интерфейс и ориентирован на чтение без отвлекающих " +"факторов. Вы можете подписаться на любимые сайты и получить доступ к полному " +"содержимому статей в самом ридере." #: modules/miniflux/__init__.py:23 msgid "" @@ -4457,159 +4407,143 @@ msgid "" "are several third-party clients as well." msgstr "" +"Среди основных функций - сочетания клавиш для быстрой навигации, " +"полнотекстовый поиск, фильтрация статей, категории и избранное. Благодаря " +"удалению трекеров Miniflux сохраняет конфиденциальность пользователей. " +"Основной интерфейс - веб-интерфейс. Существует также несколько сторонних клиентов." #: modules/miniflux/__init__.py:42 modules/miniflux/manifest.py:10 +#, fuzzy msgid "Miniflux" -msgstr "" +msgstr "Miniflux" #: modules/miniflux/__init__.py:44 modules/ttrss/__init__.py:51 msgid "News Feed Reader" msgstr "Чтение ленты новостей" #: modules/miniflux/forms.py:12 -#, fuzzy -#| msgid "Enter a valid username." msgid "Enter a username for the user." -msgstr "Введите действительное имя пользователя." +msgstr "Введите имя пользователя." #: modules/miniflux/forms.py:16 msgid "Enter a strong password with a minimum of 6 characters." -msgstr "" +msgstr "Введите надежный пароль, состоящий минимум из 6 символов." #: modules/miniflux/forms.py:18 -#, fuzzy -#| msgid "Updating configuration" msgid "Password confirmation" -msgstr "Обновление конфигурации" +msgstr "Подтверждение пароля" #: modules/miniflux/forms.py:20 -#, fuzzy -#| msgid "" -#| "Enter the password for user \"{user}\" to authorize account modifications." msgid "Enter the same password for confirmation." -msgstr "" -"Введите пароль пользователя \"{user}\" для авторизации изменений учетной " -"записи." +msgstr "Введите тот же пароль для подтверждения." #: modules/miniflux/forms.py:31 -#, fuzzy -#| msgid "Password updated" msgid "Passwords do not match." -msgstr "Пароль обновлен" +msgstr "Пароли не совпадают." #: modules/miniflux/manifest.py:18 +#, fuzzy msgid "Fluent Reader Lite" -msgstr "" +msgstr "Fluent Reader Lite" #: modules/miniflux/manifest.py:33 -#, fuzzy -#| msgid "News Feed Reader" msgid "Fluent Reader" -msgstr "Чтение ленты новостей" +msgstr "Беглое чтение" #: modules/miniflux/manifest.py:46 +#, fuzzy msgid "FluxNews" -msgstr "" +msgstr "FluxNews" #: modules/miniflux/manifest.py:61 +#, fuzzy msgid "MiniFlutt" -msgstr "" +msgstr "MiniFlutt" #: modules/miniflux/manifest.py:71 +#, fuzzy msgid "NetNewsWire" -msgstr "" +msgstr "NetNewsWire" #: modules/miniflux/manifest.py:86 msgid "Newsflash" -msgstr "" +msgstr "Свежие новости" #: modules/miniflux/manifest.py:96 -#, fuzzy -#| msgid "Read" msgid "Read You" -msgstr "Читать" +msgstr "Читать далее" #: modules/miniflux/manifest.py:106 msgid "RSS Guard" -msgstr "" +msgstr "RSS Охранник" #: modules/miniflux/manifest.py:138 modules/ttrss/manifest.py:55 -#, fuzzy -#| msgid "News Feed Reader" msgid "Feed reader" -msgstr "Чтение ленты новостей" +msgstr "Устройство для чтения фидов" #: modules/miniflux/manifest.py:138 modules/ttrss/manifest.py:55 msgid "News aggregation" -msgstr "" +msgstr "Агрегация новостей" #: modules/miniflux/manifest.py:138 modules/rssbridge/manifest.py:16 #: modules/ttrss/manifest.py:55 #, fuzzy #| msgid "SSH" msgid "RSS" -msgstr "SSH" +msgstr "RSS" #: modules/miniflux/manifest.py:138 modules/rssbridge/manifest.py:16 #: modules/ttrss/manifest.py:55 +#, fuzzy msgid "ATOM" -msgstr "" +msgstr "ATOM" #: modules/miniflux/templates/miniflux.html:14 msgid "" "Create an admin user to get started. Other users can be created from within " "Miniflux." msgstr "" +"Для начала работы создайте пользователя admin. Другие пользователи могут " +"быть созданы из Miniflux." #: modules/miniflux/templates/miniflux.html:22 #: modules/miniflux/templates/miniflux.html:24 -#, fuzzy -#| msgid "Create User" msgid "Create admin user" -msgstr "Создать пользователя" +msgstr "Создайте пользователя-администратора" #: modules/miniflux/templates/miniflux.html:27 #: modules/miniflux/templates/miniflux.html:29 -#, fuzzy -#| msgid "Set SuperUser Password" msgid "Reset user password" -msgstr "Установить пароль суперпользователя" +msgstr "Сброс пароля пользователя" #: modules/miniflux/views.py:38 -#, fuzzy -#| msgid "Create User" msgid "Create Admin User" -msgstr "Создать пользователя" +msgstr "Создать пользователя-администратора" #: modules/miniflux/views.py:48 -#, fuzzy, python-brace-format -#| msgid "Invalid username: {username}" +#, python-brace-format msgid "Created admin user: {username}" -msgstr "Неверное имя пользователя: {username}" +msgstr "Создан пользователь admin: {username}" #: modules/miniflux/views.py:53 -#, fuzzy, python-brace-format -#| msgid "An error occurred while creating the repository." +#, python-brace-format msgid "An error occurred while creating the user: {error}." -msgstr "Ошибка при создании репозитория." +msgstr "При создании пользователя произошла ошибка: {error}." #: modules/miniflux/views.py:70 -#, fuzzy -#| msgid "Set SuperUser Password" msgid "Reset User Password" -msgstr "Установить пароль суперпользователя" +msgstr "Сброс пароля пользователя" #: modules/miniflux/views.py:80 -#, fuzzy, python-brace-format -#| msgid "Invalid username: {username}" +#, python-brace-format msgid "Password reset for user: {username}" -msgstr "Неверное имя пользователя: {username}" +msgstr "Сброс пароля для пользователя: {username}" #: modules/miniflux/views.py:85 -#, fuzzy, python-brace-format -#| msgid "An error occurred during configuration." +#, python-brace-format msgid "An error occurred during password reset: {error}." -msgstr "Произошла ошибка во время настройки." +msgstr "Во время сброса пароля произошла ошибка: {error}." #: modules/mumble/__init__.py:25 msgid "" @@ -4683,7 +4617,7 @@ msgstr "Mumla" #: modules/mumble/manifest.py:67 msgid "Group conference" -msgstr "" +msgstr "Групповая конференция" #: modules/mumble/manifest.py:67 modules/radicale/manifest.py:91 #: modules/shadowsocks/forms.py:24 @@ -4721,12 +4655,12 @@ msgstr "Службы имён" #: modules/names/__init__.py:171 msgid "Package systemd-resolved is installed" -msgstr "" +msgstr "Пакет systemd-resolved установлен" #: modules/names/__init__.py:195 #, python-brace-format msgid "Resolve domain name: {domain}" -msgstr "" +msgstr "Разрешить доменное имя: {domain}" #: modules/names/components.py:14 msgid "All" @@ -4743,10 +4677,11 @@ msgstr "Sеcure Shell" #: modules/names/forms.py:21 msgid "Use DNS-over-TLS for resolving domains (global preference)" msgstr "" +"Использовать DNS-over-TLS для разрешения доменов (глобальное предпочтение)" #: modules/names/forms.py:49 msgid "Use DNSSEC when resolving domains (global preference)" -msgstr "" +msgstr "Использовать DNSSEC при разрешении доменов (глобальное предпочтение)" #: modules/names/forms.py:84 msgid "Hostname" @@ -4797,28 +4732,24 @@ msgstr "Да" #: modules/names/resolved.py:92 modules/networks/forms.py:29 #: modules/networks/views.py:124 msgid "opportunistic" -msgstr "" +msgstr "оппортунистический" #: modules/names/resolved.py:93 modules/names/resolved.py:103 #: modules/networks/forms.py:30 modules/networks/views.py:123 -#, fuzzy -#| msgid "Dino" msgid "no" -msgstr "Dino" +msgstr "нет" #: modules/names/resolved.py:102 msgid "allow-downgrade" -msgstr "" +msgstr "разрешить обновление" #: modules/names/resolved.py:110 -#, fuzzy -#| msgid "Get Support" msgid "supported" -msgstr "Получить поддержку" +msgstr "поддерживается" #: modules/names/resolved.py:110 msgid "unsupported" -msgstr "" +msgstr "не поддерживается" #: modules/names/templates/names.html:12 msgid "Domains" @@ -4830,66 +4761,59 @@ msgstr "Службы" #: modules/names/templates/names.html:56 msgid "Resolver Status" -msgstr "" +msgstr "Состояние резольвера" #: modules/names/templates/names.html:66 msgid "Global" -msgstr "" +msgstr "Глобальный" #: modules/names/templates/names.html:68 msgid "Link" -msgstr "" +msgstr "Ссылка" #: modules/names/templates/names.html:73 #: modules/networks/templates/connection_show.html:264 +#, fuzzy msgid "DNS-over-TLS" -msgstr "" +msgstr "DNS-over-TLS" #: modules/names/templates/names.html:77 #, fuzzy #| msgid "Enable DNSSEC" msgid "DNSSEC" -msgstr "Включить DNSSEC" +msgstr "DNSSEC" #: modules/names/templates/names.html:82 -#, fuzzy -#| msgid "Second DNS Server" msgid "Current DNS Server" -msgstr "Второй DNS-сервер" +msgstr "Текущий сервер DNS" #: modules/names/templates/names.html:88 -#, fuzzy -#| msgid "DNS Server" msgid "DNS Servers" -msgstr "DNS-сервер" +msgstr "DNS Сервер" #: modules/names/templates/names.html:98 -#, fuzzy -#| msgid "DNS Server" msgid "Fallback DNS Servers" -msgstr "DNS-сервер" +msgstr "Резервные серверы DNS" #: modules/names/templates/names.html:112 msgid "" "systemd-resolved package is not installed. Install it for additional " "functionality." msgstr "" +"Пакет systemd-resolved не установлен. Установите его для получения " +"дополнительной функциональности." #: modules/names/templates/names.html:121 templates/setup.html:66 msgid "Install" msgstr "Установка" #: modules/names/templates/names.html:126 -#, fuzzy -#| msgid "Error during installation" msgid "Error retrieving status:" -msgstr "Ошибка во время установки" +msgstr "Ошибка при получении статуса:" #: modules/names/views.py:81 -#, fuzzy -#| msgid "Hostname" msgid "Set Hostname" -msgstr "Имя хоста" +msgstr "Установите имя хоста" #: modules/names/views.py:99 #, python-brace-format @@ -4897,10 +4821,8 @@ msgid "Error setting hostname: {exception}" msgstr "Ошибка параметра hostname: {exception}" #: modules/names/views.py:115 -#, fuzzy -#| msgid "Domain Name" msgid "Set Domain Name" -msgstr "Доменное имя" +msgstr "Установить доменное имя" #: modules/names/views.py:133 #, python-brace-format @@ -4963,7 +4885,7 @@ msgstr "" #: modules/networks/forms.py:56 msgid "Use DNS-over-TLS" -msgstr "" +msgstr "Использовать DNS-over-TLS" #: modules/networks/forms.py:90 msgid "IPv4 Addressing Method" @@ -5063,16 +4985,12 @@ msgstr "" "подключение к Интернету из этой сети" #: modules/networks/forms.py:136 -#, fuzzy -#| msgid "" -#| "Automatic: Configure automatically, use Internet connection from this " -#| "network" msgid "" "Link-local: Configure automatically to use an address that is only relevant " "to this network." msgstr "" -"Автоматически: Настроить автоматически, использовать подключение к Интернету " -"из этой сети" +"Link-local: Настройте автоматическое использование адреса, относящегося " +"только к данной сети." #: modules/networks/forms.py:141 msgid "Ignore: Ignore this addressing method" @@ -5080,7 +4998,7 @@ msgstr "Игнорировать: Игнорировать этот метод #: modules/networks/forms.py:142 msgid "Disabled: Disable IPv6 for this connection" -msgstr "" +msgstr "Disabled (Отключено): Отключить IPv6 для этого соединения" #: modules/networks/forms.py:147 msgid "Prefix" @@ -5617,10 +5535,8 @@ msgid "Edit Connection" msgstr "Редактирование подключения" #: modules/networks/templates/connections_fields.html:24 -#, fuzzy -#| msgid "Generic" msgid "General" -msgstr "Универсальный" +msgstr "Общий" #: modules/networks/templates/connections_fields_pppoe.html:16 network.py:30 msgid "PPPoE" @@ -5857,29 +5773,24 @@ msgstr "" #: modules/networks/templates/wifi_scan.html:14 msgid "No Wi-Fi device detected." -msgstr "" +msgstr "Устройство Wi-Fi не обнаружено." #: modules/networks/templates/wifi_scan.html:21 -#, fuzzy, python-format -#| msgid "Delete %(username)s" +#, python-format msgid "Device: %(interface_name)s" -msgstr "Удаление %(username)s" +msgstr "Устройство: %(interface_name)s" #: modules/networks/templates/wifi_scan.html:27 -#, fuzzy -#| msgid "Last Connected Time" msgid "Last scanned: " -msgstr "Время последнего подключения" +msgstr "Последнее сканирование: " #: modules/networks/templates/wifi_scan.html:31 msgid "never" -msgstr "" +msgstr "никогда" #: modules/networks/templates/wifi_scan.html:52 -#, fuzzy -#| msgid "Wi-Fi network not found" msgid "No Wi-Fi networks found." -msgstr "Сеть Wi-Fi не найдена" +msgstr "Не найдено ни одной сети Wi-Fi." #: modules/networks/views.py:27 msgid "disabled" @@ -5902,14 +5813,13 @@ msgid "link-local" msgstr "локальная ссылка" #: modules/networks/views.py:32 +#, fuzzy msgid "dhcp" -msgstr "" +msgstr "dhcp" #: modules/networks/views.py:33 -#, fuzzy -#| msgid "Ignore" msgid "ignore" -msgstr "Игнорировать" +msgstr "игнорировать" #: modules/networks/views.py:40 msgid "unmanaged" @@ -6061,10 +5971,8 @@ msgid "mesh point" msgstr "точка mesh" #: modules/networks/views.py:122 -#, fuzzy -#| msgid "Default" msgid "default" -msgstr "По умолчанию" +msgstr "по умолчанию" #: modules/networks/views.py:155 msgid "Cannot show connection: Connection not found." @@ -6202,22 +6110,16 @@ msgid "Administrator password" msgstr "Пароль администратора" #: 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 "" -"Необязательно. 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." +"Опционально. Установите новый пароль для учетной записи администратора " +"Nextcloud (nextcloud-admin). Пароль не может быть обычным, а минимальная " +"требуемая длина составляет 10 символов. Оставьте это поле " +"пустым, чтобы сохранить текущий пароль." #: modules/nextcloud/forms.py:41 msgid "Default phone region" @@ -6232,20 +6134,16 @@ msgstr "" "настройках профиля без кода страны." #: modules/nextcloud/manifest.py:56 modules/syncthing/manifest.py:58 -#, fuzzy -#| msgid "Filesystem" msgid "File sync" -msgstr "Файловая система" +msgstr "Синхронизация файлов" #: modules/nextcloud/manifest.py:56 modules/sharing/__init__.py:34 msgid "Sharing" msgstr "Общий доступ" #: modules/nextcloud/manifest.py:56 -#, fuzzy -#| msgid "Group Share" msgid "Groupware" -msgstr "Групповой ресурс" +msgstr "Групповое ПО" #: modules/nextcloud/views.py:53 msgid "Password update failed. Please choose a stronger password." @@ -6294,16 +6192,12 @@ msgid "Tunnelblick" msgstr "Tunnelblick" #: modules/openvpn/manifest.py:60 modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "DNS server" msgid "VPN server" -msgstr "DNS-сервер" +msgstr "VPN сервер" #: modules/openvpn/manifest.py:60 modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "Removable Media" msgid "Remote access" -msgstr "Сменные носители" +msgstr "Удаленный доступ" #: modules/openvpn/templates/openvpn.html:12 msgid "Profile" @@ -6673,7 +6567,7 @@ msgstr "" #: modules/privacy/forms.py:28 msgid "Allow using fallback DNS servers" -msgstr "" +msgstr "Разрешите использовать резервные DNS серверы" #: modules/privacy/forms.py:30 msgid "" @@ -6682,6 +6576,10 @@ msgid "" "available. Can be disabled in most cases if network connectivity is stable " "and reliable." msgstr "" +"Использование известных публичных DNS-серверов для разрешения доменных имен " +"в необычных ситуациях, когда DNS-серверы неизвестны, но доступно подключение " +"к Интернету. В большинстве случаев может быть отключено, если подключение к " +"сети стабильно и надежно." #: modules/privoxy/__init__.py:25 msgid "" @@ -6695,13 +6593,7 @@ msgstr "" "интернете. " #: modules/privoxy/__init__.py:30 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use Privoxy by modifying your browser proxy settings to your " -#| "{box_name} hostname (or IP address) with port 8118. While using Privoxy, " -#| "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." +#, python-brace-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "{box_name} hostname (or IP address) with port 8118. Only connections from " @@ -6711,10 +6603,10 @@ msgid "" "p\">http://p.p." 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://config.privoxy.org/ или http://p.p." #: modules/privoxy/__init__.py:53 @@ -6732,20 +6624,16 @@ msgstr "Доступ к {url} с прокси {proxy} на tcp{kind}" #: modules/privoxy/manifest.py:10 msgid "Ad blocker" -msgstr "" +msgstr "Блокировщик рекламы" #: modules/privoxy/manifest.py:10 modules/shadowsocks/manifest.py:18 #: modules/torproxy/manifest.py:55 -#, fuzzy -#| msgid "Gobby Server" msgid "Proxy server" -msgstr "Сервер Gobby" +msgstr "Прокси сервер" #: modules/privoxy/manifest.py:10 modules/samba/manifest.py:90 -#, fuzzy -#| msgid "Local Network Domain" msgid "Local network" -msgstr "Домен локальной сети" +msgstr "Локальная сеть" #: modules/quassel/__init__.py:24 #, python-brace-format @@ -6789,8 +6677,9 @@ msgid "Quasseldroid" msgstr "Quasseldroid" #: modules/quassel/manifest.py:54 +#, fuzzy msgid "IRC" -msgstr "" +msgstr "IRC" #: modules/radicale/__init__.py:25 #, python-brace-format @@ -6897,22 +6786,22 @@ msgstr "" "address>." #: modules/radicale/manifest.py:91 -#, fuzzy -#| msgid "GNOME Calendar" msgid "Calendar" -msgstr "GNOME календарь" +msgstr "Календарь" #: modules/radicale/manifest.py:91 modules/roundcube/manifest.py:23 msgid "Contacts" -msgstr "" +msgstr "Контакты" #: modules/radicale/manifest.py:91 +#, fuzzy msgid "CalDAV" -msgstr "" +msgstr "CalDAV" #: modules/radicale/manifest.py:91 +#, fuzzy msgid "CardDAV" -msgstr "" +msgstr "CardDAV" #: modules/radicale/views.py:32 msgid "Access rights configuration updated" @@ -6986,7 +6875,7 @@ msgstr "" #, fuzzy #| msgid "FairEmail" msgid "Email" -msgstr "FairEmail" +msgstr "Email" #: modules/rssbridge/__init__.py:21 msgid "" @@ -7007,19 +6896,16 @@ msgstr "" "фидов." #: modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Tiny Tiny RSS to " -#| "follow various websites. When adding a feed, enable authentication and " -#| "use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Tiny Tiny RSS to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"Вы можете использовать RSS-мостик с Tiny Tiny RSS, чтобы следить за различными сайтами. При добавлении ленты включите " -"аутентификацию и используйте свои учетные данные {box_name}." +"Вы можете использовать RSS-Bridge с Miniflux " +"или Tiny Tiny RSS, чтобы следить за различными " +"сайтами. При добавлении ленты включите аутентификацию и используйте свои " +"учетные данные {box_name}." #: modules/rssbridge/__init__.py:48 modules/ttrss/__init__.py:47 msgid "Read and subscribe to news feeds" @@ -7042,14 +6928,12 @@ msgid "Allow this application to be used by anyone who can reach it." msgstr "Разрешите использовать это приложение всем, у кого есть доступ к нему." #: modules/rssbridge/manifest.py:16 -#, fuzzy -#| msgid "RSS Feed Generator" msgid "Feed generator" -msgstr "Генератор RSS-каналов" +msgstr "Генератор питания" #: modules/rssbridge/manifest.py:16 msgid "News" -msgstr "" +msgstr "Новости" #: modules/samba/__init__.py:23 msgid "" @@ -7129,22 +7013,16 @@ msgid "Dolphin" msgstr "Dolphin" #: modules/samba/manifest.py:91 -#, fuzzy -#| msgid "Network Interface" msgid "Network drive" -msgstr "Сетевой интерфейс" +msgstr "Сетевой диск" #: modules/samba/manifest.py:92 -#, fuzzy -#| msgid "Media streaming server" msgid "Media storage" -msgstr "Сервер потоковой передачи мультимедиа" +msgstr "Хранение носителей" #: modules/samba/manifest.py:93 -#, fuzzy -#| msgid "Backups" msgid "Backup storage" -msgstr "Резервные копии" +msgstr "Резервное хранение" #: modules/samba/templates/samba.html:20 msgid "Shares" @@ -7288,14 +7166,12 @@ msgid "Strict" msgstr "Строгий" #: modules/searx/manifest.py:17 -#, fuzzy -#| msgid "Web Search" msgid "Web search" -msgstr "Веб-поиск" +msgstr "Веб поиск" #: modules/searx/manifest.py:17 msgid "Metasearch Engine" -msgstr "" +msgstr "Метапоисковая система" #: modules/security/forms.py:13 msgid "Fail2Ban (recommended)" @@ -7452,13 +7328,11 @@ msgstr "Shaarlier" #: modules/shaarli/manifest.py:34 msgid "Link blog" -msgstr "" +msgstr "Блог по ссылке" #: modules/shaarli/manifest.py:34 -#, fuzzy -#| msgid "in use" msgid "Single user" -msgstr "в использовании" +msgstr "Один пользователь" #: modules/shadowsocks/__init__.py:18 modules/shadowsocksserver/__init__.py:18 msgid "" @@ -7529,22 +7403,18 @@ msgid "Encryption method. Must match setting on server." msgstr "Метод шифрования. Должен соответствовать параметру на сервере." #: modules/shadowsocks/manifest.py:20 modules/shadowsocksserver/manifest.py:19 -#, fuzzy -#| msgid "Encryption" msgid "Encrypted tunnel" -msgstr "Шифрование" +msgstr "Зашифрованный туннель" #: modules/shadowsocks/manifest.py:21 -#, fuzzy -#| msgid "Endpoint" msgid "Entry point" -msgstr "Конечная точка" +msgstr "Точка входа" #: modules/shadowsocks/manifest.py:22 modules/shadowsocksserver/manifest.py:21 #, fuzzy #| msgid "Shadowsocks Client" msgid "Shadowsocks" -msgstr "Клиент Shadowsocks" +msgstr "Shadowsocks" #: modules/shadowsocksserver/__init__.py:26 #, python-brace-format @@ -7580,10 +7450,8 @@ msgid "Encryption method. Clients must use the same setting." msgstr "Метод шифрования. Клиенты должны использовать те же настройки." #: modules/shadowsocksserver/manifest.py:20 -#, fuzzy -#| msgid "Endpoint" msgid "Exit point" -msgstr "Конечная точка" +msgstr "Место выхода" #: modules/sharing/__init__.py:17 #, python-brace-format @@ -7643,10 +7511,8 @@ msgstr "" "группы" #: modules/sharing/manifest.py:19 modules/zoph/manifest.py:26 -#, fuzzy -#| msgid "Sharing" msgid "Web sharing" -msgstr "Общий доступ" +msgstr "Совместное использование веб-страниц" #: modules/sharing/templates/sharing.html:18 #: modules/sharing/templates/sharing.html:21 @@ -8158,7 +8024,7 @@ msgstr "Перейти к питанию" #: modules/storage/__init__.py:447 modules/storage/tests/test_storage.py:396 msgid "grub package is configured" -msgstr "" +msgstr "Пакет grub сконфигурирован" #: modules/storage/forms.py:63 msgid "Invalid directory name." @@ -8327,6 +8193,11 @@ msgid "" "several short notes called Tiddlers and link them together into a dense " "graph." msgstr "" +"TiddlyWiki - это интерактивное приложение, которое полностью запускается в " +"веб-браузере. Каждая вики-страница представляет собой автономный HTML-файл, " +"хранящийся на вашем {box_name}. Вместо того чтобы писать длинные вики-" +"страницы, TiddlyWiki предлагает вам написать несколько коротких заметок, " +"называемых Tiddlers, и связать их вместе в плотный граф." #: modules/tiddlywiki/__init__.py:30 msgid "" @@ -8336,6 +8207,11 @@ msgid "" "TiddlyWiki. Encrypting individual tiddlers or password-protecting a wiki " "file is possible from within the application." msgstr "" +"Это универсальное приложение с широким спектром возможностей использования - " +"нелинейный блокнот, веб-сайт, персональная база знаний, система управления " +"задачами и проектами, личный дневник и т.д. Плагины могут расширять " +"функциональность TiddlyWiki. Шифрование отдельных тиддлеров или защита " +"паролем вики-файла возможны прямо из приложения." #: modules/tiddlywiki/__init__.py:37 #, python-brace-format @@ -8343,48 +8219,55 @@ msgid "" "TiddlyWiki is downloaded from {box_name} website and not from Debian. Wikis " "need to be upgraded to newer version manually." msgstr "" +"TiddlyWiki загружается с сайта {box_name}, а не из Debian. Вики необходимо " +"обновлять до новой версии вручную." #: modules/tiddlywiki/__init__.py:46 msgid "Create a new wiki or upload your existing wiki file to get started." msgstr "" +"Создайте новую вики или загрузите существующий файл вики, чтобы начать " +"работу." #: modules/tiddlywiki/__init__.py:64 modules/tiddlywiki/manifest.py:9 +#, fuzzy msgid "TiddlyWiki" -msgstr "" +msgstr "TiddlyWiki" #: modules/tiddlywiki/__init__.py:66 msgid "Non-linear Notebooks" -msgstr "" +msgstr "Нелинейные блокноты" #: modules/tiddlywiki/forms.py:32 msgid "A TiddlyWiki file with .html file extension" -msgstr "" +msgstr "Файл TiddlyWiki с расширением .html" #: modules/tiddlywiki/forms.py:35 msgid "TiddlyWiki files must be in HTML format" -msgstr "" +msgstr "Файлы TiddlyWiki должны быть в формате HTML" #: modules/tiddlywiki/forms.py:37 msgid "Upload an existing TiddlyWiki file from this computer." -msgstr "" +msgstr "Загрузите существующий файл TiddlyWiki с этого компьютера." #: modules/tiddlywiki/manifest.py:22 msgid "Journal" -msgstr "" +msgstr "Журнал" #: modules/tiddlywiki/manifest.py:23 msgid "Digital garden" -msgstr "" +msgstr "Цифровой сад" #: modules/tiddlywiki/manifest.py:24 msgid "Zettelkasten" -msgstr "" +msgstr "Шкафы для застройки" #: modules/tiddlywiki/templates/tiddlywiki_delete.html:18 msgid "" "Hint: You can download a copy of this wiki from within " "TiddlyWiki before deleting it." msgstr "" +"Подсказка: Вы можете загрузить копию этой вики из " +"TiddlyWiki, прежде чем удалять ее." #: modules/tor/__init__.py:33 modules/torproxy/__init__.py:29 msgid "" @@ -8542,10 +8425,8 @@ msgid "Orbot: Proxy with Tor" msgstr "Orbot: Прокси с Tor" #: modules/tor/manifest.py:57 -#, fuzzy -#| msgid "Onion Service" msgid "Onion services" -msgstr "Onion сервис" +msgstr "Луковые сервисы" #: modules/tor/manifest.py:58 msgid "Relay" @@ -8757,16 +8638,16 @@ msgid "FreedomBox Updated" msgstr "FreedomBox обновлён" #: modules/upgrades/__init__.py:138 -#, fuzzy -#| msgid "Software Update" msgid "Run software update manually" -msgstr "Обновление программного обеспечения" +msgstr "Запустите обновление программного обеспечения вручную" #: modules/upgrades/__init__.py:140 msgid "" "Automatic software update runs daily by default. For the first time, " "manually run it now." msgstr "" +"По умолчанию автоматическое обновление программного обеспечения выполняется " +"ежедневно. В первый раз запустите его вручную." #: modules/upgrades/__init__.py:242 msgid "Could not start distribution update" @@ -8795,7 +8676,7 @@ msgstr "" #: modules/upgrades/__init__.py:350 msgid "Check for package holds" -msgstr "" +msgstr "Проверьте, не задерживается ли посылка" #: modules/upgrades/forms.py:15 msgid "Enable auto-update" @@ -9081,22 +8962,21 @@ msgstr "" "игнорироваться." #: modules/users/forms.py:252 -#, fuzzy -#| msgid "Delete User" msgid "Delete user" -msgstr "Удаление пользователя" +msgstr "Удалить пользователя" #: modules/users/forms.py:254 msgid "" "Deleting the user account will also remove all the files related to the " "user. Deleting files can be avoided by setting the user account as inactive." msgstr "" +"Удаление учетной записи пользователя также приведет к удалению всех файлов, " +"связанных с ним. Удаления файлов можно избежать, установив учетную запись " +"пользователя как неактивную." #: modules/users/forms.py:305 -#, fuzzy -#| msgid "Failed to add user to group." msgid "Failed to delete user." -msgstr "Не удалось добавить пользователя в группу." +msgstr "Не удалось удалить пользователя." #: modules/users/forms.py:320 msgid "Renaming LDAP user failed." @@ -9223,10 +9103,9 @@ msgid "Save Changes" msgstr "Сохранить изменения" #: modules/users/templates/users_update.html:41 -#, fuzzy, python-format -#| msgid "Delete user %(username)s permanently?" +#, python-format msgid "Delete user %(username)s and all the user's files?" -msgstr "Окончательно удалить пользователя %(username)s?" +msgstr "Удалить пользователя %(username)s и все его файлы?" #: modules/users/templates/users_update.html:46 templates/messages.html:11 msgid "Close" @@ -9237,12 +9116,13 @@ msgid "" "Deleting a user account also removes all the files user's home directory. If " "you wish to keep these files, disable the user account instead." msgstr "" +"При удалении учетной записи пользователя также удаляются все файлы его " +"домашнего каталога. Если вы хотите сохранить эти файлы, отключите учетную " +"запись пользователя." #: modules/users/templates/users_update.html:59 -#, fuzzy -#| msgid "Delete files" msgid "Delete user and files" -msgstr "Удалить файлы" +msgstr "Удаление пользователя и файлов" #: modules/users/templates/users_update.html:62 msgid "Cancel" @@ -9263,10 +9143,9 @@ msgid "Edit User" msgstr "Редактирование пользователя" #: modules/users/views.py:111 -#, fuzzy, python-format -#| msgid "User %(username)s created." +#, python-format msgid "User %(username)s deleted." -msgstr "Пользователь %(username)s создан." +msgstr "Пользователь %(username)s удален." #: modules/users/views.py:130 msgid "Change Password" @@ -9396,10 +9275,8 @@ msgstr "" "трафик." #: modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "IRC Client" msgid "VPN client" -msgstr "IRC-клиент" +msgstr "VPN клиент" #: modules/wireguard/templates/wireguard.html:10 msgid "As a Server" @@ -9685,7 +9562,7 @@ msgstr "" #: modules/wordpress/manifest.py:26 msgid "Content management system" -msgstr "" +msgstr "Система управления контентом" #: modules/zoph/__init__.py:24 #, python-brace-format @@ -9743,13 +9620,11 @@ msgstr "" #: modules/zoph/manifest.py:26 msgid "Photo" -msgstr "" +msgstr "Фото" #: modules/zoph/manifest.py:26 -#, fuzzy -#| msgid "Photo Organizer" msgid "Organizer" -msgstr "Организатор фотографий" +msgstr "Органайзер" #: modules/zoph/templates/zoph-pre-setup.html:15 #: modules/zoph/templates/zoph-pre-setup.html:28 @@ -9770,10 +9645,9 @@ msgid "Generic" msgstr "Универсальный" #: operation.py:120 -#, fuzzy, python-brace-format -#| msgid "Error: {name}: {exception_message}" +#, python-brace-format msgid "Error: {name}: {exception}" -msgstr "Ошибка: {name}: {exception_message}" +msgstr "Ошибка: {name}: {exception}" #: operation.py:123 #, python-brace-format @@ -9825,22 +9699,19 @@ msgid "Updating app" msgstr "Обновление приложения" #: setup.py:78 -#, fuzzy, python-brace-format -#| msgid "Error installing app: {error}" +#, python-brace-format msgid "Error installing app: {exception}" -msgstr "Ошибка при установке приложения: {error}" +msgstr "Ошибка при установке приложения: {exception}" #: setup.py:80 -#, fuzzy, python-brace-format -#| msgid "Error repairing app: {error}" +#, python-brace-format msgid "Error repairing app: {exception}" -msgstr "Ошибка при восстановлении приложения: {error}" +msgstr "Ошибка при восстановлении приложения: {exception}" #: setup.py:82 -#, fuzzy, python-brace-format -#| msgid "Error updating app: {error}" +#, python-brace-format msgid "Error updating app: {exception}" -msgstr "Ошибка обновления приложения: {error}" +msgstr "Ошибка обновления приложения: {exception}" #: setup.py:85 msgid "App installed." @@ -9959,10 +9830,8 @@ msgid "Service %(service_name)s is not running." msgstr "Служба %(service_name)s не запущена." #: templates/apps.html:29 -#, fuzzy -#| msgid "Search the web" msgid "Search with tags" -msgstr "Поиск в интернете" +msgstr "Поиск по тегам" #: templates/base.html:31 msgid "" From b3f82974f08056edf6f9d9d974a33237c802e375 Mon Sep 17 00:00:00 2001 From: Veiko Aasa Date: Thu, 5 Dec 2024 12:39:40 +0200 Subject: [PATCH 19/82] tests: functional: Don't try disable app after tests if app was not installed Fixes an issue where app tests teardown fails if app installation fails or app is not available for distribution. Tests: - On Debian Bookworm, all miniflux functional tests are skipped and there are no errors. - After running gitweb metadata functional test, the app is disabled. Signed-off-by: Veiko Aasa Reviewed-by: Sunil Mohan Adapa --- plinth/tests/functional/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plinth/tests/functional/__init__.py b/plinth/tests/functional/__init__.py index 7b109b9d8..9a5b6394f 100644 --- a/plinth/tests/functional/__init__.py +++ b/plinth/tests/functional/__init__.py @@ -763,7 +763,8 @@ class BaseAppTests: def fixture_disable_after_tests(self, session_browser): """Disable the app after running tests.""" yield - if self.disable_after_tests: + if self.disable_after_tests and is_installed(session_browser, + self.app_name): app_disable(session_browser, self.app_name) @pytest.fixture(autouse=True, name='background') From 9d384fefe5959d96501c3629019090043bc3f336 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Fri, 6 Dec 2024 02:59:47 +0000 Subject: [PATCH 20/82] Translated using Weblate (Russian) Currently translated at 98.1% (1742 of 1775 strings) --- plinth/locale/ru/LC_MESSAGES/django.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plinth/locale/ru/LC_MESSAGES/django.po b/plinth/locale/ru/LC_MESSAGES/django.po index 0ec1932be..4b364cd30 100644 --- a/plinth/locale/ru/LC_MESSAGES/django.po +++ b/plinth/locale/ru/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-12-03 05:00+0000\n" -"Last-Translator: gfbdrgng \n" +"PO-Revision-Date: 2024-12-06 03:00+0000\n" +"Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Russian \n" "Language: ru\n" @@ -2068,9 +2068,9 @@ msgid "" "like username@%(domain_name)s. You can setup your domain on the " "system Name Services page." msgstr "" -"Домен вашего XMPP-сервера установлен на %(имя_домена)s. " +"Домен вашего XMPP-сервера установлен на %(domain_name)s. " "Идентификаторы пользователей будут выглядеть как имя " -"пользователя@%(имя_домена)s. Вы можете настроить свой домен на странице " +"пользователя@%(domain_name)s. Вы можете настроить свой домен на странице " "системы Name Services." #: modules/ejabberd/templates/ejabberd.html:25 From cc5c7cdf8d1e403000cf0bd1cb6ab05ebb5a6007 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Fri, 6 Dec 2024 03:12:48 +0000 Subject: [PATCH 21/82] Translated using Weblate (Russian) Currently translated at 98.1% (1742 of 1775 strings) --- plinth/locale/ru/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plinth/locale/ru/LC_MESSAGES/django.po b/plinth/locale/ru/LC_MESSAGES/django.po index 4b364cd30..f0beb2076 100644 --- a/plinth/locale/ru/LC_MESSAGES/django.po +++ b/plinth/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-18 20:13-0500\n" -"PO-Revision-Date: 2024-12-06 03:00+0000\n" +"PO-Revision-Date: 2024-12-06 03:13+0000\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Russian \n" @@ -2419,7 +2419,7 @@ msgstr "Вики-сайты отсутствуют." #: modules/tiddlywiki/templates/tiddlywiki_configure.html:36 #, python-format msgid "Go to wiki %(wiki)s" -msgstr "Перейти к вики %(вики)" +msgstr "Перейти к вики %(wiki)s" #: modules/featherwiki/templates/featherwiki_configure.html:43 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:43 From 41675eec3919ff86b4176dd9ea82babf0dd50130 Mon Sep 17 00:00:00 2001 From: Veiko Aasa Date: Fri, 6 Dec 2024 13:54:51 +0200 Subject: [PATCH 22/82] tests: functional: Fix app installation test skipped on slow machines Fixes an issue where after clicking an app install button (that disables the button), the app uninstall test is skipped because "App not available in distribution". Wait until the app install submit button is not present on the page after clicking the install button. Test performed: - Increased sleep time to 10s in SetupView. The sharing app uninstall functional test pass. Signed-off-by: Veiko Aasa [sunil: Use wait_for_page_update() instead of eventually] Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa --- plinth/tests/functional/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plinth/tests/functional/__init__.py b/plinth/tests/functional/__init__.py index 9a5b6394f..9d4fe828d 100644 --- a/plinth/tests/functional/__init__.py +++ b/plinth/tests/functional/__init__.py @@ -427,7 +427,8 @@ def install(browser, app_name): f'App {app_name} is not available in distribution') pytest.skip('App not available in distribution') else: - install_button.click() + with wait_for_page_update(browser): + install_button.click() else: break From 85b6e00001c1b848c93e559927d38425098d9a42 Mon Sep 17 00:00:00 2001 From: Veiko Aasa Date: Thu, 5 Dec 2024 12:32:32 +0200 Subject: [PATCH 23/82] deluge: Fix app installation on Debian testing Closes: #2322. On Debian stable, mark deluge app as not available because deluge-web is not working in this distribution. - Default deluged configuration directory location changed. I didn't do migration from the old location because deluge app hasn't been working on Debian stable. - Make deluge-web systemd service start after deluged service to prevent Connection Manager popup in deluge-web after system reboot. Tests performed: - On Debian stable: - Deluge app is not installable from the app page. - All functional tests are skipped. - On Debian testing: - All tests pass. - After reboot, deluge-web service started after deluge service and there is no Connection Manager popup in deluge web UI. - Changing torrent download directory works. Signed-off-by: Veiko Aasa [sunil: Add type signature to an overridden method] Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa --- plinth/modules/deluge/__init__.py | 19 +++- plinth/modules/deluge/manifest.py | 2 +- plinth/modules/deluge/privileged.py | 7 +- .../modules/deluge/tests/test_functional.py | 88 ++++++------------- 4 files changed, 48 insertions(+), 68 deletions(-) diff --git a/plinth/modules/deluge/__init__.py b/plinth/modules/deluge/__init__.py index 9772fcf19..004b30bf6 100644 --- a/plinth/modules/deluge/__init__.py +++ b/plinth/modules/deluge/__init__.py @@ -11,6 +11,7 @@ from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import (Firewall, FirewallLocalProtection) +from plinth.modules.upgrades import get_current_release from plinth.modules.users import add_user_to_share_group from plinth.modules.users.components import UsersAndGroups from plinth.package import Packages @@ -26,12 +27,26 @@ _description = [ SYSTEM_USER = 'debian-deluged' +class DelugePackages(Packages): + """Mark deluge app as not available in Debian Bookworm. + + deluge-web is broken in Debian Bookworm. Related bug report: + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031593 + """ + + def has_unavailable_packages(self) -> bool | None: + if get_current_release()[1] == 'bookworm': + return True + + return super().has_unavailable_packages() + + class DelugeApp(app_module.App): """FreedomBox app for Deluge.""" app_id = 'deluge' - _version = 8 + _version = 9 def __init__(self) -> None: """Create components for the app.""" @@ -64,7 +79,7 @@ class DelugeApp(app_module.App): allowed_groups=list(groups)) self.add(shortcut) - packages = Packages('packages-deluge', ['deluged', 'deluge-web']) + packages = DelugePackages('packages-deluge', ['deluged', 'deluge-web']) self.add(packages) dropin_configs = DropinConfigs( diff --git a/plinth/modules/deluge/manifest.py b/plinth/modules/deluge/manifest.py index c3d4b0bbf..2f1bd54a6 100644 --- a/plinth/modules/deluge/manifest.py +++ b/plinth/modules/deluge/manifest.py @@ -13,7 +13,7 @@ clients = [{ backup = { 'config': { - 'directories': ['/var/lib/deluged/.config'] + 'directories': ['/var/lib/deluged/config'] }, 'services': ['deluged', 'deluge-web'] } diff --git a/plinth/modules/deluge/privileged.py b/plinth/modules/deluge/privileged.py index 59a6fe891..48dd72ffe 100644 --- a/plinth/modules/deluge/privileged.py +++ b/plinth/modules/deluge/privileged.py @@ -13,10 +13,10 @@ from plinth.actions import privileged from plinth.modules.deluge.utils import Config DELUGED_DEFAULT_FILE = '/etc/default/deluged' -DELUGE_CONF_DIR = pathlib.Path('/var/lib/deluged/.config/deluge/') +DELUGE_CONF_DIR = pathlib.Path('/var/lib/deluged/config/') DELUGE_WEB_SYSTEMD_SERVICE_PATH = '/etc/systemd/system/deluge-web.service' -DELUGE_WEB_SYSTEMD_SERVICE = ''' +DELUGE_WEB_SYSTEMD_SERVICE = f''' # # This file is managed and overwritten by Plinth. If you wish to edit # it, disable Deluge in Plinth, remove this file and manage it manually. @@ -25,9 +25,10 @@ DELUGE_WEB_SYSTEMD_SERVICE = ''' Description=Deluge Web Interface Documentation=man:deluge-web(1) After=network.target +After=deluged.service [Service] -ExecStart=bash -c "/usr/bin/deluge-web --base=deluge $(/usr/bin/deluge-web --version | grep deluge-web | cut -f2 -d' ' | grep -q '^1.' && echo '' || echo '--do-not-daemonize')" +ExecStart=/usr/bin/deluge-web --config {DELUGE_CONF_DIR} --base=deluge --do-not-daemonize Restart=on-failure User=debian-deluged Group=debian-deluged diff --git a/plinth/modules/deluge/tests/test_functional.py b/plinth/modules/deluge/tests/test_functional.py index 5261170fd..d6918fa0a 100644 --- a/plinth/modules/deluge/tests/test_functional.py +++ b/plinth/modules/deluge/tests/test_functional.py @@ -35,14 +35,12 @@ class TestDelugeApp(functional.BaseAppTests): 'nogroupuser') assert not functional.is_available(session_browser, 'deluge') - functional.login(session_browser) - def test_upload_torrent(self, session_browser): """Test uploading a torrent.""" functional.app_enable(session_browser, 'deluge') _remove_all_torrents(session_browser) _upload_sample_torrent(session_browser) - assert _get_number_of_torrents(session_browser) == 1 + assert len(_get_torrents(session_browser)) == 1 @pytest.mark.backups def test_backup_restore(self, session_browser): @@ -55,7 +53,7 @@ class TestDelugeApp(functional.BaseAppTests): _remove_all_torrents(session_browser) functional.backup_restore(session_browser, 'deluge', 'test_deluge') assert functional.service_is_running(session_browser, 'deluge') - assert _get_number_of_torrents(session_browser) == 1 + assert len(_get_torrents(session_browser)) == 1 def _get_active_window_title(browser): @@ -81,49 +79,30 @@ def _ensure_logged_in(browser): # After a backup restore, service may not be available immediately functional.eventually(service_is_available) - time.sleep(1) # Wait for Ext.js application in initialize + functional.eventually(browser.is_element_present_by_id, ['add']) - if _get_active_window_title(browser) != 'Login': - return + def logged_in(): + active_window_title = _get_active_window_title(browser) - browser.find_by_id('_password').first.fill('deluge') - _click_active_window_button(browser, 'Login') + # Change Default Password window appears once. + if active_window_title == 'Change Default Password': + _click_active_window_button(browser, 'No') - assert functional.eventually( - lambda: _get_active_window_title(browser) != 'Login') - functional.eventually(browser.is_element_not_present_by_css, - args=['#add.x-item-disabled'], timeout=0.3) + if active_window_title == 'Login': + browser.find_by_id('_password').first.fill('deluge') + _click_active_window_button(browser, 'Login') + return browser.is_element_not_present_by_css('#add .x-item-disabled') -def _open_connection_manager(browser): - """Open the connection manager dialog if not already open.""" - title = 'Connection Manager' - if _get_active_window_title(browser) == title: - return - - browser.find_by_css('button.x-deluge-connection-manager').first.click() - functional.eventually(lambda: _get_active_window_title(browser) == title) - - -def _ensure_connected(browser): - """Type the connection password if required and start Deluge daemon.""" - _ensure_logged_in(browser) - - # Change Default Password window appears once. - if _get_active_window_title(browser) == 'Change Default Password': - _click_active_window_button(browser, 'No') - - assert functional.eventually(browser.is_element_not_present_by_css, - args=['#add.x-item-disabled']) + functional.eventually(logged_in) def _remove_all_torrents(browser): """Remove all torrents from deluge.""" - _ensure_connected(browser) - - while browser.find_by_css('#torrentGrid .torrent-name'): - browser.find_by_css('#torrentGrid .torrent-name').first.click() + _ensure_logged_in(browser) + for torrent in _get_torrents(browser): + torrent.click() # Click remove toolbar button browser.find_by_id('remove').first.click() @@ -155,9 +134,9 @@ def _click_active_window_button(browser, button_text): def _upload_sample_torrent(browser): """Upload a sample torrent into deluge.""" - _ensure_connected(browser) + _ensure_logged_in(browser) - number_of_torrents = _get_number_of_torrents(browser) + number_of_torrents = len(_get_torrents(browser)) # Click add toolbar button browser.find_by_id('add').first.click() @@ -168,35 +147,20 @@ def _upload_sample_torrent(browser): file_path = os.path.join(os.path.dirname(__file__), 'data', 'sample.torrent') - - if browser.find_by_id('fileUploadForm'): # deluge-web 2.x - browser.attach_file('file', file_path) - else: # deluge-web 1.x - browser.find_by_css('button.x-deluge-add-file').first.click() - - # Add from file window appears - functional.eventually( - lambda: _get_active_window_title(browser) == 'Add from File') - - # Attach file - browser.attach_file('file', file_path) - - # Click Add - _click_active_window_button(browser, 'Add') - - functional.eventually( - lambda: _get_active_window_title(browser) == 'Add Torrents') + browser.attach_file('file', file_path) # Click Add time.sleep(1) _click_active_window_button(browser, 'Add') functional.eventually( - lambda: _get_number_of_torrents(browser) > number_of_torrents) + lambda: len(_get_torrents(browser)) > number_of_torrents) -def _get_number_of_torrents(browser): - """Return the number torrents currently in deluge.""" - _ensure_connected(browser) +def _get_torrents(browser): + """Return list of torrents currently in deluge.""" + _ensure_logged_in(browser) + # wait until torrent list is loaded + functional.eventually(browser.is_element_present_by_css, ['.x-deluge-all']) - return len(browser.find_by_css('#torrentGrid .torrent-name')) + return browser.find_by_css('#torrentGrid .torrent-name') From 47d9894e67adf7cfcd0ff7b06de510ba730471d3 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 13 Nov 2024 06:46:26 -0800 Subject: [PATCH 24/82] ui: Switch to using bootstrap 5 Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- debian/control | 4 ++-- plinth/templates/base.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/debian/control b/debian/control index d6597a34d..2ea289667 100644 --- a/debian/control +++ b/debian/control @@ -17,7 +17,7 @@ Build-Depends: docbook-xsl, e2fsprogs, gir1.2-nm-1.0, - libjs-bootstrap4, + libjs-bootstrap5, pybuild-plugin-pyproject, python3-all:any, python3-apt, @@ -98,7 +98,7 @@ Depends: ldapscripts, # For gdbus used to call hooks into service libglib2.0-bin, - libjs-bootstrap4, + libjs-bootstrap5, libjs-jquery, lsof, netcat-openbsd, diff --git a/plinth/templates/base.html b/plinth/templates/base.html index c2f5c6215..9c532ec3a 100644 --- a/plinth/templates/base.html +++ b/plinth/templates/base.html @@ -51,7 +51,7 @@ - + {% if user_css %} @@ -62,7 +62,7 @@ - + From 65165f4b42de60493fb09c5b9cbc2f1e7313124d Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 13 Nov 2024 11:10:52 -0800 Subject: [PATCH 25/82] networks: Fix minor typo in template related to signal strength - Check for availability of access_point.strength before using access_point.strength. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- plinth/modules/networks/templates/connection_show.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plinth/modules/networks/templates/connection_show.html b/plinth/modules/networks/templates/connection_show.html index 9360ddbc1..f08554218 100644 --- a/plinth/modules/networks/templates/connection_show.html +++ b/plinth/modules/networks/templates/connection_show.html @@ -149,7 +149,7 @@ {{ connection.wireless.mode_string }}
{% endif %} - {% if access_point.channel %} + {% if access_point.strength %}
{% trans "Signal strength" %} From 4d71e80b1e75bd0e5d7b2fd3de9ce041fdf70ca7 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 13 Nov 2024 12:57:13 -0800 Subject: [PATCH 26/82] ui: Drop use of badge-* utility classes for newer replacements - Keep the badge-{severity} classes as they are meant for convenience of mapping severity to style. - Match bootstrap colors to maintain consistency and contrast. Tests: - Visually confirm that all the changes effective. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- .../templates/diagnostics_results.html | 8 ++++---- .../modules/dynamicdns/templates/dynamicdns.html | 4 ++-- plinth/modules/firewall/templates/firewall.html | 12 ++++++------ .../letsencrypt/templates/letsencrypt.html | 10 +++++----- .../networks/templates/connection_show.html | 14 +++++++------- .../networks/templates/connections_list.html | 4 ++-- plinth/modules/networks/templates/wifi_scan.html | 2 +- .../snapshot/templates/snapshot_manage.html | 4 ++-- plinth/templates/app-header.html | 4 ++-- plinth/templates/apps.html | 2 +- plinth/templates/notifications-dropdown.html | 9 ++++++++- plinth/tests/functional/__init__.py | 6 +++--- static/themes/default/css/main.css | 15 --------------- 13 files changed, 43 insertions(+), 51 deletions(-) diff --git a/plinth/modules/diagnostics/templates/diagnostics_results.html b/plinth/modules/diagnostics/templates/diagnostics_results.html index 1dcc0ba5b..a4e0749ef 100644 --- a/plinth/modules/diagnostics/templates/diagnostics_results.html +++ b/plinth/modules/diagnostics/templates/diagnostics_results.html @@ -18,13 +18,13 @@ {{ result.translated_description }} {% if result.result == 'passed' %} - {% trans result.result %} + {% trans result.result %} {% elif result.result == 'failed' %} - {% trans result.result %} + {% trans result.result %} {% elif result.result == 'error' or result.result == 'warning' %} - {% trans result.result %} + {% trans result.result %} {% elif result.result == 'skipped' %} - {% trans result.result %} + {% trans result.result %} {% else %} {{ result.result }} {% endif %} diff --git a/plinth/modules/dynamicdns/templates/dynamicdns.html b/plinth/modules/dynamicdns/templates/dynamicdns.html index 169420eb2..052f697a5 100644 --- a/plinth/modules/dynamicdns/templates/dynamicdns.html +++ b/plinth/modules/dynamicdns/templates/dynamicdns.html @@ -28,11 +28,11 @@ {{ domain.timestamp|timesince }} {% if domain.result %} - + {% trans "Success" %} {% else %} - + {% trans "Failed" %} {% endif %} diff --git a/plinth/modules/firewall/templates/firewall.html b/plinth/modules/firewall/templates/firewall.html index a9dc0eb9d..616b12d8b 100644 --- a/plinth/modules/firewall/templates/firewall.html +++ b/plinth/modules/firewall/templates/firewall.html @@ -36,10 +36,10 @@ {% if component.is_enabled %} - + {% trans "Enabled" %} {% else %} - + {% trans "Disabled" %} {% endif %} @@ -54,16 +54,16 @@ {% if port.name in internal_enabled_ports and port.name in external_enabled_ports %} - + {% trans "Permitted" %} {% elif port.name in internal_enabled_ports %} - + {% trans "Permitted (internal only)" %} {% elif port.name in external_enabled_ports %} - + {% trans "Permitted (external only)" %} {% else %} - + {% trans "Blocked" %} {% endif %} diff --git a/plinth/modules/letsencrypt/templates/letsencrypt.html b/plinth/modules/letsencrypt/templates/letsencrypt.html index 238c0b38e..5990d6b8a 100644 --- a/plinth/modules/letsencrypt/templates/letsencrypt.html +++ b/plinth/modules/letsencrypt/templates/letsencrypt.html @@ -33,13 +33,13 @@ {{ domain }} {% if domain_status.certificate_available and domain_status.validity == "valid" %} - + {% blocktrans trimmed with expiry_date=domain_status.expiry_date %} Valid, expires on {{ expiry_date }} {% endblocktrans %} {% elif domain_status.certificate_available and not domain_status.validity == "valid" %} - + {% if "revoked" in domain_status.validity %} {% blocktrans trimmed %} Revoked @@ -59,16 +59,16 @@ {% endif %} {% else %} - + {% trans "No certificate" %} {% endif %} {% if domain_status.web_enabled %} - {% trans "Enabled" %} + {% trans "Enabled" %} {% else %} - {% trans "Disabled" %} + {% trans "Disabled" %} {% endif %} diff --git a/plinth/modules/networks/templates/connection_show.html b/plinth/modules/networks/templates/connection_show.html index f08554218..67ce26336 100644 --- a/plinth/modules/networks/templates/connection_show.html +++ b/plinth/modules/networks/templates/connection_show.html @@ -62,7 +62,7 @@ {% if connection.primary %}
{% trans "Primary connection" %} - + {% trans "yes" %}
@@ -113,10 +113,10 @@
{% trans "Link state" %} {% if device.ethernet.carrier %} - + {% trans "cable is connected" %} {% else %} - + {% trans "please check cable" %} {% endif %}
@@ -152,7 +152,7 @@ {% if access_point.strength %}
{% trans "Signal strength" %} - + {{ access_point.strength }}%
@@ -273,7 +273,7 @@
{% trans "Firewall zone" %} - + {{ connection.zone_string }}
@@ -293,7 +293,7 @@
{% trans "Firewall zone" %} - + {{ connection.zone_string }}
@@ -312,7 +312,7 @@
{% trans "Firewall zone" %} - + {% trans "External" %}
diff --git a/plinth/modules/networks/templates/connections_list.html b/plinth/modules/networks/templates/connections_list.html index 50b43a119..83dd2a9e0 100644 --- a/plinth/modules/networks/templates/connections_list.html +++ b/plinth/modules/networks/templates/connections_list.html @@ -27,11 +27,11 @@ {% if connection.is_active %} - + {% trans "Active" %} {% else %} - + {% trans "Inactive" %} {% endif %} diff --git a/plinth/modules/networks/templates/wifi_scan.html b/plinth/modules/networks/templates/wifi_scan.html index 4fd667f2d..a1c4737a1 100644 --- a/plinth/modules/networks/templates/wifi_scan.html +++ b/plinth/modules/networks/templates/wifi_scan.html @@ -43,7 +43,7 @@ - + {{ access_point.strength }}%
diff --git a/plinth/modules/snapshot/templates/snapshot_manage.html b/plinth/modules/snapshot/templates/snapshot_manage.html index 20f14277f..ab7a5c670 100644 --- a/plinth/modules/snapshot/templates/snapshot_manage.html +++ b/plinth/modules/snapshot/templates/snapshot_manage.html @@ -36,12 +36,12 @@ {{ snapshot.number }} {% if snapshot.is_default %} - + {% trans "will be used at next boot" %} {% endif %} {% if snapshot.is_active %} - + {% trans "in use" %} {% endif %} diff --git a/plinth/templates/app-header.html b/plinth/templates/app-header.html index 73acd4e6b..3a9362eac 100644 --- a/plinth/templates/app-header.html +++ b/plinth/templates/app-header.html @@ -54,8 +54,8 @@ {% if app_info.tags %}
{% for tag in app_info.tags %} - + {% trans tag %} {% endfor %} diff --git a/plinth/templates/apps.html b/plinth/templates/apps.html index a9659c0dc..a84991f7e 100644 --- a/plinth/templates/apps.html +++ b/plinth/templates/apps.html @@ -15,7 +15,7 @@
{% for tag in tags %} - {% trans tag %} - -
+
+

+ +

-
-
+ data-bs-parent="#accordion-connections-fields"> +
{{ form.name|bootstrap }} {{ form.interface|bootstrap }} {{ form.zone|bootstrap }} @@ -50,23 +48,21 @@ {% endif %} {% if form.ipv4_method %} -
-
-

- -

-
+
+

+ +

-
-
+ data-bs-parent="#accordion-connections-fields"> +
{{ form.ipv4_method|bootstrap }} {{ form.ipv4_address|bootstrap }} {{ form.ipv4_netmask|bootstrap }} @@ -79,23 +75,21 @@ {% endif %} {% if form.ipv6_method %} -
-
-

- -

-
+
+

+ +

-
-
+ data-bs-parent="#accordion-connections-fields"> +
{{ form.ipv6_method|bootstrap }} {{ form.ipv6_address|bootstrap }} {{ form.ipv6_prefix|bootstrap }} diff --git a/plinth/modules/networks/templates/connections_fields_pppoe.html b/plinth/modules/networks/templates/connections_fields_pppoe.html index f210d5faa..d5c7e96f3 100644 --- a/plinth/modules/networks/templates/connections_fields_pppoe.html +++ b/plinth/modules/networks/templates/connections_fields_pppoe.html @@ -5,23 +5,21 @@ {% load bootstrap %} {% load i18n %} -
-
-

- -

-
+
+

+ +

-
-
+ data-bs-parent="#accordion-connections-fields"> +
{{ form.username|bootstrap }} {{ form.password|bootstrap }} {{ form.show_password|bootstrap }} diff --git a/plinth/modules/networks/templates/connections_fields_privacy.html b/plinth/modules/networks/templates/connections_fields_privacy.html index 9e292fc08..2196fb85c 100644 --- a/plinth/modules/networks/templates/connections_fields_privacy.html +++ b/plinth/modules/networks/templates/connections_fields_privacy.html @@ -5,23 +5,21 @@ {% load bootstrap %} {% load i18n %} -
-
-

- -

-
+
+

+ +

-
-
+ data-bs-parent="#accordion-connections-fields"> +
{{ form.dns_over_tls|bootstrap }}
diff --git a/plinth/modules/networks/templates/connections_fields_wifi.html b/plinth/modules/networks/templates/connections_fields_wifi.html index cadea7b98..01fa779b5 100644 --- a/plinth/modules/networks/templates/connections_fields_wifi.html +++ b/plinth/modules/networks/templates/connections_fields_wifi.html @@ -5,23 +5,21 @@ {% load bootstrap %} {% load i18n %} -
-
-

- -

-
+
+

+ +

-
-
+ data-bs-parent="#accordion-connections-fields"> +
{{ form.ssid|bootstrap }} {{ form.mode|bootstrap }} {{ form.band|bootstrap }} diff --git a/static/themes/default/css/main.css b/static/themes/default/css/main.css index 37cbe4f6f..b2d7ed80f 100644 --- a/static/themes/default/css/main.css +++ b/static/themes/default/css/main.css @@ -975,6 +975,6 @@ img.notification-icon { margin-bottom: 1.25rem; } -.accordion .card-header h4 { +.accordion-header { margin: 0; } From b465c33e1b863f13dba42330c31e6148920af781 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 13 Nov 2024 15:39:34 -0800 Subject: [PATCH 29/82] networks: Fix issue with loading create PPPoE form - The form does not have DNS-over-TLS field and trying to set initial value for it fails. Tests: - Load the PPPoE creation form. Without the patch, it fails with an exception. With the patch it succeeds. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- plinth/modules/networks/forms.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plinth/modules/networks/forms.py b/plinth/modules/networks/forms.py index b2dc3f37f..9a6d9467d 100644 --- a/plinth/modules/networks/forms.py +++ b/plinth/modules/networks/forms.py @@ -168,8 +168,9 @@ class ConnectionForm(forms.Form): """Disable DNS fallback field if necessary.""" from plinth.modules import names super().__init__(*args, **kwargs) - self.fields['dns_over_tls'].disabled = ( - not names.is_resolved_installed()) + if 'dns_over_tls' in self.fields: + self.fields['dns_over_tls'].disabled = ( + not names.is_resolved_installed()) @staticmethod def _get_interface_choices(device_type): From e302fdabaf52384f79f256e980c5618ed48a7223 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 13 Nov 2024 16:45:47 -0800 Subject: [PATCH 30/82] firewalld: Reduce severity for alert about service on internal zone - When apps are available only on 'internal' zone, a warning message is shown on the app's page. This is a routine warning that requires no action from the user. It is quite annoying to see it on a page like Samba where it is even implied. Hence reduce the severity of the alert to 'info' from 'warning'. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- plinth/templates/internal-zone.html | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plinth/templates/internal-zone.html b/plinth/templates/internal-zone.html index ee6a809bd..61f59bb0a 100644 --- a/plinth/templates/internal-zone.html +++ b/plinth/templates/internal-zone.html @@ -7,17 +7,22 @@ {% block internal_zone_warning %} {% for component in firewall %} {% if not component.is_external %} -