From 7ff91f3e869db05e5fde0546498827972b0b79f2 Mon Sep 17 00:00:00 2001 From: Burak Yavuz Date: Wed, 8 Apr 2026 08:51:36 +0200 Subject: [PATCH 01/20] Translated using Weblate (Turkish) Currently translated at 99.2% (1914 of 1929 strings) --- plinth/locale/tr/LC_MESSAGES/django.po | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index 79ad526ed..fcf2a7a31 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: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-03-25 07:09+0000\n" +"PO-Revision-Date: 2026-04-08 07:09+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish \n" @@ -9835,14 +9835,12 @@ msgstr "%(username)s kullanıcısını düzenle" #: plinth/modules/users/templates/users_login.html:30 msgid "Logging in with passkey failed: " -msgstr "" +msgstr "Geçiş anahtarıyla oturum açma başarısız oldu: " #: plinth/modules/users/templates/users_login.html:41 #: plinth/modules/users/templates/users_passkeys.html:41 -#, fuzzy -#| msgid "This app does not support diagnostics" msgid "Browser does not support passkeys." -msgstr "Bu uygulama tanılamayı desteklemiyor" +msgstr "Tarayıcı geçiş anahtarlarını desteklemiyor." #: plinth/modules/users/templates/users_login.html:57 msgid "Login" @@ -9851,22 +9849,20 @@ msgstr "Oturum aç" #: plinth/modules/users/templates/users_login.html:70 #: plinth/modules/users/templates/users_login.html:72 msgid "Log in with passkey" -msgstr "" +msgstr "Geçiş anahtarıyla oturum aç" #: plinth/modules/users/templates/users_passkey_edit.html:19 -#, fuzzy -#| msgid "Update setup" msgid "Update Passkey" -msgstr "Ayarlamayı güncelle" +msgstr "Geçiş Anahtarını Güncelle" #: plinth/modules/users/templates/users_passkeys.html:30 msgid "Adding passkey failed: " -msgstr "" +msgstr "Geçiş anahtarını ekleme başarısız oldu: " #: plinth/modules/users/templates/users_passkeys.html:48 #: plinth/modules/users/views.py:314 msgid "Passkeys" -msgstr "" +msgstr "Geçiş anahtarları" #: plinth/modules/users/templates/users_passkeys.html:57 msgid "" From 6d7da4b43f34c3c640022f519a725278206a5779 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 7 Apr 2026 08:52:05 +0200 Subject: [PATCH 02/20] Translated using Weblate (Albanian) Currently translated at 99.6% (1923 of 1929 strings) --- plinth/locale/sq/LC_MESSAGES/django.po | 68 ++++++++++++-------------- 1 file changed, 30 insertions(+), 38 deletions(-) diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index 4a3293286..d5a3d319a 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: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-03-26 09:09+0000\n" +"PO-Revision-Date: 2026-04-08 07:09+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" @@ -9899,14 +9899,12 @@ msgstr "Përpunoni përdoruesin %(username)s" #: plinth/modules/users/templates/users_login.html:30 msgid "Logging in with passkey failed: " -msgstr "" +msgstr "Hyrja me kyçkalim dështoi: " #: plinth/modules/users/templates/users_login.html:41 #: plinth/modules/users/templates/users_passkeys.html:41 -#, fuzzy -#| msgid "This app does not support diagnostics" msgid "Browser does not support passkeys." -msgstr "Ky aplikacion s’mbulon diagnostikime" +msgstr "Shfletuesi s’mbulon kyçkalime." #: plinth/modules/users/templates/users_login.html:57 msgid "Login" @@ -9915,28 +9913,28 @@ msgstr "Hyrje" #: plinth/modules/users/templates/users_login.html:70 #: plinth/modules/users/templates/users_login.html:72 msgid "Log in with passkey" -msgstr "" +msgstr "Hyni me kyçkalim" #: plinth/modules/users/templates/users_passkey_edit.html:19 -#, fuzzy -#| msgid "Update setup" msgid "Update Passkey" -msgstr "Përditësoni ujdisjen" +msgstr "Përditësoni Kyçkalimin" #: plinth/modules/users/templates/users_passkeys.html:30 msgid "Adding passkey failed: " -msgstr "" +msgstr "Shtimi i kyçkalimit dështoi: " #: plinth/modules/users/templates/users_passkeys.html:48 #: plinth/modules/users/views.py:314 msgid "Passkeys" -msgstr "" +msgstr "Kyçkalime" #: plinth/modules/users/templates/users_passkeys.html:57 msgid "" "Working with passkeys requires using browser's Javascript API. Please enable " "Javascript support in your browser to continue." msgstr "" +"Puna me kyçkalime lyp përdorim të API-t Javascript të shfletuesit. Ju " +"lutemi, që të vazhdohet, aktivizoni mbulim Javascript-i në shfletuesin tuaj." #: plinth/modules/users/templates/users_passkeys.html:66 msgid "" @@ -9947,47 +9945,46 @@ msgid "" "server knows only the public information that can used to verify user's " "signatures." msgstr "" +"Kyçkalimet janë një mënyrë verifikimi identiteti përdoruesit duke përdorur " +"nënshkrime dixhitale. Janë një alternativë më e siguruar se fjalëkalimet. " +"Informacioni i fshehtë mbahet nga përdoruesi në telefonin e tij, portativin, " +"ose token-in hardware dhe shkyçet duke përdorur një PIN, shenja gishtash ose " +"“face ID”. S’ruhet të fshehta te shërbyesi. Shërbyesi njeh vetëm " +"informacionin publik që mund të përdoret për të verifikuar nënshkrime të " +"përdoruesit." #: plinth/modules/users/templates/users_passkeys.html:83 #: plinth/modules/users/templates/users_passkeys.html:85 -#, fuzzy -#| msgid "Add password" msgid "Add passkey" -msgstr "Shtoni fjalëkalim" +msgstr "Shtoni kyçkalim" #: plinth/modules/users/templates/users_passkeys.html:93 -#, fuzzy -#| msgid "Domain" msgid "For Domain" -msgstr "Përkatësi" +msgstr "Për Përkatësi" #: plinth/modules/users/templates/users_passkeys.html:94 msgid "Added" -msgstr "" +msgstr "U shtua" #: plinth/modules/users/templates/users_passkeys.html:95 -#, fuzzy -#| msgid "Last scanned: " msgid "Last Used" -msgstr "Skanuar së fundi më: " +msgstr "Përdorur Së Fundi Më" #: plinth/modules/users/templates/users_passkeys.html:126 msgid "No passkeys added to user account." -msgstr "" +msgstr "Te llogari përdoruesi, s’u shtuan kyçkalime." #: plinth/modules/users/templates/users_passkeys.html:135 msgid "Delete passkey ?" -msgstr "" +msgstr "Të fshihet kyçkalimi ?" #: plinth/modules/users/templates/users_passkeys.html:145 msgid "You will need this passkey's device to add it back again." -msgstr "" +msgstr "Që ta rishtoni, do t’ju duhet pajisja e këtij kyçkalimi." #: plinth/modules/users/templates/users_passkeys.html:152 -#, fuzzy -#| msgid "Delete user" msgid "Delete passkey" -msgstr "Fshi përdorues" +msgstr "Fshije kyçkalimin" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 @@ -10003,6 +10000,7 @@ msgstr "Përpunoni Përdoruesin %(username)s" #, python-format msgid "Use passkeys for better security." msgstr "" +"Për siguri më të mirë, përdorni kyçkalime." #: plinth/modules/users/templates/users_update.html:29 #, python-format @@ -10069,20 +10067,16 @@ msgid "Password changed successfully." msgstr "Fjalëkalimi u ndryshua me sukses." #: plinth/modules/users/views.py:420 -#, fuzzy -#| msgid "A share with this name already exists." msgid "Passkey with that identifier already exists." -msgstr "Ka tashmë një pjesë me këtë emër." +msgstr "Ka tashmë një kyçkalim me atë identifikues." #: plinth/modules/users/views.py:431 -#, fuzzy -#| msgid "Edit User" msgid "Edit Passkey" -msgstr "Përpunoni Përdorues" +msgstr "Përpunoni Kyçkalim" #: plinth/modules/users/views.py:518 plinth/modules/users/views.py:542 msgid "Passkey used is not known." -msgstr "" +msgstr "Kyçkalimi i përdorur s’njihet." #: plinth/modules/wireguard/__init__.py:20 msgid "WireGuard is a fast, modern, secure VPN tunnel." @@ -10251,7 +10245,7 @@ msgstr "IP VPN-je %(box_name)s për shërbime" #: plinth/modules/wireguard/templates/wireguard.html:50 msgid "Peers" -msgstr "" +msgstr "Ortakë" #: plinth/modules/wireguard/templates/wireguard.html:52 msgid "Peers allowed to connect to this server:" @@ -10873,10 +10867,8 @@ msgid " System" msgstr " Sistem" #: plinth/templates/base.html:179 plinth/templates/base.html:180 -#, fuzzy -#| msgid "Manage Aliases" msgid "Manage passkeys" -msgstr "Administroni Aliase" +msgstr "Administroni kyçkalime" #: plinth/templates/base.html:186 plinth/templates/base.html:187 msgid "Change password" From 516a8e23d018fb3e76ead2789b65db9c11cd7842 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: Tue, 7 Apr 2026 12:40:42 +0200 Subject: [PATCH 03/20] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 60.9% (1176 of 1929 strings) --- plinth/locale/zh_Hans/LC_MESSAGES/django.po | 38 ++++++--------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po index 57c30d2b4..672786670 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: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-03-04 05:09+0000\n" +"PO-Revision-Date: 2026-04-08 07:09+0000\n" "Last-Translator: 大王叫我来巡山 " "\n" "Language-Team: Chinese (Simplified Han script) Date: Wed, 8 Apr 2026 21:50:26 +0200 Subject: [PATCH 04/20] Translated using Weblate (German) Currently translated at 99.0% (1910 of 1929 strings) --- plinth/locale/de/LC_MESSAGES/django.po | 70 ++++++++++++-------------- 1 file changed, 31 insertions(+), 39 deletions(-) diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index cbbf4b5a8..705cda377 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-03-29 11:09+0000\n" +"PO-Revision-Date: 2026-04-09 10:09+0000\n" "Last-Translator: Dietmar \n" "Language-Team: German \n" @@ -9996,14 +9996,12 @@ msgstr "Benutzer %(username)s bearbeiten" #: plinth/modules/users/templates/users_login.html:30 msgid "Logging in with passkey failed: " -msgstr "" +msgstr "Die Anmeldung mit dem Passkey ist fehlgeschlagen: " #: plinth/modules/users/templates/users_login.html:41 #: plinth/modules/users/templates/users_passkeys.html:41 -#, fuzzy -#| msgid "This app does not support diagnostics" msgid "Browser does not support passkeys." -msgstr "Diese App unterstützt keine Diagnose" +msgstr "Der Browser unterstützt keine Passkeys." #: plinth/modules/users/templates/users_login.html:57 msgid "Login" @@ -10012,28 +10010,29 @@ msgstr "Anmelden" #: plinth/modules/users/templates/users_login.html:70 #: plinth/modules/users/templates/users_login.html:72 msgid "Log in with passkey" -msgstr "" +msgstr "Mit Passkey anmelden" #: plinth/modules/users/templates/users_passkey_edit.html:19 -#, fuzzy -#| msgid "Update setup" msgid "Update Passkey" -msgstr "Übernehmen der Änderungen" +msgstr "Passkey aktualisieren" #: plinth/modules/users/templates/users_passkeys.html:30 msgid "Adding passkey failed: " -msgstr "" +msgstr "Hinzufügen des Passkeys ist fehlgeschlagen: " #: plinth/modules/users/templates/users_passkeys.html:48 #: plinth/modules/users/views.py:314 msgid "Passkeys" -msgstr "" +msgstr "Passkeys" #: plinth/modules/users/templates/users_passkeys.html:57 msgid "" "Working with passkeys requires using browser's Javascript API. Please enable " "Javascript support in your browser to continue." msgstr "" +"Für die Verwendung von Passkeys ist die JavaScript-API des Browsers " +"erforderlich. Bitte aktivieren Sie JavaScript in Ihrem Browser, um " +"fortzufahren." #: plinth/modules/users/templates/users_passkeys.html:66 msgid "" @@ -10044,47 +10043,47 @@ msgid "" "server knows only the public information that can used to verify user's " "signatures." msgstr "" +"Passkeys sind eine Methode zur Überprüfung der Benutzeridentität mithilfe " +"digitaler Signaturen. Sie stellen eine sicherere Alternative zu Passwörtern " +"dar. Die geheimen Informationen werden beim Benutzer auf seinem Smartphone, " +"Laptop oder einem Hardware-Token gespeichert und mittels PIN, Fingerabdruck " +"oder Gesichtserkennung entsperrt. Auf dem Server werden keine geheimen " +"Informationen gespeichert. Der Server kennt lediglich die öffentlichen " +"Informationen, die zur Überprüfung der Signaturen des Benutzers verwendet " +"werden können." #: plinth/modules/users/templates/users_passkeys.html:83 #: plinth/modules/users/templates/users_passkeys.html:85 -#, fuzzy -#| msgid "Add password" msgid "Add passkey" -msgstr "Kennwort hinzufügen" +msgstr "Passkey hinzufügen" #: plinth/modules/users/templates/users_passkeys.html:93 -#, fuzzy -#| msgid "Domain" msgid "For Domain" -msgstr "Domain" +msgstr "Für Domäne" #: plinth/modules/users/templates/users_passkeys.html:94 msgid "Added" -msgstr "" +msgstr "Hinzugefügt" #: plinth/modules/users/templates/users_passkeys.html:95 -#, fuzzy -#| msgid "Last scanned: " msgid "Last Used" -msgstr "Zuletzt gescannt: " +msgstr "Zuletzt verwendet" #: plinth/modules/users/templates/users_passkeys.html:126 msgid "No passkeys added to user account." -msgstr "" +msgstr "Dem Benutzerkonto wurden keine Passkeys hinzugefügt." #: plinth/modules/users/templates/users_passkeys.html:135 msgid "Delete passkey ?" -msgstr "" +msgstr "Passkey löschen?" #: plinth/modules/users/templates/users_passkeys.html:145 msgid "You will need this passkey's device to add it back again." msgstr "" #: plinth/modules/users/templates/users_passkeys.html:152 -#, fuzzy -#| msgid "Delete user" msgid "Delete passkey" -msgstr "Benutzer löschen" +msgstr "Passkey löschen" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 @@ -10100,6 +10099,7 @@ msgstr "Benutzer %(username)s bearbeiten" #, python-format msgid "Use passkeys for better security." msgstr "" +"Verwenden Sie Passkeys für mehr Sicherheit." #: plinth/modules/users/templates/users_update.html:29 #, python-format @@ -10166,20 +10166,16 @@ msgid "Password changed successfully." msgstr "Passwort erfolgreich geändert." #: plinth/modules/users/views.py:420 -#, fuzzy -#| msgid "A share with this name already exists." msgid "Passkey with that identifier already exists." -msgstr "Eine Freigabe mit diesem Namen existiert bereits." +msgstr "Ein Passkey mit dieser Kennung existiert bereits." #: plinth/modules/users/views.py:431 -#, fuzzy -#| msgid "Edit User" msgid "Edit Passkey" -msgstr "Benutzer bearbeiten" +msgstr "Passkey bearbeiten" #: plinth/modules/users/views.py:518 plinth/modules/users/views.py:542 msgid "Passkey used is not known." -msgstr "" +msgstr "Der verwendete Passkey ist nicht bekannt." #: plinth/modules/wireguard/__init__.py:20 msgid "WireGuard is a fast, modern, secure VPN tunnel." @@ -10342,10 +10338,8 @@ msgid "Value" msgstr "" #: plinth/modules/wireguard/templates/wireguard.html:33 -#, fuzzy -#| msgid "Endpoint" msgid "Endpoint(s)" -msgstr "Endpunkt" +msgstr "Endpunkt(e)" #: plinth/modules/wireguard/templates/wireguard.html:41 #, python-format @@ -10988,10 +10982,8 @@ msgid " System" msgstr " System" #: plinth/templates/base.html:179 plinth/templates/base.html:180 -#, fuzzy -#| msgid "Manage Aliases" msgid "Manage passkeys" -msgstr "Aliase verwalten" +msgstr "Passkeys verwalten" #: plinth/templates/base.html:186 plinth/templates/base.html:187 msgid "Change password" From a3c4d177df94bebc65835e02643c4ce0d8fc3f6e Mon Sep 17 00:00:00 2001 From: Burak Yavuz Date: Wed, 8 Apr 2026 11:48:07 +0200 Subject: [PATCH 05/20] Translated using Weblate (Turkish) Currently translated at 100.0% (1929 of 1929 strings) --- plinth/locale/tr/LC_MESSAGES/django.po | 52 +++++++++++++------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index fcf2a7a31..e3bd34f8c 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: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-04-08 07:09+0000\n" +"PO-Revision-Date: 2026-04-09 10:09+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish \n" @@ -9869,6 +9869,9 @@ msgid "" "Working with passkeys requires using browser's Javascript API. Please enable " "Javascript support in your browser to continue." msgstr "" +"Geçiş anahtarlarıyla çalışmak, tarayıcının Javascript API'sinin " +"kullanılmasını gerektirir. Devam etmek için lütfen tarayıcınızda Javascript " +"desteğini etkinleştirin." #: plinth/modules/users/templates/users_passkeys.html:66 msgid "" @@ -9879,47 +9882,46 @@ msgid "" "server knows only the public information that can used to verify user's " "signatures." msgstr "" +"Geçiş anahtarları, dijital imzaları kullanarak kullanıcının kimliğini " +"doğrulamasının bir yoludur. Parolalara göre daha güvenli bir " +"alternatiftirdir. Gizli bilgiler kullanıcının telefonunda, dizüstü " +"bilgisayarında veya donanım belirtecinde saklanır ve PIN, parmak izi veya " +"yüz kimliği kullanılarak kilidi açılır. Sunucuda hiçbir gizli anahtar " +"saklanmaz. Sunucu sadece kullanıcının imzalarını doğrulamak için " +"kullanılabilecek genel bilgileri bilir." #: plinth/modules/users/templates/users_passkeys.html:83 #: plinth/modules/users/templates/users_passkeys.html:85 -#, fuzzy -#| msgid "Add password" msgid "Add passkey" -msgstr "Parola ekle" +msgstr "Geçiş anahtarı ekle" #: plinth/modules/users/templates/users_passkeys.html:93 -#, fuzzy -#| msgid "Domain" msgid "For Domain" -msgstr "Etki alanı" +msgstr "Etki Alanı İçin" #: plinth/modules/users/templates/users_passkeys.html:94 msgid "Added" -msgstr "" +msgstr "Eklenen" #: plinth/modules/users/templates/users_passkeys.html:95 -#, fuzzy -#| msgid "Last scanned: " msgid "Last Used" -msgstr "Son taranan: " +msgstr "Son Kullanılan" #: plinth/modules/users/templates/users_passkeys.html:126 msgid "No passkeys added to user account." -msgstr "" +msgstr "Kullanıcı hesabına eklenen geçiş anahtarları yok." #: plinth/modules/users/templates/users_passkeys.html:135 msgid "Delete passkey ?" -msgstr "" +msgstr " geçiş anahtarı silinsin mi?" #: plinth/modules/users/templates/users_passkeys.html:145 msgid "You will need this passkey's device to add it back again." -msgstr "" +msgstr "Tekrar eklemek için bu geçiş anahtarının cihazına ihtiyacınız olacak." #: plinth/modules/users/templates/users_passkeys.html:152 -#, fuzzy -#| msgid "Delete user" msgid "Delete passkey" -msgstr "Kullanıcıyı sil" +msgstr "Geçiş anahtarını sil" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 @@ -9935,6 +9937,8 @@ msgstr "%(username)s Kullanıcısını Düzenleyin" #, python-format msgid "Use passkeys for better security." msgstr "" +"Daha iyi güvenlik için geçiş anahtarlarını " +"kullanın." #: plinth/modules/users/templates/users_update.html:29 #, python-format @@ -10001,20 +10005,16 @@ msgid "Password changed successfully." msgstr "Parola başarılı olarak değiştirildi." #: plinth/modules/users/views.py:420 -#, fuzzy -#| msgid "A share with this name already exists." msgid "Passkey with that identifier already exists." -msgstr "Bu ada sahip bir paylaşım zaten var." +msgstr "Bu tanımlayıcıya sahip geçiş anahtarı zaten var." #: plinth/modules/users/views.py:431 -#, fuzzy -#| msgid "Edit User" msgid "Edit Passkey" -msgstr "Kullanıcıyı Düzenle" +msgstr "Geçiş Anahtarını Düzenle" #: plinth/modules/users/views.py:518 plinth/modules/users/views.py:542 msgid "Passkey used is not known." -msgstr "" +msgstr "Kullanılan geçiş anahtarı bilinmiyor." #: plinth/modules/wireguard/__init__.py:20 msgid "WireGuard is a fast, modern, secure VPN tunnel." @@ -10798,10 +10798,8 @@ msgid " System" msgstr " Sistem" #: plinth/templates/base.html:179 plinth/templates/base.html:180 -#, fuzzy -#| msgid "Manage Aliases" msgid "Manage passkeys" -msgstr "Kod Adlarını Yönet" +msgstr "Geçiş anahtarlarını yönet" #: plinth/templates/base.html:186 plinth/templates/base.html:187 msgid "Change password" From cbb79985650588d84158f72e29c97443dc22326a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Podhoreck=C3=BD?= Date: Wed, 8 Apr 2026 22:24:41 +0200 Subject: [PATCH 06/20] Translated using Weblate (Czech) Currently translated at 100.0% (1929 of 1929 strings) --- plinth/locale/cs/LC_MESSAGES/django.po | 68 ++++++++++++-------------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po index 27caad3bc..48682dccd 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: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-03-08 18:48+0000\n" +"PO-Revision-Date: 2026-04-09 10:09+0000\n" "Last-Translator: Jiří Podhorecký \n" "Language-Team: Czech \n" @@ -9782,14 +9782,12 @@ msgstr "Upravit uživatele %(username)s" #: plinth/modules/users/templates/users_login.html:30 msgid "Logging in with passkey failed: " -msgstr "" +msgstr "Přihlášení pomocí passkey se nezdařilo: " #: plinth/modules/users/templates/users_login.html:41 #: plinth/modules/users/templates/users_passkeys.html:41 -#, fuzzy -#| msgid "This app does not support diagnostics" msgid "Browser does not support passkeys." -msgstr "Tato aplikace nepodporuje diagnostiku" +msgstr "Prohlížeč nepodporuje přístupové klíče." #: plinth/modules/users/templates/users_login.html:57 msgid "Login" @@ -9798,28 +9796,29 @@ msgstr "Přihlášení" #: plinth/modules/users/templates/users_login.html:70 #: plinth/modules/users/templates/users_login.html:72 msgid "Log in with passkey" -msgstr "" +msgstr "Přihlásit se pomocí přístupového klíče" #: plinth/modules/users/templates/users_passkey_edit.html:19 -#, fuzzy -#| msgid "Update setup" msgid "Update Passkey" -msgstr "Aktualizovat nastavení" +msgstr "Aktualizovat přístupový klíč" #: plinth/modules/users/templates/users_passkeys.html:30 msgid "Adding passkey failed: " -msgstr "" +msgstr "Přidání přístupového klíče selhalo: " #: plinth/modules/users/templates/users_passkeys.html:48 #: plinth/modules/users/views.py:314 msgid "Passkeys" -msgstr "" +msgstr "Přístupové klíče" #: plinth/modules/users/templates/users_passkeys.html:57 msgid "" "Working with passkeys requires using browser's Javascript API. Please enable " "Javascript support in your browser to continue." msgstr "" +"Práce s přístupovými klíči vyžaduje použití rozhraní JavaScript API " +"prohlížeče. Chcete-li pokračovat, povolte ve svém prohlížeči podporu jazyka " +"JavaScript." #: plinth/modules/users/templates/users_passkeys.html:66 msgid "" @@ -9830,47 +9829,46 @@ msgid "" "server knows only the public information that can used to verify user's " "signatures." msgstr "" +"Přístupové klíče jsou způsob, jak ověřit identitu uživatele pomocí " +"digitálních podpisů. Jsou bezpečnější alternativou k heslům. Tajné informace " +"jsou uchovávány u uživatele v jeho telefonu, notebooku nebo hardwarovém " +"tokenu a odemykají se pomocí PINu, otisku prstu nebo identifikace obličeje. " +"Na serveru nejsou uloženy žádné tajné informace. Server zná pouze veřejné " +"informace, které lze použít k ověření podpisů uživatele." #: plinth/modules/users/templates/users_passkeys.html:83 #: plinth/modules/users/templates/users_passkeys.html:85 -#, fuzzy -#| msgid "Add password" msgid "Add passkey" -msgstr "Přidat heslo" +msgstr "Přidat přístupový klíč" #: plinth/modules/users/templates/users_passkeys.html:93 -#, fuzzy -#| msgid "Domain" msgid "For Domain" -msgstr "Doména" +msgstr "Pro doménu" #: plinth/modules/users/templates/users_passkeys.html:94 msgid "Added" -msgstr "" +msgstr "Přidáno" #: plinth/modules/users/templates/users_passkeys.html:95 -#, fuzzy -#| msgid "Last scanned: " msgid "Last Used" -msgstr "Naposledy skenováno: " +msgstr "Naposledy použito" #: plinth/modules/users/templates/users_passkeys.html:126 msgid "No passkeys added to user account." -msgstr "" +msgstr "K uživatelskému účtu nebyly přidány žádné přístupové klíče." #: plinth/modules/users/templates/users_passkeys.html:135 msgid "Delete passkey ?" -msgstr "" +msgstr "Smazat přístupový klíč ?" #: plinth/modules/users/templates/users_passkeys.html:145 msgid "You will need this passkey's device to add it back again." msgstr "" +"K opětovnému přidání tohoto přístupového klíče budete potřebovat zařízení." #: plinth/modules/users/templates/users_passkeys.html:152 -#, fuzzy -#| msgid "Delete user" msgid "Delete passkey" -msgstr "Smazat uživatele" +msgstr "Smazat přístupový klíč" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 @@ -9886,6 +9884,8 @@ msgstr "Upravit uživatele %(username)s" #, python-format msgid "Use passkeys for better security." msgstr "" +"Pro lepší zabezpečení použijte přístupové " +"klíče." #: plinth/modules/users/templates/users_update.html:29 #, python-format @@ -9951,20 +9951,16 @@ msgid "Password changed successfully." msgstr "Heslo úspěšně změněno." #: plinth/modules/users/views.py:420 -#, fuzzy -#| msgid "A share with this name already exists." msgid "Passkey with that identifier already exists." -msgstr "Sdílení s tímto názvem už existuje." +msgstr "Přístupový klíč s tímto identifikátorem již existuje." #: plinth/modules/users/views.py:431 -#, fuzzy -#| msgid "Edit User" msgid "Edit Passkey" -msgstr "Upravit uživatele" +msgstr "Upravit přístupový klíč" #: plinth/modules/users/views.py:518 plinth/modules/users/views.py:542 msgid "Passkey used is not known." -msgstr "" +msgstr "Použitý přístupový klíč není znám." #: plinth/modules/wireguard/__init__.py:20 msgid "WireGuard is a fast, modern, secure VPN tunnel." @@ -10745,10 +10741,8 @@ msgid " System" msgstr " Systém" #: plinth/templates/base.html:179 plinth/templates/base.html:180 -#, fuzzy -#| msgid "Manage Aliases" msgid "Manage passkeys" -msgstr "Správa aliasů" +msgstr "Správa přístupových klíčů" #: plinth/templates/base.html:186 plinth/templates/base.html:187 msgid "Change password" @@ -10804,7 +10798,7 @@ msgstr "Mobilní" #: plinth/templates/clients.html:82 msgid "Android APK" -msgstr "" +msgstr "Android APK" #: plinth/templates/clients.html:91 msgid "Play Store" From f9de7865eda9531451e532945646b180c5a6b697 Mon Sep 17 00:00:00 2001 From: Dietmar Date: Wed, 8 Apr 2026 21:53:37 +0200 Subject: [PATCH 07/20] Translated using Weblate (Italian) Currently translated at 99.3% (1917 of 1929 strings) --- plinth/locale/it/LC_MESSAGES/django.po | 40 +++++++------------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po index 58fae58ac..59be2ee86 100644 --- a/plinth/locale/it/LC_MESSAGES/django.po +++ b/plinth/locale/it/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-03-31 06:09+0000\n" -"Last-Translator: Pierfrancesco Passerini \n" +"PO-Revision-Date: 2026-04-09 10:09+0000\n" +"Last-Translator: Dietmar \n" "Language-Team: Italian \n" "Language: it\n" @@ -9876,10 +9876,8 @@ msgstr "" #: plinth/modules/users/templates/users_login.html:41 #: plinth/modules/users/templates/users_passkeys.html:41 -#, fuzzy -#| msgid "This app does not support diagnostics" msgid "Browser does not support passkeys." -msgstr "Questa applicazione non supporta la diagnostica" +msgstr "Il browser non supporta le passkey." #: plinth/modules/users/templates/users_login.html:57 msgid "Login" @@ -9891,10 +9889,8 @@ msgid "Log in with passkey" msgstr "" #: plinth/modules/users/templates/users_passkey_edit.html:19 -#, fuzzy -#| msgid "Update setup" msgid "Update Passkey" -msgstr "Aggiorna impostazioni" +msgstr "Aggiorna Passkey" #: plinth/modules/users/templates/users_passkeys.html:30 msgid "Adding passkey failed: " @@ -9923,26 +9919,20 @@ msgstr "" #: plinth/modules/users/templates/users_passkeys.html:83 #: plinth/modules/users/templates/users_passkeys.html:85 -#, fuzzy -#| msgid "Add password" msgid "Add passkey" -msgstr "Aggiungi la password" +msgstr "Aggiungi Passkey" #: plinth/modules/users/templates/users_passkeys.html:93 -#, fuzzy -#| msgid "Domain" msgid "For Domain" -msgstr "Dominio" +msgstr "Per Dominio" #: plinth/modules/users/templates/users_passkeys.html:94 msgid "Added" msgstr "" #: plinth/modules/users/templates/users_passkeys.html:95 -#, fuzzy -#| msgid "Last scanned: " msgid "Last Used" -msgstr "Ultima scansione: " +msgstr "Ultimo utilizzo" #: plinth/modules/users/templates/users_passkeys.html:126 msgid "No passkeys added to user account." @@ -9957,10 +9947,8 @@ msgid "You will need this passkey's device to add it back again." msgstr "" #: plinth/modules/users/templates/users_passkeys.html:152 -#, fuzzy -#| msgid "Delete user" msgid "Delete passkey" -msgstr "Cancella l'utente" +msgstr "Cancella Passkey" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 @@ -10040,16 +10028,12 @@ msgid "Password changed successfully." msgstr "La password è stata aggiornata." #: plinth/modules/users/views.py:420 -#, fuzzy -#| msgid "A share with this name already exists." msgid "Passkey with that identifier already exists." -msgstr "Una condivisione con questo nome esiste già." +msgstr "Esiste già un Passkey con quell'identificatore." #: plinth/modules/users/views.py:431 -#, fuzzy -#| msgid "Edit User" msgid "Edit Passkey" -msgstr "Modifica utente" +msgstr "Modifica Passkey" #: plinth/modules/users/views.py:518 plinth/modules/users/views.py:542 msgid "Passkey used is not known." @@ -10842,10 +10826,8 @@ msgid " System" msgstr " Sistema" #: plinth/templates/base.html:179 plinth/templates/base.html:180 -#, fuzzy -#| msgid "Manage Aliases" msgid "Manage passkeys" -msgstr "Gestire gli alias" +msgstr "Gestire le Passkey" #: plinth/templates/base.html:186 plinth/templates/base.html:187 msgid "Change password" From be84971c5a1085cb6558cd5e3f0b23be79db4145 Mon Sep 17 00:00:00 2001 From: bittin1ddc447d824349b2 Date: Tue, 14 Apr 2026 12:04:10 +0200 Subject: [PATCH 08/20] Translated using Weblate (Swedish) Currently translated at 100.0% (1929 of 1929 strings) --- plinth/locale/sv/LC_MESSAGES/django.po | 71 +++++++++++--------------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/plinth/locale/sv/LC_MESSAGES/django.po b/plinth/locale/sv/LC_MESSAGES/django.po index a8dedde3f..ea126de89 100644 --- a/plinth/locale/sv/LC_MESSAGES/django.po +++ b/plinth/locale/sv/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-03-11 22:09+0000\n" -"Last-Translator: Daniel Wiik \n" +"PO-Revision-Date: 2026-04-15 10:10+0000\n" +"Last-Translator: bittin1ddc447d824349b2 \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17-dev\n" +"X-Generator: Weblate 5.17.1-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -9808,14 +9808,12 @@ msgstr "Redigera användare %(username)s" #: plinth/modules/users/templates/users_login.html:30 msgid "Logging in with passkey failed: " -msgstr "" +msgstr "Inloggning med lösennyckel misslyckades: " #: plinth/modules/users/templates/users_login.html:41 #: plinth/modules/users/templates/users_passkeys.html:41 -#, fuzzy -#| msgid "This app does not support diagnostics" msgid "Browser does not support passkeys." -msgstr "Den här appen stöder inte diagnostik" +msgstr "Webbläsaren stöder inte lösennycklar." #: plinth/modules/users/templates/users_login.html:57 msgid "Login" @@ -9824,28 +9822,28 @@ msgstr "Logga in" #: plinth/modules/users/templates/users_login.html:70 #: plinth/modules/users/templates/users_login.html:72 msgid "Log in with passkey" -msgstr "" +msgstr "Logga in med lösennyckel" #: plinth/modules/users/templates/users_passkey_edit.html:19 -#, fuzzy -#| msgid "Update setup" msgid "Update Passkey" -msgstr "Uppdatera inställningar" +msgstr "Uppdatera lösennyckel" #: plinth/modules/users/templates/users_passkeys.html:30 msgid "Adding passkey failed: " -msgstr "" +msgstr "Att lägga till lösennyckel misslyckades: " #: plinth/modules/users/templates/users_passkeys.html:48 #: plinth/modules/users/views.py:314 msgid "Passkeys" -msgstr "" +msgstr "Lösennycklar" #: plinth/modules/users/templates/users_passkeys.html:57 msgid "" "Working with passkeys requires using browser's Javascript API. Please enable " "Javascript support in your browser to continue." msgstr "" +"Att arbeta med lösennycklar kräver att du använder webbläsarens Javascript " +"API. Vänligen aktivera Javascript stöd i din webbläsare för att fortsätta." #: plinth/modules/users/templates/users_passkeys.html:66 msgid "" @@ -9856,47 +9854,45 @@ msgid "" "server knows only the public information that can used to verify user's " "signatures." msgstr "" +"Lösennycklar är sätt att verifiera användarens identitet med hjälp av " +"digitala signaturer. De är ett säkrare alternativ till lösenord. Hemlig " +"information hålls med användaren på sin telefon, bärbar dator eller en " +"hårdvaru token och låst med en PIN, fingeravtryck eller ansikte ID. Inga " +"hemligheter lagras på servern. Servern vet bara den offentliga informationen " +"som kan användas för att verifiera användarens signaturer." #: plinth/modules/users/templates/users_passkeys.html:83 #: plinth/modules/users/templates/users_passkeys.html:85 -#, fuzzy -#| msgid "Add password" msgid "Add passkey" -msgstr "Lägg till lösenord" +msgstr "Lägg till lösennyckel" #: plinth/modules/users/templates/users_passkeys.html:93 -#, fuzzy -#| msgid "Domain" msgid "For Domain" -msgstr "Domän" +msgstr "För domän" #: plinth/modules/users/templates/users_passkeys.html:94 msgid "Added" -msgstr "" +msgstr "Tillagd" #: plinth/modules/users/templates/users_passkeys.html:95 -#, fuzzy -#| msgid "Last scanned: " msgid "Last Used" -msgstr "Senast skannad: " +msgstr "Senast använd" #: plinth/modules/users/templates/users_passkeys.html:126 msgid "No passkeys added to user account." -msgstr "" +msgstr "Inga lösennycklar har lagts till på användarkontot." #: plinth/modules/users/templates/users_passkeys.html:135 msgid "Delete passkey ?" -msgstr "" +msgstr "Radera lösennyckel ?" #: plinth/modules/users/templates/users_passkeys.html:145 msgid "You will need this passkey's device to add it back again." -msgstr "" +msgstr "Du behöver denna lösennyckels enhet för att lägga till den igen." #: plinth/modules/users/templates/users_passkeys.html:152 -#, fuzzy -#| msgid "Delete user" msgid "Delete passkey" -msgstr "Radera användare" +msgstr "Radera lösennyckel" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 @@ -9912,6 +9908,7 @@ msgstr "Redigera användare %(username)s" #, python-format msgid "Use passkeys for better security." msgstr "" +"Använd lösennycklar för bättre säkerhet." #: plinth/modules/users/templates/users_update.html:29 #, python-format @@ -9977,20 +9974,16 @@ msgid "Password changed successfully." msgstr "Lösenordet har ändrats." #: plinth/modules/users/views.py:420 -#, fuzzy -#| msgid "A share with this name already exists." msgid "Passkey with that identifier already exists." -msgstr "Det finns redan en share med det här namnet." +msgstr "Lösennyckel med den identifieraren finns redan." #: plinth/modules/users/views.py:431 -#, fuzzy -#| msgid "Edit User" msgid "Edit Passkey" -msgstr "Redigera användar" +msgstr "Redigera Lösennyckel" #: plinth/modules/users/views.py:518 plinth/modules/users/views.py:542 msgid "Passkey used is not known." -msgstr "" +msgstr "Lösennyckel som används är inte känd." #: plinth/modules/wireguard/__init__.py:20 msgid "WireGuard is a fast, modern, secure VPN tunnel." @@ -10777,10 +10770,8 @@ msgid " System" msgstr " System" #: plinth/templates/base.html:179 plinth/templates/base.html:180 -#, fuzzy -#| msgid "Manage Aliases" msgid "Manage passkeys" -msgstr "Hantera alias" +msgstr "Hantera lösennycklar" #: plinth/templates/base.html:186 plinth/templates/base.html:187 msgid "Change password" @@ -10836,7 +10827,7 @@ msgstr "Mobil" #: plinth/templates/clients.html:82 msgid "Android APK" -msgstr "" +msgstr "Android APK" #: plinth/templates/clients.html:91 msgid "Play Store" From 6b033b3f45ca21339800e21f1c4937a41d00dd43 Mon Sep 17 00:00:00 2001 From: Coucouf Date: Wed, 15 Apr 2026 16:44:39 +0200 Subject: [PATCH 09/20] Translated using Weblate (French) Currently translated at 100.0% (1929 of 1929 strings) --- plinth/locale/fr/LC_MESSAGES/django.po | 69 ++++++++++++-------------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/plinth/locale/fr/LC_MESSAGES/django.po b/plinth/locale/fr/LC_MESSAGES/django.po index 0612e308e..bd09b37e1 100644 --- a/plinth/locale/fr/LC_MESSAGES/django.po +++ b/plinth/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-03-29 11:09+0000\n" +"PO-Revision-Date: 2026-04-16 15:09+0000\n" "Last-Translator: Coucouf \n" "Language-Team: French \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.17-dev\n" +"X-Generator: Weblate 5.17.1-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -10049,14 +10049,12 @@ msgstr "Paramètres du compte %(username)s" #: plinth/modules/users/templates/users_login.html:30 msgid "Logging in with passkey failed: " -msgstr "" +msgstr "Échec de la connexion par clé d’accès : " #: plinth/modules/users/templates/users_login.html:41 #: plinth/modules/users/templates/users_passkeys.html:41 -#, fuzzy -#| msgid "This app does not support diagnostics" msgid "Browser does not support passkeys." -msgstr "Cette application n’est pas compatible avec les tests de diagnostic" +msgstr "Le navigateur n’est pas compatible avec les clés d’accès." #: plinth/modules/users/templates/users_login.html:57 msgid "Login" @@ -10065,28 +10063,28 @@ msgstr "S’identifier" #: plinth/modules/users/templates/users_login.html:70 #: plinth/modules/users/templates/users_login.html:72 msgid "Log in with passkey" -msgstr "" +msgstr "Connexion avec une clé d’accès" #: plinth/modules/users/templates/users_passkey_edit.html:19 -#, fuzzy -#| msgid "Update setup" msgid "Update Passkey" -msgstr "Appliquer les changements" +msgstr "Mettre à jour la clé d’accès" #: plinth/modules/users/templates/users_passkeys.html:30 msgid "Adding passkey failed: " -msgstr "" +msgstr "Échec d’ajout d’une clé d’accès : " #: plinth/modules/users/templates/users_passkeys.html:48 #: plinth/modules/users/views.py:314 msgid "Passkeys" -msgstr "" +msgstr "Clés d’accès" #: plinth/modules/users/templates/users_passkeys.html:57 msgid "" "Working with passkeys requires using browser's Javascript API. Please enable " "Javascript support in your browser to continue." msgstr "" +"L’utilisation de clés d’accès nécessite l’utilisation de l’API Javascript du " +"navigateur. Veuillez activer Javascript dans votre navigateur pour continuer." #: plinth/modules/users/templates/users_passkeys.html:66 msgid "" @@ -10097,47 +10095,48 @@ msgid "" "server knows only the public information that can used to verify user's " "signatures." msgstr "" +"Les clés d’accès sont un moyen de vérifier l’identité de l’utilisateur au " +"travers de signatures numériques. Elles présentent un alternative plus sure " +"à l’usage des mots de passe. Les secrets sont conservés sur le téléphone, " +"l’ordinateur ou le jeton d’authentification matériel et protégés par un code " +"ou une empreinte biométrique. Aucun secret n’est conservé sur les serveur. " +"Le serveur n’a besoin de connaître que les informations publiques permettant " +"de vérifier la signature de l’utilisateurice." #: plinth/modules/users/templates/users_passkeys.html:83 #: plinth/modules/users/templates/users_passkeys.html:85 -#, fuzzy -#| msgid "Add password" msgid "Add passkey" -msgstr "Ajouter un mot de passe" +msgstr "Ajouter une clé d’accès" #: plinth/modules/users/templates/users_passkeys.html:93 -#, fuzzy -#| msgid "Domain" msgid "For Domain" -msgstr "Domaine" +msgstr "Pour le domaine" #: plinth/modules/users/templates/users_passkeys.html:94 msgid "Added" -msgstr "" +msgstr "Ajoutée" #: plinth/modules/users/templates/users_passkeys.html:95 -#, fuzzy -#| msgid "Last scanned: " msgid "Last Used" -msgstr "Dernière analyse : " +msgstr "Dernière utilisation" #: plinth/modules/users/templates/users_passkeys.html:126 msgid "No passkeys added to user account." -msgstr "" +msgstr "Aucune clé d’accès pour ce compte." #: plinth/modules/users/templates/users_passkeys.html:135 msgid "Delete passkey ?" -msgstr "" +msgstr "Supprimer la clé d’accès  ?" #: plinth/modules/users/templates/users_passkeys.html:145 msgid "You will need this passkey's device to add it back again." msgstr "" +"Vous aurez besoin de l’appareil contenant cette clé d’accès pour pouvoir " +"l’ajouter à nouveau." #: plinth/modules/users/templates/users_passkeys.html:152 -#, fuzzy -#| msgid "Delete user" msgid "Delete passkey" -msgstr "Supprimer l'utilisateur" +msgstr "Supprimer la clé d’accès" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 @@ -10153,6 +10152,8 @@ msgstr "Modifier l’utilisateur %(username)s" #, python-format msgid "Use passkeys for better security." msgstr "" +"Utilisez une clé d’accès pour une meilleure " +"sécurité." #: plinth/modules/users/templates/users_update.html:29 #, python-format @@ -10220,20 +10221,16 @@ msgid "Password changed successfully." msgstr "Le mot de passe a été changé." #: plinth/modules/users/views.py:420 -#, fuzzy -#| msgid "A share with this name already exists." msgid "Passkey with that identifier already exists." -msgstr "Un partage existe déjà avec ce nom." +msgstr "Il y a déjà un clé d’accès avec cet identifiant." #: plinth/modules/users/views.py:431 -#, fuzzy -#| msgid "Edit User" msgid "Edit Passkey" -msgstr "Modification de l’utilisateur" +msgstr "Modifier la clé d’accès" #: plinth/modules/users/views.py:518 plinth/modules/users/views.py:542 msgid "Passkey used is not known." -msgstr "" +msgstr "La clé d’accès utilisée est inconnue." #: plinth/modules/wireguard/__init__.py:20 msgid "WireGuard is a fast, modern, secure VPN tunnel." @@ -11036,10 +11033,8 @@ msgid " System" msgstr " Système" #: plinth/templates/base.html:179 plinth/templates/base.html:180 -#, fuzzy -#| msgid "Manage Aliases" msgid "Manage passkeys" -msgstr "Configurer des alias" +msgstr "Gérer les clés d’accès" #: plinth/templates/base.html:186 plinth/templates/base.html:187 msgid "Change password" From 5b8e3b8f85e1320b88b3fc41311f47b3de70129f Mon Sep 17 00:00:00 2001 From: Pierfrancesco Passerini Date: Fri, 17 Apr 2026 22:34:25 +0200 Subject: [PATCH 10/20] Translated using Weblate (Italian) Currently translated at 99.4% (1918 of 1929 strings) --- plinth/locale/it/LC_MESSAGES/django.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po index 59be2ee86..3c4884737 100644 --- a/plinth/locale/it/LC_MESSAGES/django.po +++ b/plinth/locale/it/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-04-07 00:12+0000\n" -"PO-Revision-Date: 2026-04-09 10:09+0000\n" -"Last-Translator: Dietmar \n" +"PO-Revision-Date: 2026-04-18 21:09+0000\n" +"Last-Translator: Pierfrancesco Passerini \n" "Language-Team: Italian \n" "Language: it\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.17-dev\n" +"X-Generator: Weblate 5.17.1-dev\n" #: plinth/config.py:103 #, python-brace-format @@ -9928,7 +9928,7 @@ msgstr "Per Dominio" #: plinth/modules/users/templates/users_passkeys.html:94 msgid "Added" -msgstr "" +msgstr "Aggiunto" #: plinth/modules/users/templates/users_passkeys.html:95 msgid "Last Used" From 5b615a169b70926cba41877271ff573a3fe86033 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Fri, 27 Mar 2026 08:47:37 -0400 Subject: [PATCH 11/20] debian: tests: Add test to access interface status Tests: - Build the Debian package and run autopkgtest with qemu backend. The test is passed. - Revert the recent fix for loading icons. Build the Debian package and run autopkgtests again. It is failed due to maximum redirects followed. Signed-off-by: James Valleroy Reviewed-by: Sunil Mohan Adapa --- debian/tests/access-web-interface | 16 ++++++++++++++++ debian/tests/control | 10 ++++++++++ 2 files changed, 26 insertions(+) create mode 100644 debian/tests/access-web-interface diff --git a/debian/tests/access-web-interface b/debian/tests/access-web-interface new file mode 100644 index 000000000..34e70530a --- /dev/null +++ b/debian/tests/access-web-interface @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +# Wait for FreedomBox setup to complete. +sleep 30 + +journalctl --unit=plinth --unit=freedombox-privileged + +# Get FreedomBox status +curl --location --cookie "" --fail --write-out "%{response_code}" --insecure \ + --stderr - https://localhost/freedombox/status/ + +# Access FreedomBox interface +curl --location --cookie "" --fail --write-out "%{response_code}" --insecure \ + --stderr - https://localhost/freedombox/ diff --git a/debian/tests/control b/debian/tests/control index 87e9e7256..c36b03ecd 100644 --- a/debian/tests/control +++ b/debian/tests/control @@ -16,3 +16,13 @@ Restrictions: needs-root, breaks-testbed Test-Command: PYTHONPATH='/usr/lib/python3/dist-packages/' py.test-3 -p no:cacheprovider --cov=plinth --cov-report=html:debci/htmlcov --cov-report=term Depends: e2fsprogs, git, python3-pytest, python3-pytest-cov, python3-pytest-django, @ Restrictions: breaks-testbed + +# +# Try to access the FreedomBox web interface. +# +# iptables package installs alternatives files, with iptables-nft as default alternative. +# Without it, firewalld has this error: INVALID_IPV: 'ipv4' is not a valid backend or is unavailable +# +Tests: access-web-interface +Depends: iptables, @ +Restrictions: needs-root, isolation-machine, breaks-testbed From 52ce78ca1e1c47f69b8ff9c8a9873613d2b12cb2 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 20 Apr 2026 20:25:18 -0400 Subject: [PATCH 12/20] doc: Fetch latest manual Signed-off-by: James Valleroy --- doc/manual/en/ReleaseNotes.raw.wiki | 5 +++++ doc/manual/es/ReleaseNotes.raw.wiki | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 2f39cd261..91a612021 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,11 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 26.7 (2026-04-20) == + + * debian: tests: Add test to access interface status + * locale: Update translations for Albanian, Chinese (Simplified Han script), Czech, French, German, Italian, Swedish, Turkish + == FreedomBox 26.6 (2026-04-06) == === Highlights === diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index 2f39cd261..91a612021 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,11 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 26.7 (2026-04-20) == + + * debian: tests: Add test to access interface status + * locale: Update translations for Albanian, Chinese (Simplified Han script), Czech, French, German, Italian, Swedish, Turkish + == FreedomBox 26.6 (2026-04-06) == === Highlights === From 5cebe7ffe0a094cebc39de95d7d8708ffeba0cbe Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 20 Apr 2026 20:26:20 -0400 Subject: [PATCH 13/20] Release v26.7 to unstable Signed-off-by: James Valleroy --- debian/changelog | 33 +++++++++++++++++++++++++++++++++ plinth/__init__.py | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index df5332404..c466d8249 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,36 @@ +freedombox (26.7) unstable; urgency=medium + + [ Burak Yavuz ] + * Translated using Weblate (Turkish) + + [ Besnik Bleta ] + * Translated using Weblate (Albanian) + + [ 大王叫我来巡山 ] + * Translated using Weblate (Chinese (Simplified Han script)) + + [ Dietmar ] + * Translated using Weblate (German) + * Translated using Weblate (Italian) + + [ Jiří Podhorecký ] + * Translated using Weblate (Czech) + + [ bittin1ddc447d824349b2 ] + * Translated using Weblate (Swedish) + + [ Coucouf ] + * Translated using Weblate (French) + + [ Pierfrancesco Passerini ] + * Translated using Weblate (Italian) + + [ James Valleroy ] + * debian: tests: Add test to access interface status + * doc: Fetch latest manual + + -- James Valleroy Mon, 20 Apr 2026 20:25:51 -0400 + freedombox (26.6) unstable; urgency=medium [ Coucouf ] diff --git a/plinth/__init__.py b/plinth/__init__.py index 0fd413a2e..47912648f 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '26.6' +__version__ = '26.7' From dc3439fd700365fd8cae35dab006158a1c8cec67 Mon Sep 17 00:00:00 2001 From: Frederico Gomes Date: Wed, 15 Apr 2026 18:58:06 +0100 Subject: [PATCH 14/20] radicale: Enable lc_username for case-insensitive auth Enable lc_username = True in [auth] section during setup. Bump version. Signed-off-by: Frederico Gomes Reviewed-by: James Valleroy --- plinth/modules/radicale/__init__.py | 2 +- plinth/modules/radicale/privileged.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/plinth/modules/radicale/__init__.py b/plinth/modules/radicale/__init__.py index f8b355615..3910d0f08 100644 --- a/plinth/modules/radicale/__init__.py +++ b/plinth/modules/radicale/__init__.py @@ -45,7 +45,7 @@ class RadicaleApp(app_module.App): app_id = 'radicale' - _version = 5 + _version = 6 def __init__(self) -> None: """Create components for the app.""" diff --git a/plinth/modules/radicale/privileged.py b/plinth/modules/radicale/privileged.py index 75e9bfe17..546150125 100644 --- a/plinth/modules/radicale/privileged.py +++ b/plinth/modules/radicale/privileged.py @@ -24,6 +24,7 @@ def setup(): """ aug = load_augeas() aug.set('auth/type', 'remote_user') + aug.set('auth/lc_username', 'True') aug.save() # Service is started again by socket. action_utils.service_stop(SERVICE_NAME) From ae50ceaeb04839b98e453f90f0a11b794d1ab875 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 23 Apr 2026 13:19:10 -0700 Subject: [PATCH 15/20] radicale, bepasty: Fix issue with failed diagnostic test Fixes: #2571. - During backup, a service related to backup is stopped and then started back again after the backup. In case of .socket unit, the .service unit is not being stopped and it continues to listen on the socket path. When the .socket unit is started back again, it tries to listen on the socket path and fails. - To fix the issue, when running stop, restart, etc. operations on a .socket file, try to perform that operations that we actually intend. Tests: - Unit tests pass - Functional tests for bepasty and radicale work. - After taking a radicale backup uwsgi-app@radicale.socket does not become inactive (works when service is running or stopped). uwsgi-app@radicale.service stops if it is running, backup doesn't fail if service is not running. - After taking a radicale backup uwsgi-app@bepasty-freedombox.socket does not become inactive (works when service is running or stopped). uwsgi-app@bepasty-freedombox.service stops if it is running, backup doesn't fail if service is not running. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/action_utils.py | 60 ++++++++++++++---- plinth/tests/test_action_utils.py | 100 +++++++++++++++++++++++++++--- 2 files changed, 139 insertions(+), 21 deletions(-) diff --git a/plinth/action_utils.py b/plinth/action_utils.py index 8d50836dc..8d9c91196 100644 --- a/plinth/action_utils.py +++ b/plinth/action_utils.py @@ -120,14 +120,6 @@ def service_disable(service_name: str, check: bool = False): except subprocess.CalledProcessError: pass - if service_name.endswith('.socket'): - # Instead, may need to query the unit for associated .service file. - base_name = service_name.rpartition('.')[0] - try: - service_stop(f'{base_name}.service', check=check) - except subprocess.CalledProcessError: - pass - def service_mask(service_name: str, check: bool = False): """Mask a service""" @@ -143,25 +135,62 @@ def service_start(service_name: str, check: bool = False): """Start a service with systemd.""" service_action(service_name, 'start', check=check) + # When starting a .socket unit, there is not need to start the .service + # unit as it will be automatically started when a request is received on + # the socket. + + +def _get_service_unit(socket_name: str) -> str: + """Return the .service unit name for a .socket unit.""" + # Instead, may need to query the unit for associated .service file. + base_name = socket_name.rpartition('.')[0] + return f'{base_name}.service' + def service_stop(service_name: str, check: bool = False): """Stop a service with systemd.""" service_action(service_name, 'stop', check=check) + # When stopping a .socket unit, most of the time, we must also stop + # .service unit. This frees up resources when disabling the app. It also + # stops using resources that are being backed up. + if service_name.endswith('.socket'): + service_action(_get_service_unit(service_name), 'stop', check=check) + def service_restart(service_name: str, check: bool = False): """Restart a service with systemd.""" - service_action(service_name, 'restart', check=check) + if not service_name.endswith('.socket'): + service_action(service_name, 'restart', check=check) + else: + # When restarting a .socket unit, most of the time, we actually want to + # restart the corresponding .service unit. This reloads the + # configuration changes as needed. To restart, all we need to do stop + # the service. It will be automatically started again by .socket unit. + service_action(_get_service_unit(service_name), 'stop', check=check) def service_try_restart(service_name: str, check: bool = False): """Try to restart a service with systemd.""" - service_action(service_name, 'try-restart', check=check) + if not service_name.endswith('.socket'): + service_action(service_name, 'try-restart', check=check) + else: + # When try-restarting a .socket unit, most of the time, we actually + # want to restart the corresponding .service unit. This reloads the + # configuration changes as needed. To restart, all we need to do stop + # the service. It will be automatically started again by .socket unit. + service_action(_get_service_unit(service_name), 'stop', check=check) def service_reload(service_name: str, check: bool = False): """Reload a service with systemd.""" - service_action(service_name, 'reload', check=check) + if not service_name.endswith('.socket'): + service_action(service_name, 'reload', check=check) + else: + # When reloading a .socket unit, most of the time, we actually want to + # reload the corresponding .service unit. This reloads the + # configuration changes as needed. + service_action(_get_service_unit(service_name), 'reload', check=check) def service_try_reload_or_restart(service_name: str, check: bool = False): @@ -169,7 +198,14 @@ def service_try_reload_or_restart(service_name: str, check: bool = False): Do nothing if service is not running. """ - service_action(service_name, 'try-reload-or-restart', check=check) + if not service_name.endswith('.socket'): + service_action(service_name, 'try-reload-or-restart', check=check) + else: + # When reloading a .socket unit, most of the time, we actually want to + # reload the corresponding .service unit. This reloads the + # configuration changes as needed. + service_action(_get_service_unit(service_name), + 'try-reload-or-restart', check=check) def service_reset_failed(service_name: str, check: bool = False): diff --git a/plinth/tests/test_action_utils.py b/plinth/tests/test_action_utils.py index 7e6a13c9d..e190a19ba 100644 --- a/plinth/tests/test_action_utils.py +++ b/plinth/tests/test_action_utils.py @@ -20,7 +20,8 @@ from plinth.action_utils import (get_addresses, get_hostname, service_try_reload_or_restart, service_try_restart, service_unmask, umask) -UNKNOWN = 'unknowndeamon' +UNKNOWN = 'unknowndeamon.service' +UNKNOWN_SOCKET = 'unknowndeamon.socket' systemctl_path = pathlib.Path('/usr/bin/systemctl') systemd_installed = pytest.mark.skipif(not systemctl_path.exists(), @@ -76,20 +77,101 @@ def test_service_enable_and_disable(): @patch('plinth.action_utils.service_action') @systemd_installed -def test_service_actions(mock): - """Trivial white box test for trivial implementations.""" +def test_service_start(mock): + """Test staring a service.""" service_start(UNKNOWN) - mock.assert_called_with(UNKNOWN, 'start', check=False) + mock.mock_calls = [call(UNKNOWN, 'start', check=False)] + + mock.reset_mock() + service_start(UNKNOWN, check=True) + mock.mock_calls = [call(UNKNOWN, 'start', check=True)] + + +@patch('plinth.action_utils.service_action') +@systemd_installed +def test_service_stop(mock): + """Test stopping a service.""" service_stop(UNKNOWN) - mock.assert_called_with(UNKNOWN, 'stop', check=False) + assert mock.mock_calls == [call(UNKNOWN, 'stop', check=False)] + + mock.reset_mock() + service_stop(UNKNOWN, check=True) + mock.mock_calls = [call(UNKNOWN, 'stop', check=True)] + + mock.reset_mock() + service_stop(UNKNOWN_SOCKET) + assert mock.mock_calls == [ + call(UNKNOWN_SOCKET, 'stop', check=False), + call(UNKNOWN, 'stop', check=False) + ] + + +@patch('plinth.action_utils.service_action') +@systemd_installed +def test_service_restart(mock): + """Test restaring a service.""" service_restart(UNKNOWN) - mock.assert_called_with(UNKNOWN, 'restart', check=False) + assert mock.mock_calls == [call(UNKNOWN, 'restart', check=False)] + + mock.reset_mock() + service_restart(UNKNOWN, check=True) + mock.mock_calls = [call(UNKNOWN, 'restart', check=True)] + + mock.reset_mock() + service_restart(UNKNOWN_SOCKET) + assert mock.mock_calls == [call(UNKNOWN, 'stop', check=False)] + + +@patch('plinth.action_utils.service_action') +@systemd_installed +def test_service_try_restart(mock): + """Test try-restaring a service.""" service_try_restart(UNKNOWN) - mock.assert_called_with(UNKNOWN, 'try-restart', check=False) + assert mock.mock_calls == [call(UNKNOWN, 'try-restart', check=False)] + + mock.reset_mock() + service_try_restart(UNKNOWN, check=True) + mock.mock_calls = [call(UNKNOWN, 'try-restart', check=True)] + + mock.reset_mock() + service_restart(UNKNOWN_SOCKET) + assert mock.mock_calls == [call(UNKNOWN, 'stop', check=False)] + + +@patch('plinth.action_utils.service_action') +@systemd_installed +def test_service_reload(mock): + """Test reloading a service.""" service_reload(UNKNOWN) - mock.assert_called_with(UNKNOWN, 'reload', check=False) + assert mock.mock_calls == [call(UNKNOWN, 'reload', check=False)] + + mock.reset_mock() + service_reload(UNKNOWN, check=True) + mock.mock_calls = [call(UNKNOWN, 'reload', check=True)] + + mock.reset_mock() + service_reload(UNKNOWN_SOCKET) + assert mock.mock_calls == [call(UNKNOWN, 'reload', check=False)] + + +@patch('plinth.action_utils.service_action') +@systemd_installed +def test_service_try_reload_or_restart(mock): + """Test try-reload-or-restart on a service.""" service_try_reload_or_restart(UNKNOWN) - mock.assert_called_with(UNKNOWN, 'try-reload-or-restart', check=False) + assert mock.mock_calls == [ + call(UNKNOWN, 'try-reload-or-restart', check=False) + ] + + mock.reset_mock() + service_try_reload_or_restart(UNKNOWN, check=True) + mock.mock_calls = [call(UNKNOWN, 'try-reload-or-restart', check=True)] + + mock.reset_mock() + service_try_reload_or_restart(UNKNOWN_SOCKET) + assert mock.mock_calls == [ + call(UNKNOWN, 'try-reload-or-restart', check=False) + ] @pytest.mark.usefixtures('needs_root') From 2bd33ed4281fa11121bebc6fb7a1c91dc11d5e75 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 23 Apr 2026 22:05:41 -0700 Subject: [PATCH 16/20] radicale: Fix issue with parsing new configuration file The latest version of radicale calendar server's configuration file does not parse with augeas. This is because it contains the following entry in [headers] section: Content-Security-Policy = default-src 'self'; object-src 'none' The semicolon is treated as comment by the lens which is not correct. Fix this by overriding comment_re in the lens. Tests: - Updated test case works when using augparse. - With the patch, latest upstream configuration file parses without errors. - Functional tests work for radicale in testing distribution. Without patch radicale fails to install. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/radicale/__init__.py | 30 +------ .../data/usr/share/augeas/lenses/radicale.aug | 45 +++++++++++ .../augeas/lenses/tests/test_radicale.aug | 81 +++++++++++++++++++ plinth/modules/radicale/privileged.py | 14 +++- plinth/modules/radicale/views.py | 6 +- 5 files changed, 143 insertions(+), 33 deletions(-) create mode 100644 plinth/modules/radicale/data/usr/share/augeas/lenses/radicale.aug create mode 100644 plinth/modules/radicale/data/usr/share/augeas/lenses/tests/test_radicale.aug diff --git a/plinth/modules/radicale/__init__.py b/plinth/modules/radicale/__init__.py index 3910d0f08..7eab78db5 100644 --- a/plinth/modules/radicale/__init__.py +++ b/plinth/modules/radicale/__init__.py @@ -5,7 +5,6 @@ FreedomBox app for radicale. import logging -import augeas from django.utils.translation import gettext_lazy as _ from plinth import app as app_module @@ -37,8 +36,6 @@ _description = [ logger = logging.getLogger(__name__) -CONFIG_FILE = '/etc/radicale/config' - class RadicaleApp(app_module.App): """FreedomBox app for Radicale.""" @@ -129,7 +126,7 @@ class RadicaleApp(app_module.App): if Version(package['new_version']) > Version('4~'): return False - rights = get_rights_value() + rights = privileged.get_rights_value() install(['radicale'], force_configuration='new') privileged.setup() privileged.configure(rights) @@ -140,28 +137,3 @@ class RadicaleApp(app_module.App): """De-configure and uninstall the app.""" super().uninstall() privileged.uninstall() - - -def load_augeas(): - """Prepares the augeas.""" - aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + - augeas.Augeas.NO_MODL_AUTOLOAD) - - # INI file lens - aug.set('/augeas/load/Puppet/lens', 'Puppet.lns') - aug.set('/augeas/load/Puppet/incl[last() + 1]', CONFIG_FILE) - - aug.load() - return aug - - -def get_rights_value(): - """Returns the current Rights value.""" - aug = load_augeas() - value = aug.get('/files' + CONFIG_FILE + '/rights/type') - - if value == 'from_file': - # Default rights file is equivalent to owner_only. - value = 'owner_only' - - return value diff --git a/plinth/modules/radicale/data/usr/share/augeas/lenses/radicale.aug b/plinth/modules/radicale/data/usr/share/augeas/lenses/radicale.aug new file mode 100644 index 000000000..cad3e6f4d --- /dev/null +++ b/plinth/modules/radicale/data/usr/share/augeas/lenses/radicale.aug @@ -0,0 +1,45 @@ +(* Radicale module for Augeas + Based on Puppet lens. + + Manage config file for http://radicale.org/ + /etc/radicale/config is a standard INI File. +*) + + +module Radicale = + autoload xfm + +(************************************************************************ + * INI File settings + * + * /etc/radicale/config only supports "#" as commentary and "=" as separator + *************************************************************************) +let comment = IniFile.comment "#" "#" +let comment_re = /[#]/ +let sep = IniFile.sep "=" "=" + + +(************************************************************************ + * ENTRY + * /etc/radicale/config uses standard INI File entries + *************************************************************************) +let entry = IniFile.entry_generic (Util.indent . key IniFile.entry_re) sep comment_re comment + + +(************************************************************************ + * RECORD + * /etc/radicale/config uses standard INI File records + *************************************************************************) +let title = IniFile.indented_title IniFile.record_re +let record = IniFile.record title entry + + +(************************************************************************ + * LENS & FILTER + * /etc/radicale/config uses standard INI File records + *************************************************************************) +let lns = IniFile.lns record comment + +let filter = (incl "/etc/radicale/config") + +let xfm = transform lns filter diff --git a/plinth/modules/radicale/data/usr/share/augeas/lenses/tests/test_radicale.aug b/plinth/modules/radicale/data/usr/share/augeas/lenses/tests/test_radicale.aug new file mode 100644 index 000000000..085c60152 --- /dev/null +++ b/plinth/modules/radicale/data/usr/share/augeas/lenses/tests/test_radicale.aug @@ -0,0 +1,81 @@ +module Test_radicale = + + let conf = " +[server] + +[encoding] + +[well-known] + +[auth] + +[git] + +[rights] + +[storage] + +[logging] + +[headers] +Content-Security-Policy = default-src 'self'; object-src 'none' + +" + + test Radicale.lns get conf = + {} + { "server" + {} } + { "encoding" + {} } + { "well-known" + {} } + { "auth" + {} } + { "git" + {} } + { "rights" + {} } + { "storage" + {} } + { "logging" + {} } + { "headers" + { "Content-Security-Policy" = "default-src 'self'; object-src 'none'" } + {} } + + test Radicale.lns put conf after + set "server/hosts" "127.0.0.1:5232, [::1]:5232"; + set "server/base_prefix" "/radicale/"; + set "well-known/caldav" "/radicale/%(user)s/caldav/"; + set "well-known/cardav" "/radicale/%(user)s/carddav/"; + set "auth/type" "remote_user"; + set "rights/type" "owner_only"; + set "headers/Content-Security-Policy" "default-src 'self'; object-src 'none'" + = " +[server] + +hosts=127.0.0.1:5232, [::1]:5232 +base_prefix=/radicale/ +[encoding] + +[well-known] + +caldav=/radicale/%(user)s/caldav/ +cardav=/radicale/%(user)s/carddav/ +[auth] + +type=remote_user +[git] + +[rights] + +type=owner_only +[storage] + +[logging] + +[headers] +Content-Security-Policy = default-src 'self'; object-src 'none' + +" diff --git a/plinth/modules/radicale/privileged.py b/plinth/modules/radicale/privileged.py index 546150125..5799bac67 100644 --- a/plinth/modules/radicale/privileged.py +++ b/plinth/modules/radicale/privileged.py @@ -56,12 +56,24 @@ def load_augeas(): aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + augeas.Augeas.NO_MODL_AUTOLOAD) # INI file lens - aug.transform('Puppet', CONFIG_FILE) + aug.transform('Radicale', CONFIG_FILE) aug.set('/augeas/context', '/files' + CONFIG_FILE) aug.load() return aug +def get_rights_value(): + """Returns the current Rights value.""" + aug = load_augeas() + value = aug.get('rights/type') + + if value == 'from_file': + # Default rights file is equivalent to owner_only. + value = 'owner_only' + + return value + + @privileged def uninstall(): """Remove all radicale collections.""" diff --git a/plinth/modules/radicale/views.py b/plinth/modules/radicale/views.py index e7d73b7a6..2aa36cedc 100644 --- a/plinth/modules/radicale/views.py +++ b/plinth/modules/radicale/views.py @@ -8,7 +8,7 @@ from django.utils.translation import gettext_lazy as _ from plinth.views import AppView -from . import get_rights_value, privileged +from . import privileged from .forms import RadicaleForm @@ -20,13 +20,13 @@ class RadicaleAppView(AppView): def get_initial(self): """Return the values to fill in the form.""" initial = super().get_initial() - initial['access_rights'] = get_rights_value() + initial['access_rights'] = privileged.get_rights_value() return initial def form_valid(self, form): """Change the access control of Radicale service.""" data = form.cleaned_data - if get_rights_value() != data['access_rights']: + if privileged.get_rights_value() != data['access_rights']: privileged.configure(data['access_rights']) messages.success(self.request, _('Access rights configuration updated')) From 495f5f8a0dee04d44cc4bec0cf11815501469e28 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Fri, 24 Apr 2026 08:37:19 -0700 Subject: [PATCH 17/20] radicale: tests: functional: Better checking for well-known URLs - When SOGO app is enabled, radicale functional tests fail. Tests: - Enable SOGO app and run radicale functional tests. They fail without patch and pass with the patch. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- .../modules/radicale/tests/test_functional.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/plinth/modules/radicale/tests/test_functional.py b/plinth/modules/radicale/tests/test_functional.py index e1db34592..a35dde93e 100644 --- a/plinth/modules/radicale/tests/test_functional.py +++ b/plinth/modules/radicale/tests/test_functional.py @@ -83,21 +83,21 @@ def _set_access_rights(browser, access_rights_type): def _calendar_is_available(browser): """Return whether calendar is available at well-known URL.""" - conf = functional.config['DEFAULT'] - url = functional.base_url + '/.well-known/caldav' - logging.captureWarnings(True) - request = requests.get(url, auth=(conf['username'], conf['password']), - verify=False) - logging.captureWarnings(False) - return request.status_code != 404 + return _well_known_available(browser, '/.well-known/caldav') def _addressbook_is_available(browser): """Return whether addressbook is available at well-known URL.""" + return _well_known_available(browser, '/.well-known/carddav') + + +def _well_known_available(browser, wellknown_url: str): + """Return whether a well-known URL redirects to radicale.""" conf = functional.config['DEFAULT'] - url = functional.base_url + '/.well-known/carddav' + url = functional.base_url + wellknown_url logging.captureWarnings(True) request = requests.get(url, auth=(conf['username'], conf['password']), - verify=False) + verify=False, allow_redirects=False) logging.captureWarnings(False) - return request.status_code != 404 + return (request.status_code == 301 + and request.headers['Location'].endswith('/radicale/')) From 449b78ae8102e506e4943bad38a8170dde86ecee Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Tue, 28 Apr 2026 18:01:49 -0400 Subject: [PATCH 18/20] locale: Update translation strings Signed-off-by: James Valleroy --- plinth/locale/ar/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/ar_SA/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/be/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/bg/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/bn/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/ca/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/cs/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/da/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/de/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/django.pot | 8 ++++---- plinth/locale/el/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/es/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/et/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/fa/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/fake/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/fr/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/gl/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/gu/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/hi/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/hu/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/id/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/it/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/ja/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/kn/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/lt/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/lv/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/nb/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/nl/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/pl/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/pt/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/ru/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/si/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/sl/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/sq/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/sr/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/sv/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/ta/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/te/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/tr/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/uk/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/vi/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/zh_Hans/LC_MESSAGES/django.po | 8 ++++---- plinth/locale/zh_Hant/LC_MESSAGES/django.po | 8 ++++---- 43 files changed, 172 insertions(+), 172 deletions(-) diff --git a/plinth/locale/ar/LC_MESSAGES/django.po b/plinth/locale/ar/LC_MESSAGES/django.po index efc1b0bcd..931f236d5 100644 --- a/plinth/locale/ar/LC_MESSAGES/django.po +++ b/plinth/locale/ar/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-04-16 02:28+0000\n" "Last-Translator: MohammedSaalif <2300031323@kluniversity.in>\n" "Language-Team: Arabic is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/ar_SA/LC_MESSAGES/django.po b/plinth/locale/ar_SA/LC_MESSAGES/django.po index 75dcefa44..650fabffe 100644 --- a/plinth/locale/ar_SA/LC_MESSAGES/django.po +++ b/plinth/locale/ar_SA/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2020-06-10 15:41+0000\n" "Last-Translator: aiman an \n" "Language-Team: Arabic (Saudi Arabia) is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/be/LC_MESSAGES/django.po b/plinth/locale/be/LC_MESSAGES/django.po index fed71d905..a8f82ad43 100644 --- a/plinth/locale/be/LC_MESSAGES/django.po +++ b/plinth/locale/be/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -6340,7 +6340,7 @@ msgstr "" msgid "IRC" msgstr "" -#: plinth/modules/radicale/__init__.py:27 +#: plinth/modules/radicale/__init__.py:26 #, python-brace-format msgid "" "Radicale is a CalDAV and CardDAV server. It allows synchronization and " @@ -6349,14 +6349,14 @@ msgid "" "a> is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index 0fd98e575..c2c134b20 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-12-17 07:00+0000\n" "Last-Translator: 109247019824 " "<109247019824@users.noreply.hosted.weblate.org>\n" @@ -6686,7 +6686,7 @@ msgstr "Quasseldroid" msgid "IRC" msgstr "" -#: plinth/modules/radicale/__init__.py:27 +#: plinth/modules/radicale/__init__.py:26 #, python-brace-format msgid "" "Radicale is a CalDAV and CardDAV server. It allows synchronization and " @@ -6695,14 +6695,14 @@ msgid "" "a> is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/bn/LC_MESSAGES/django.po b/plinth/locale/bn/LC_MESSAGES/django.po index b91298a59..485da99df 100644 --- a/plinth/locale/bn/LC_MESSAGES/django.po +++ b/plinth/locale/bn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-04-01 03:02+0000\n" "Last-Translator: MURALA SAI GANESH \n" "Language-Team: Bengali is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/ca/LC_MESSAGES/django.po b/plinth/locale/ca/LC_MESSAGES/django.po index be3e5b46b..25d46fcb2 100644 --- a/plinth/locale/ca/LC_MESSAGES/django.po +++ b/plinth/locale/ca/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-02-06 23:02+0000\n" "Last-Translator: kosagi \n" "Language-Team: Catalan is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po index 48682dccd..82c505640 100644 --- a/plinth/locale/cs/LC_MESSAGES/django.po +++ b/plinth/locale/cs/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-04-09 10:09+0000\n" "Last-Translator: Jiří Podhorecký \n" "Language-Team: Czech . K Radicale má přístup každý uživatel s přihlašovacím " "jménem {box_name}." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7184,7 +7184,7 @@ msgstr "" "nových kalendářů a adresářů kontaktů. Nepodporuje přidávání událostí či " "kontaktů, to je třeba dělat v tomu určeném klientovi." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/da/LC_MESSAGES/django.po b/plinth/locale/da/LC_MESSAGES/django.po index a39efea59..72fcd5771 100644 --- a/plinth/locale/da/LC_MESSAGES/django.po +++ b/plinth/locale/da/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Danish understøttet klient-applikation. Radicale kan tilgås " "af enhver bruger der har et log ind til {box_name}." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index 705cda377..77765ec11 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-04-09 10:09+0000\n" "Last-Translator: Dietmar \n" "Language-Team: German unterstützte Client Software notwendig. Radicale kann von " "jedem Benutzer mit einem {box_name}-Konto verwendet werden." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7328,7 +7328,7 @@ msgstr "" "Kontaktdaten wird nicht unterstützt; dies muss über einen separaten Client " "erfolgen." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/django.pot b/plinth/locale/django.pot index 3cdbb2f56..de73e6428 100644 --- a/plinth/locale/django.pot +++ b/plinth/locale/django.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -6341,7 +6341,7 @@ msgstr "" msgid "IRC" msgstr "" -#: plinth/modules/radicale/__init__.py:27 +#: plinth/modules/radicale/__init__.py:26 #, python-brace-format msgid "" "Radicale is a CalDAV and CardDAV server. It allows synchronization and " @@ -6350,14 +6350,14 @@ msgid "" "a> is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/el/LC_MESSAGES/django.po b/plinth/locale/el/LC_MESSAGES/django.po index f452d9dd2..39260fb47 100644 --- a/plinth/locale/el/LC_MESSAGES/django.po +++ b/plinth/locale/el/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-02-22 13:17+0000\n" "Last-Translator: James Valleroy \n" "Language-Team: Greek πελάτη . Το Radicale μπορεί να προσεγγιστεί από οποιονδήποτε " "χρήστη με {box_name} πιστοποιητικά." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7471,7 +7471,7 @@ msgstr "" "γεγονότων ή επαφών, το οποίο πρέπει να γίνει χρησιμοποιώντας ένα ξεχωριστό " "πελάτη." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/es/LC_MESSAGES/django.po b/plinth/locale/es/LC_MESSAGES/django.po index 41c4ed620..4fe54cc07 100644 --- a/plinth/locale/es/LC_MESSAGES/django.po +++ b/plinth/locale/es/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2024-11-01 17:00+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Spanish aplicación cliente soportada. Cualquier persona " "autenticada en {box_name} puede acceder a Radicale." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7411,7 +7411,7 @@ msgstr "" "de nuevos calendarios y agendas. No soporta añadir eventos o contactos, que " "debe hacerse usando un cliente separado." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/et/LC_MESSAGES/django.po b/plinth/locale/et/LC_MESSAGES/django.po index 3a5598326..a8288e186 100644 --- a/plinth/locale/et/LC_MESSAGES/django.po +++ b/plinth/locale/et/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-01-09 20:01+0000\n" "Last-Translator: Priit Jõerüüt \n" "Language-Team: Estonian is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/fa/LC_MESSAGES/django.po b/plinth/locale/fa/LC_MESSAGES/django.po index 9d0f063fc..73833c9e0 100644 --- a/plinth/locale/fa/LC_MESSAGES/django.po +++ b/plinth/locale/fa/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Persian is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/fake/LC_MESSAGES/django.po b/plinth/locale/fake/LC_MESSAGES/django.po index c08cef332..75d7bf687 100644 --- a/plinth/locale/fake/LC_MESSAGES/django.po +++ b/plinth/locale/fake/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Plinth 0.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2016-01-31 22:24+0530\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Plinth Developers is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/fr/LC_MESSAGES/django.po b/plinth/locale/fr/LC_MESSAGES/django.po index bd09b37e1..d58e746f0 100644 --- a/plinth/locale/fr/LC_MESSAGES/django.po +++ b/plinth/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-04-16 15:09+0000\n" "Last-Translator: Coucouf \n" "Language-Team: French . Tous les utilisateur disposant d’un compte sur la {box_name} ont accès à " "Radicale." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7353,7 +7353,7 @@ msgstr "" "charge l’ajout d’événements ou de contacts, opérations qui doivent être " "réalisées avec un client dédié." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/gl/LC_MESSAGES/django.po b/plinth/locale/gl/LC_MESSAGES/django.po index 06e6d02d5..c00e61158 100644 --- a/plinth/locale/gl/LC_MESSAGES/django.po +++ b/plinth/locale/gl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2022-12-30 10:51+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Galician is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/gu/LC_MESSAGES/django.po b/plinth/locale/gu/LC_MESSAGES/django.po index a929e7ce6..adaf901d4 100644 --- a/plinth/locale/gu/LC_MESSAGES/django.po +++ b/plinth/locale/gu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2021-01-18 12:32+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Gujarati is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/hi/LC_MESSAGES/django.po b/plinth/locale/hi/LC_MESSAGES/django.po index aadef7d20..563ff1579 100644 --- a/plinth/locale/hi/LC_MESSAGES/django.po +++ b/plinth/locale/hi/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-03-31 06:09+0000\n" "Last-Translator: bsurajpatra \n" "Language-Team: Hindi समर्थित क्लाइंट एप्लिकेशन कि जरुरत है. राडिकैल किसी " "{box_name} यूसर पहुंचा जा सकता है एक लॉगिन के साथ." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "राडिकैल" diff --git a/plinth/locale/hu/LC_MESSAGES/django.po b/plinth/locale/hu/LC_MESSAGES/django.po index 371992e0b..34231e33c 100644 --- a/plinth/locale/hu/LC_MESSAGES/django.po +++ b/plinth/locale/hu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-06-04 15:01+0000\n" "Last-Translator: András Szűcs " "\n" @@ -7496,7 +7496,7 @@ msgstr "Quasseldroid" msgid "IRC" msgstr "" -#: plinth/modules/radicale/__init__.py:27 +#: plinth/modules/radicale/__init__.py:26 #, fuzzy, python-brace-format #| msgid "" #| "Radicale is a CalDAV and CardDAV server. It allows synchronization and " @@ -7517,7 +7517,7 @@ msgstr "" "alkalmazásra is. A Radicale elérhető bármely felhasználó számára a " "{box_name} eszközön." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7527,7 +7527,7 @@ msgstr "" "címjegyzékek létrehozását támogatja. Nem támogatja az események vagy " "kapcsolatok hozzáadását, ezeket külön kliens segítségével kell elvégezni." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/id/LC_MESSAGES/django.po b/plinth/locale/id/LC_MESSAGES/django.po index 74b13df6b..c4378eb8e 100644 --- a/plinth/locale/id/LC_MESSAGES/django.po +++ b/plinth/locale/id/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Indonesian (FreedomBox)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Indonesian is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po index 3c4884737..46f463efa 100644 --- a/plinth/locale/it/LC_MESSAGES/django.po +++ b/plinth/locale/it/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-04-18 21:09+0000\n" "Last-Translator: Pierfrancesco Passerini \n" "Language-Team: Italian . Ogni utente con un profilo {box_name} può accedere a " "Radicale." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7243,7 +7243,7 @@ msgstr "" "nuovi calendari e rubriche. Non supporta l'aggiunta di eventi o contatti, " "che dovranno essere gestiti tramite un client separato." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/ja/LC_MESSAGES/django.po b/plinth/locale/ja/LC_MESSAGES/django.po index 389b80828..b9d00a971 100644 --- a/plinth/locale/ja/LC_MESSAGES/django.po +++ b/plinth/locale/ja/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-10-24 16:02+0000\n" "Last-Translator: Jun Nogata \n" "Language-Team: Japanese is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/kn/LC_MESSAGES/django.po b/plinth/locale/kn/LC_MESSAGES/django.po index d9b9b65c2..a38fcd069 100644 --- a/plinth/locale/kn/LC_MESSAGES/django.po +++ b/plinth/locale/kn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2020-07-16 16:41+0000\n" "Last-Translator: Yogesh \n" "Language-Team: Kannada is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/lt/LC_MESSAGES/django.po b/plinth/locale/lt/LC_MESSAGES/django.po index a2c786cfc..0d438815f 100644 --- a/plinth/locale/lt/LC_MESSAGES/django.po +++ b/plinth/locale/lt/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Lithuanian is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/lv/LC_MESSAGES/django.po b/plinth/locale/lv/LC_MESSAGES/django.po index 1fd66c799..22ea4f9ba 100644 --- a/plinth/locale/lv/LC_MESSAGES/django.po +++ b/plinth/locale/lv/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Latvian is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/nb/LC_MESSAGES/django.po b/plinth/locale/nb/LC_MESSAGES/django.po index 029022e49..153a62384 100644 --- a/plinth/locale/nb/LC_MESSAGES/django.po +++ b/plinth/locale/nb/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2024-10-27 23:30+0000\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Norwegian Bokmål støttet klientprogram . Radicale " "kan nås av alle brukere med {box_name}-innlogging." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7461,7 +7461,7 @@ msgstr "" "kalendre og adressebøker. Den tilbyr ikke å legge inn nye hendelser eller " "kontakter, det må gjøres med en egen klient." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/nl/LC_MESSAGES/django.po b/plinth/locale/nl/LC_MESSAGES/django.po index e77275d99..b28a14496 100644 --- a/plinth/locale/nl/LC_MESSAGES/django.po +++ b/plinth/locale/nl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-09-17 09:01+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Dutch nodig. Radicale kan worden benaderd door elke " "{box_name} gebruiker." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7197,7 +7197,7 @@ msgstr "" "gebeurtenissen of contactpersonen, die moeten worden gedaan met behulp van " "een aparte client." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/pl/LC_MESSAGES/django.po b/plinth/locale/pl/LC_MESSAGES/django.po index 26f9da000..6bd4e1f8a 100644 --- a/plinth/locale/pl/LC_MESSAGES/django.po +++ b/plinth/locale/pl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2024-07-13 12:09+0000\n" "Last-Translator: Monika \n" "Language-Team: Polish is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/pt/LC_MESSAGES/django.po b/plinth/locale/pt/LC_MESSAGES/django.po index c7bfe5ded..8f0a5a1fa 100644 --- a/plinth/locale/pt/LC_MESSAGES/django.po +++ b/plinth/locale/pt/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-04-09 22:41+0000\n" "Last-Translator: tuliogit \n" "Language-Team: Portuguese \n" "Language-Team: Russian поддерживаемое клиентское приложение. Доступ к Radicale может " "получить любой пользователь с логином {box_name}." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7248,7 +7248,7 @@ msgstr "" "создание новых календарей и адресных книг. Он не поддерживает добавление " "событий или контактов, для этого требуется отдельный клиент." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/si/LC_MESSAGES/django.po b/plinth/locale/si/LC_MESSAGES/django.po index 1db9a3d73..00114266a 100644 --- a/plinth/locale/si/LC_MESSAGES/django.po +++ b/plinth/locale/si/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2021-04-27 13:32+0000\n" "Last-Translator: HelaBasa \n" "Language-Team: Sinhala is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/sl/LC_MESSAGES/django.po b/plinth/locale/sl/LC_MESSAGES/django.po index 017dab92a..8913196a5 100644 --- a/plinth/locale/sl/LC_MESSAGES/django.po +++ b/plinth/locale/sl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Slovenian is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index d5a3d319a..f45d357a2 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-04-08 07:09+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" "Language-Team: Serbian is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/sv/LC_MESSAGES/django.po b/plinth/locale/sv/LC_MESSAGES/django.po index ea126de89..f32e8224a 100644 --- a/plinth/locale/sv/LC_MESSAGES/django.po +++ b/plinth/locale/sv/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-04-15 10:10+0000\n" "Last-Translator: bittin1ddc447d824349b2 \n" "Language-Team: Swedish . Radikal kan nås av alla användare med en {box_name} " "inloggning." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7200,7 +7200,7 @@ msgstr "" "skapandet av nya kalendrar och adressböcker. Det stöder inte att lägga till " "händelser eller kontakter, som måste göras med hjälp av en separat klient." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/ta/LC_MESSAGES/django.po b/plinth/locale/ta/LC_MESSAGES/django.po index b48f2ec58..b0a75b355 100644 --- a/plinth/locale/ta/LC_MESSAGES/django.po +++ b/plinth/locale/ta/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-03-02 19:53+0000\n" "Last-Translator: James Valleroy \n" "Language-Team: Tamil ஆதரிக்கப்பட்ட கிளையன்ட் பயன்பாடு தேவை. {box_name} உள்நுழைவுடன் எந்த பயனரும் ராடிகலை அணுகலாம்." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7163,7 +7163,7 @@ msgstr "" "முகவரி புத்தகங்களை உருவாக்குவதை மட்டுமே ஆதரிக்கிறது. இது நிகழ்வுகள் அல்லது " "தொடர்புகளைச் சேர்ப்பதை ஆதரிக்காது, இது ஒரு தனி கிளையண்டைப் பயன்படுத்தி செய்யப்பட வேண்டும்." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "தீவிரமான" diff --git a/plinth/locale/te/LC_MESSAGES/django.po b/plinth/locale/te/LC_MESSAGES/django.po index 06b8edc64..451a605a8 100644 --- a/plinth/locale/te/LC_MESSAGES/django.po +++ b/plinth/locale/te/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-05-14 17:03+0000\n" "Last-Translator: Sripath Roy Koganti \n" "Language-Team: Telugu మద్దతు ఉన్న క్లయింట్ " "అప్లికేషన్ అవసరం. {box_name} లాగిన్ ఉన్న ఏ యూజర్ అయినా Radicaleని యాక్సెస్ చేయవచ్చు." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7034,7 +7034,7 @@ msgstr "" "రూపొందించడానికి మాత్రమే మద్దతు ఇస్తుంది. ఈవెంట్‌లు లేదా పరిచయాలను జోడించడానికి ఇది మద్దతు ఇవ్వదు, ఇది " "ప్రత్యేక క్లయింట్‌ని ఉపయోగించి చేయాలి." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "రాడికేల్" diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index e3bd34f8c..9c38d3fea 100644 --- a/plinth/locale/tr/LC_MESSAGES/django.po +++ b/plinth/locale/tr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-04-09 10:09+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish gereklidir. Radicale'ye {box_name} oturum açma adı " "ile herhangi bir kullanıcı tarafından erişilebilir." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7215,7 +7215,7 @@ msgstr "" "temel bir web arayüzü sağlar. Ayrı bir istemci kullanılarak yapılması " "zorunlu olan olayların veya kişilerin eklenmesini desteklemez." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/uk/LC_MESSAGES/django.po b/plinth/locale/uk/LC_MESSAGES/django.po index e8337d0f8..a592d54e5 100644 --- a/plinth/locale/uk/LC_MESSAGES/django.po +++ b/plinth/locale/uk/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-12-17 07:00+0000\n" "Last-Translator: Максим Горпиніч \n" "Language-Team: Ukrainian підтримувана клієнтська програма. Radicale може отримати " "доступ будь-який користувач із логіном {box_name}." -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " @@ -7248,7 +7248,7 @@ msgstr "" "календарів та адресних книг. Він не підтримує додавання подій або контактів, " "для цього необхідно використовувати окремий клієнт." -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "Radicale" diff --git a/plinth/locale/vi/LC_MESSAGES/django.po b/plinth/locale/vi/LC_MESSAGES/django.po index ee329fbed..9b807601d 100644 --- a/plinth/locale/vi/LC_MESSAGES/django.po +++ b/plinth/locale/vi/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2021-07-28 08:34+0000\n" "Last-Translator: bruh \n" "Language-Team: Vietnamese is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po index 672786670..091120bbf 100644 --- a/plinth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hans/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Plinth\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2026-04-08 07:09+0000\n" "Last-Translator: 大王叫我来巡山 " "\n" @@ -6542,7 +6542,7 @@ msgstr "" msgid "IRC" msgstr "" -#: plinth/modules/radicale/__init__.py:27 +#: plinth/modules/radicale/__init__.py:26 #, python-brace-format msgid "" "Radicale is a CalDAV and CardDAV server. It allows synchronization and " @@ -6555,14 +6555,14 @@ msgstr "" "master.html#supported-clients\">支持的客户端应用程序。任何拥有 " "{box_name} 登录名的用户都可以访问 Radicale。" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po index b98cf07ee..c1c38042b 100644 --- a/plinth/locale/zh_Hant/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hant/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-07 00:12+0000\n" +"POT-Creation-Date: 2026-04-28 22:01+0000\n" "PO-Revision-Date: 2025-02-07 12:01+0000\n" "Last-Translator: pesder \n" "Language-Team: Chinese (Traditional Han script) is needed. Radicale can be accessed by any user with a {box_name} login." msgstr "" -#: plinth/modules/radicale/__init__.py:33 +#: plinth/modules/radicale/__init__.py:32 msgid "" "Radicale provides a basic web interface, which only supports creating new " "calendars and addressbooks. It does not support adding events or contacts, " "which must be done using a separate client." msgstr "" -#: plinth/modules/radicale/__init__.py:55 +#: plinth/modules/radicale/__init__.py:52 #: plinth/modules/radicale/manifest.py:74 msgid "Radicale" msgstr "" From 91296b6e81c5ee55b41f09a8eadba4051c19d1aa Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Tue, 28 Apr 2026 18:26:20 -0400 Subject: [PATCH 19/20] doc: Fetch latest manual Signed-off-by: James Valleroy --- doc/manual/en/ReleaseNotes.raw.wiki | 7 +++++++ doc/manual/es/ReleaseNotes.raw.wiki | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 91a612021..637aec8ab 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,13 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 26.7.1 (2026-04-28) == + + * radicale, bepasty: Fix issue with failed diagnostic test + * radicale: Enable lc_username for case-insensitive auth + * radicale: Fix issue with parsing new configuration file + * radicale: tests: functional: Better checking for well-known URLs + == FreedomBox 26.7 (2026-04-20) == * debian: tests: Add test to access interface status diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index 91a612021..637aec8ab 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,13 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 26.7.1 (2026-04-28) == + + * radicale, bepasty: Fix issue with failed diagnostic test + * radicale: Enable lc_username for case-insensitive auth + * radicale: Fix issue with parsing new configuration file + * radicale: tests: functional: Better checking for well-known URLs + == FreedomBox 26.7 (2026-04-20) == * debian: tests: Add test to access interface status From 5c42e0481352d62384194aee31b9b61a66e3e62c Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Tue, 28 Apr 2026 18:26:58 -0400 Subject: [PATCH 20/20] Release v26.7.1 to unstable Signed-off-by: James Valleroy --- debian/changelog | 16 ++++++++++++++++ plinth/__init__.py | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index c466d8249..3dbe0a5c3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,19 @@ +freedombox (26.7.1) unstable; urgency=medium + + [ Frederico Gomes ] + * radicale: Enable lc_username for case-insensitive auth + + [ Sunil Mohan Adapa ] + * radicale, bepasty: Fix issue with failed diagnostic test + * radicale: Fix issue with parsing new configuration file + * radicale: tests: functional: Better checking for well-known URLs + + [ James Valleroy ] + * locale: Update translation strings + * doc: Fetch latest manual + + -- James Valleroy Tue, 28 Apr 2026 18:26:38 -0400 + freedombox (26.7) unstable; urgency=medium [ Burak Yavuz ] diff --git a/plinth/__init__.py b/plinth/__init__.py index 47912648f..95c2335af 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '26.7' +__version__ = '26.7.1'