freedombox release 26.7.1 for unstable

[dgit distro=debian split]
 [dgit please-upload source=freedombox version=26.7.1]
 -----BEGIN PGP SIGNATURE-----
 
 iQJKBAABCgA0FiEEfWrbdQ+RCFWJSEvmd8DHXntlCAgFAmnxOBIWHGp2YWxsZXJv
 eUBtYWlsYm94Lm9yZwAKCRB3wMdee2UICMwNEACZK3LjCtTKlC8Sx7y+aFPKlxVg
 QSR4QQ9MQUSglNemEGSD+ZXAtwQaTGWEaCC3HTeozYrjZM7JySYy3BNmvja6IZz2
 e1IJWW79NK3YZaVpMHq4SZKhwdQ4TQpcnZSw5WlWMP11jrFCKhLVqqSWQKxHwPxr
 zJoql2+Y7MPWr0+l5z6NkBQaVtyMiWzW/YT/pkLd4JtfwMwfHqiJeDU2jWwNUdZO
 WJKEtMSzGbJNfEkFKM4SEwOKieKmylkrfbiandAhLDRyBA4gpCQu7PRFKIiJ/aIA
 6TXqhuOk/t7hxjfNQDppg9Ve2OL3JU+NSO0LmeTy7qpryXX8qntAQpITYGrzv9iQ
 DL3UFD99w6eCuvtlr2o/okin7KwfgfXpOVNHLgHpB7LIQPEfJTpvCxHvGODEISrX
 q8nNiakNKnQUGTsPLAQcDeqAKH7HYTI9On3ubUQjuy62nXO6RiEn+5WfbX2oILxb
 rNL0A963ZJUZx0l0/oGKl8N09KBO0oiXIDZ2c20kMgXGesxBlBInHkr2H6CD5xq2
 Wy+m4ll2i5zMtC122KiVw1ogI58KOzLkqSh8LhBslQshG9WinevHuias5vNtuK8o
 pdRpYq7Ko84tsTHbDYDZF0DwU3vXrETROq/V7uhalZ94AMCs9cNGvuWXSGVPONBZ
 nAbzRFkfhW0y0JwQ6A==
 =LXr+
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQJKBAABCgA0FiEEfWrbdQ+RCFWJSEvmd8DHXntlCAgFAmn0gZ8WHGp2YWxsZXJv
 eUBtYWlsYm94Lm9yZwAKCRB3wMdee2UICDumD/9TYgyu22gR+qg35HZ8ElIsHVX0
 Mi50e5ILTJewMn3PzOWbm2bkmWe2pagXFQBDgnEA3feG6zFhIuqQpFn++uJWfT+B
 cxn1dWhqMGc791up7K/mfAcEGQkYVZoQ9xSmzEBhsDVctbjcIAnotfDgwaNp7KyV
 vxoOoGHQ1Nywdycm7aCNIPN+QI35C8/yUvDVEpOrbg5pdKhmXGd1iZqdXXc8RR9F
 L7DC9ZjuXNHtSlhnV1EpUCO622qOLds0vNFHFb26I9glA5q9stgIzMvtymrJJ5/9
 TT5LvoKcRBOQHpTbJJHijHgulM+lvs4lCwyePVSIXsJzW5qOYSLAClEgOpS5pIzk
 hmgu5hO9hX3llL84RPOG0nxg082qwum563BdzebssnZ0/vEOsNENKmWOmw8T8xOK
 IYND5KrWaoHxCscQG4scTNIKjyM6A+sav6fDtOWpxqO51MOJJNLD9M4lSvi6RPa9
 dCCjmXcXlGSRf9P/tC5cEgCy9nukgU3E/BSHF5CZiGbXv4g7AXf2K/fmlOlHrkH9
 ye4tBGUbedGQ7bOtVYFVEW5UTPsKlPPKTM3OsxFBUF3UtiV8TS2mr6k+T+DO1Zb6
 JQSNTu6kv4Wbsvn5z+ETiyHUP6OYEOJ2nIHYkIXBX7vmqhSeHSKQPYSmRXTgvn+N
 1TX2/Ig5lLUsa2ZEwA==
 =yozD
 -----END PGP SIGNATURE-----

Merge tag 'debian/26.7.1' into debian/trixie-backports

freedombox release 26.7.1 for unstable
This commit is contained in:
James Valleroy 2026-05-01 06:34:03 -04:00
commit 0401c558c2
57 changed files with 774 additions and 524 deletions

49
debian/changelog vendored
View File

@ -1,3 +1,52 @@
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 <jvalleroy@mailbox.org> Tue, 28 Apr 2026 18:26:38 -0400
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 <jvalleroy@mailbox.org> Mon, 20 Apr 2026 20:25:51 -0400
freedombox (26.6~bpo13+1) trixie-backports; urgency=medium
* Rebuild for trixie-backports.

16
debian/tests/access-web-interface vendored Normal file
View File

@ -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/

10
debian/tests/control vendored
View File

@ -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

View File

@ -8,6 +8,18 @@ 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
* locale: Update translations for Albanian, Chinese (Simplified Han script), Czech, French, German, Italian, Swedish, Turkish
== FreedomBox 26.6 (2026-04-06) ==
=== Highlights ===

View File

@ -8,6 +8,18 @@ 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
* locale: Update translations for Albanian, Chinese (Simplified Han script), Czech, French, German, Italian, Swedish, Turkish
== FreedomBox 26.6 (2026-04-06) ==
=== Highlights ===

View File

@ -3,4 +3,4 @@
Package init file.
"""
__version__ = '26.6'
__version__ = '26.7.1'

View File

@ -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):

View File

@ -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 <https://hosted.weblate.org/projects/freedombox/"
@ -6386,7 +6386,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 "
@ -6395,14 +6395,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 ""

View File

@ -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 <an1f3@hotmail.com>\n"
"Language-Team: Arabic (Saudi Arabia) <https://hosted.weblate.org/projects/"
@ -6390,7 +6390,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 "
@ -6399,14 +6399,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 ""

View File

@ -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 ""

View File

@ -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"

View File

@ -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 <saiganeshmurala@gmail.com>\n"
"Language-Team: Bengali <https://hosted.weblate.org/projects/freedombox/"
@ -6409,7 +6409,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 "
@ -6418,14 +6418,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 ""

View File

@ -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 <marti.torra@natana.cat>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/freedombox/"
@ -7170,7 +7170,7 @@ msgstr ""
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7179,14 +7179,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"

View File

@ -7,8 +7,8 @@ msgid ""
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"
"POT-Creation-Date: 2026-04-28 22:01+0000\n"
"PO-Revision-Date: 2026-04-09 10:09+0000\n"
"Last-Translator: Jiří Podhorecký <j.podhorecky@volny.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/freedombox/"
"freedombox/cs/>\n"
@ -7160,7 +7160,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7174,7 +7174,7 @@ msgstr ""
"klientská aplikace</a>. 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"
@ -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 <em class=\"passkey-name\"></em>?"
msgstr ""
msgstr "Smazat přístupový klíč <em class=\"passkey-name\"></em>?"
#: 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 <a href=\"%(passkeys_url)s\">passkeys</a> for better security."
msgstr ""
"Pro lepší zabezpečení použijte <a href=\"%(passkeys_url)s\">přístupové "
"klíče</a>."
#: 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"

View File

@ -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 <info@ikmaak.nl>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/freedombox/"
@ -7365,7 +7365,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 "
@ -7385,14 +7385,14 @@ msgstr ""
"carddav-clients\">understøttet klient-applikation</a>. 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 ""

View File

@ -9,8 +9,8 @@ msgid ""
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"
"POT-Creation-Date: 2026-04-28 22:01+0000\n"
"PO-Revision-Date: 2026-04-09 10:09+0000\n"
"Last-Translator: Dietmar <sagen@permondes.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/freedombox/"
"freedombox/de/>\n"
@ -7303,7 +7303,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7317,7 +7317,7 @@ msgstr ""
"clients\">unterstützte Client Software</a> 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"
@ -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 <em class=\"passkey-name\"></em>?"
msgstr ""
msgstr "Passkey <em class=\"passkey-name\"></em> 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 <em>%(username)s</em> bearbeiten"
#, python-format
msgid "Use <a href=\"%(passkeys_url)s\">passkeys</a> for better security."
msgstr ""
"Verwenden Sie <a href=\"%(passkeys_url)s\">Passkeys</a> 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"

View File

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 ""

View File

@ -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 <jvalleroy@mailbox.org>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/freedombox/"
@ -7441,7 +7441,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 "
@ -7460,7 +7460,7 @@ msgstr ""
"clients/\">πελάτη</a> . Το 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"

View File

@ -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 <fran-carro@hotmail.es>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/freedombox/"
@ -7381,7 +7381,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 "
@ -7401,7 +7401,7 @@ msgstr ""
"supported-clients\">aplicación cliente soportada</a>. 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"

View File

@ -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 <jrthwlate@users.noreply.hosted.weblate.org>\n"
"Language-Team: Estonian <https://hosted.weblate.org/projects/freedombox/"
@ -6384,7 +6384,7 @@ msgstr ""
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -6393,14 +6393,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"

View File

@ -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 <info@ikmaak.nl>\n"
"Language-Team: Persian <https://hosted.weblate.org/projects/freedombox/"
@ -7062,7 +7062,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 "
@ -7071,14 +7071,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 ""

View File

@ -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 <sunil@medhas.org>\n"
"Language-Team: Plinth Developers <freedombox-"
@ -7390,7 +7390,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 "
@ -7399,14 +7399,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 ""

View File

@ -7,8 +7,8 @@ msgid ""
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"
"POT-Creation-Date: 2026-04-28 22:01+0000\n"
"PO-Revision-Date: 2026-04-16 15:09+0000\n"
"Last-Translator: Coucouf <coucouf@coucouf.fr>\n"
"Language-Team: French <https://hosted.weblate.org/projects/freedombox/"
"freedombox/fr/>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.17-dev\n"
"X-Generator: Weblate 5.17.1-dev\n"
#: plinth/config.py:103
#, python-brace-format
@ -7326,7 +7326,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7342,7 +7342,7 @@ msgstr ""
"a>. Tous les utilisateur disposant dun 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 lajout 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"
@ -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é daccè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 nest pas compatible avec les tests de diagnostic"
msgstr "Le navigateur nest pas compatible avec les clés daccès."
#: plinth/modules/users/templates/users_login.html:57
msgid "Login"
@ -10065,28 +10063,28 @@ msgstr "Sidentifier"
#: 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é daccè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é daccès"
#: plinth/modules/users/templates/users_passkeys.html:30
msgid "Adding passkey failed: "
msgstr ""
msgstr "Échec dajout dune clé daccès : "
#: plinth/modules/users/templates/users_passkeys.html:48
#: plinth/modules/users/views.py:314
msgid "Passkeys"
msgstr ""
msgstr "Clés daccè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 ""
"Lutilisation de clés daccès nécessite lutilisation de lAPI 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 daccès sont un moyen de vérifier lidentité de lutilisateur au "
"travers de signatures numériques. Elles présentent un alternative plus sure "
"à lusage des mots de passe. Les secrets sont conservés sur le téléphone, "
"lordinateur ou le jeton dauthentification matériel et protégés par un code "
"ou une empreinte biométrique. Aucun secret nest conservé sur les serveur. "
"Le serveur na besoin de connaître que les informations publiques permettant "
"de vérifier la signature de lutilisateurice."
#: 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é daccè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é daccès pour ce compte."
#: plinth/modules/users/templates/users_passkeys.html:135
msgid "Delete passkey <em class=\"passkey-name\"></em>?"
msgstr ""
msgstr "Supprimer la clé daccès <em class=\"passkey-name\"></em>?"
#: 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 lappareil contenant cette clé daccès pour pouvoir "
"lajouter à nouveau."
#: plinth/modules/users/templates/users_passkeys.html:152
#, fuzzy
#| msgid "Delete user"
msgid "Delete passkey"
msgstr "Supprimer l'utilisateur"
msgstr "Supprimer la clé daccès"
#: plinth/modules/users/templates/users_passkeys.html:155
#: plinth/modules/users/templates/users_update.html:72
@ -10153,6 +10152,8 @@ msgstr "Modifier lutilisateur <em>%(username)s</em>"
#, python-format
msgid "Use <a href=\"%(passkeys_url)s\">passkeys</a> for better security."
msgstr ""
"Utilisez une <a href=\"%(passkeys_url)s\">clé daccès</a> 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é daccès avec cet identifiant."
#: plinth/modules/users/views.py:431
#, fuzzy
#| msgid "Edit User"
msgid "Edit Passkey"
msgstr "Modification de lutilisateur"
msgstr "Modifier la clé daccès"
#: plinth/modules/users/views.py:518 plinth/modules/users/views.py:542
msgid "Passkey used is not known."
msgstr ""
msgstr "La clé daccè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 daccès"
#: plinth/templates/base.html:186 plinth/templates/base.html:187
msgid "Change password"

View File

@ -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 <fran-carro@hotmail.es>\n"
"Language-Team: Galician <https://hosted.weblate.org/projects/freedombox/"
@ -6385,7 +6385,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 "
@ -6394,14 +6394,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 ""

View File

@ -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 <info@ikmaak.nl>\n"
"Language-Team: Gujarati <https://hosted.weblate.org/projects/freedombox/"
@ -6776,7 +6776,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 "
@ -6785,14 +6785,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 ""

View File

@ -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 <ankitsuraj1111@gmail.com>\n"
"Language-Team: Hindi <https://hosted.weblate.org/projects/freedombox/"
@ -7329,7 +7329,7 @@ msgstr "क्वासेलड्रोइड"
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 "
@ -7347,14 +7347,14 @@ msgstr ""
"radicale.org/clients/\">समर्थित क्लाइंट एप्लिकेशन</a> कि जरुरत है. राडिकैल किसी "
"{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 "राडिकैल"

View File

@ -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 "
"<andrascc86288f63c44cb5@users.noreply.hosted.weblate.org>\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</a> 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"

View File

@ -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 <info@ikmaak.nl>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/freedombox/"
@ -7047,7 +7047,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 "
@ -7056,14 +7056,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"

View File

@ -7,8 +7,8 @@ msgid ""
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"
"POT-Creation-Date: 2026-04-28 22:01+0000\n"
"PO-Revision-Date: 2026-04-18 21:09+0000\n"
"Last-Translator: Pierfrancesco Passerini <p.passerini@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/freedombox/"
"freedombox/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
@ -7219,7 +7219,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7233,7 +7233,7 @@ msgstr ""
"client supportata</a>. 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"
@ -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 ""
msgstr "Aggiunto"
#: 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"

View File

@ -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 <nogajun@gmail.com>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/freedombox/"
@ -6348,7 +6348,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 "
@ -6357,14 +6357,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 ""

View File

@ -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 <yogesh@karnatakaeducation.org.in>\n"
"Language-Team: Kannada <https://hosted.weblate.org/projects/freedombox/"
@ -6343,7 +6343,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 "
@ -6352,14 +6352,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 ""

View File

@ -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 <info@ikmaak.nl>\n"
"Language-Team: Lithuanian <https://hosted.weblate.org/projects/freedombox/"
@ -6363,7 +6363,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 "
@ -6372,14 +6372,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 ""

View File

@ -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 <info@ikmaak.nl>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/freedombox/"
@ -6362,7 +6362,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 "
@ -6371,14 +6371,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 ""

View File

@ -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 <sunil@medhas.org>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
@ -7433,7 +7433,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 "
@ -7451,7 +7451,7 @@ msgstr ""
"href=\"http://radicale.org/clients/\">støttet klientprogram </a>. 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"

View File

@ -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 <info@ikmaak.nl>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/freedombox/"
@ -7172,7 +7172,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7186,7 +7186,7 @@ msgstr ""
"clienttoepassing</a> 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"

View File

@ -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 <adamdomenek@protonmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/freedombox/"
@ -7012,7 +7012,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 "
@ -7021,14 +7021,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"

View File

@ -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 <wikigeolog@gmx.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/freedombox/"
@ -7266,7 +7266,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7280,7 +7280,7 @@ msgstr ""
"radicale.org/master.html#supported-clients\"&gt;&lt;/a&gt; . O Radicale pode "
"ser acessado por qualquer usuário com um login {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, "
@ -7290,7 +7290,7 @@ msgstr ""
"novos calendários e catálogos de endereços. Não permite adicionar eventos ou "
"contatos, o que deve ser feito usando um cliente separado."
#: plinth/modules/radicale/__init__.py:55
#: plinth/modules/radicale/__init__.py:52
#: plinth/modules/radicale/manifest.py:74
msgid "Radicale"
msgstr "Radical"

View File

@ -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-15 18:09+0000\n"
"Last-Translator: OwlGale <owlgale@users.noreply.hosted.weblate.org>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/freedombox/"
@ -7224,7 +7224,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7238,7 +7238,7 @@ msgstr ""
"clients\">поддерживаемое клиентское приложение</a>. Доступ к 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"

View File

@ -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 <R45XvezA@protonmail.ch>\n"
"Language-Team: Sinhala <https://hosted.weblate.org/projects/freedombox/"
@ -6343,7 +6343,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 "
@ -6352,14 +6352,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 ""

View File

@ -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 <info@ikmaak.nl>\n"
"Language-Team: Slovenian <https://hosted.weblate.org/projects/freedombox/"
@ -6698,7 +6698,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 "
@ -6707,14 +6707,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 ""

View File

@ -7,8 +7,8 @@ msgid ""
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"
"POT-Creation-Date: 2026-04-28 22:01+0000\n"
"PO-Revision-Date: 2026-04-08 07:09+0000\n"
"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n"
"Language-Team: Albanian <https://hosted.weblate.org/projects/freedombox/"
"freedombox/sq/>\n"
@ -7237,7 +7237,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7252,7 +7252,7 @@ msgstr ""
"Radicale mund të hyhet nga cilido përdorues me kredenciale hyrjeje në "
"{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, "
@ -7262,7 +7262,7 @@ msgstr ""
"të ri dhe librash adresash. Smbulon shtim veprimtarish ose kontaktesh, çka "
"duhen bërë duke përdorur një tjetër klient."
#: plinth/modules/radicale/__init__.py:55
#: plinth/modules/radicale/__init__.py:52
#: plinth/modules/radicale/manifest.py:74
msgid "Radicale"
msgstr "Radicale"
@ -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 smbulon diagnostikime"
msgstr "Shfletuesi smbulon 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”. Sruhet 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, su shtuan kyçkalime."
#: plinth/modules/users/templates/users_passkeys.html:135
msgid "Delete passkey <em class=\"passkey-name\"></em>?"
msgstr ""
msgstr "Të fshihet kyçkalimi <em class=\"passkey-name\"></em>?"
#: 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 tju 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 <em>%(username)s</em>"
#, python-format
msgid "Use <a href=\"%(passkeys_url)s\">passkeys</a> for better security."
msgstr ""
"Për siguri më të mirë, përdorni <a href=\"%(passkeys_url)s\">kyçkalime</a>."
#: 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 snjihet."
#: 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"

View File

@ -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 <info@ikmaak.nl>\n"
"Language-Team: Serbian <https://hosted.weblate.org/projects/freedombox/"
@ -6597,7 +6597,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 "
@ -6606,14 +6606,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 ""

View File

@ -7,9 +7,9 @@ msgid ""
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 <d.wiik@outlook.com>\n"
"POT-Creation-Date: 2026-04-28 22:01+0000\n"
"PO-Revision-Date: 2026-04-15 10:10+0000\n"
"Last-Translator: bittin1ddc447d824349b2 <bittin@reimu.nl>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/freedombox/"
"freedombox/sv/>\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
@ -7176,7 +7176,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7190,7 +7190,7 @@ msgstr ""
"användarklient</a>. 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"
@ -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 <em class=\"passkey-name\"></em>?"
msgstr ""
msgstr "Radera lösennyckel <em class=\"passkey-name\"></em>?"
#: 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 <em>%(username)s</em>"
#, python-format
msgid "Use <a href=\"%(passkeys_url)s\">passkeys</a> for better security."
msgstr ""
"Använd <a href=\"%(passkeys_url)s\">lösennycklar</a> 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"

View File

@ -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 <jvalleroy@mailbox.org>\n"
"Language-Team: Tamil <https://hosted.weblate.org/projects/freedombox/"
@ -7140,7 +7140,7 @@ msgstr "குவாசெல்ட்ராய்டு"
msgid "IRC"
msgstr "Irc"
#: 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 "
@ -7153,7 +7153,7 @@ msgstr ""
"radicale.org/master.html#supported-comients\"> ஆதரிக்கப்பட்ட கிளையன்ட் பயன்பாடு </"
"a> தேவை. {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 "தீவிரமான"

View File

@ -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 <sripathroy@swecha.net>\n"
"Language-Team: Telugu <https://hosted.weblate.org/projects/freedombox/"
@ -7011,7 +7011,7 @@ msgstr "క్వాసెల్ డ్రొఇడ్"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7024,7 +7024,7 @@ msgstr ""
"href=\"https://radicale.org/master.html#supported-clients\">మద్దతు ఉన్న క్లయింట్ "
"అప్లికేషన్</a> అవసరం. {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 "రాడికేల్"

View File

@ -6,8 +6,8 @@ msgid ""
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"
"POT-Creation-Date: 2026-04-28 22:01+0000\n"
"PO-Revision-Date: 2026-04-09 10:09+0000\n"
"Last-Translator: Burak Yavuz <hitowerdigit@hotmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/freedombox/"
"freedombox/tr/>\n"
@ -7191,7 +7191,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7205,7 +7205,7 @@ msgstr ""
"istemci uygulaması</a> 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"
@ -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,28 +9849,29 @@ 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 ""
"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 ""
@ -9883,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 <em class=\"passkey-name\"></em>?"
msgstr ""
msgstr "<em class=\"passkey-name\"></em> 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
@ -9939,6 +9937,8 @@ msgstr "<em>%(username)s</em> Kullanıcısını Düzenleyin"
#, python-format
msgid "Use <a href=\"%(passkeys_url)s\">passkeys</a> for better security."
msgstr ""
"Daha iyi güvenlik için <a href=\"%(passkeys_url)s\">geçiş anahtarlarını</a> "
"kullanın."
#: plinth/modules/users/templates/users_update.html:29
#, python-format
@ -10005,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."
@ -10802,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"

View File

@ -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: Максим Горпиніч <gorpinicmaksim0@gmail.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/freedombox/"
@ -7224,7 +7224,7 @@ msgstr "Quasseldroid"
msgid "IRC"
msgstr "IRC"
#: 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 "
@ -7238,7 +7238,7 @@ msgstr ""
"clients\">підтримувана клієнтська програма</a>. 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"

View File

@ -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 <quangtrung02hn16@gmail.com>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/freedombox/"
@ -6774,7 +6774,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 "
@ -6783,14 +6783,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 ""

View File

@ -7,8 +7,8 @@ msgid ""
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"
"POT-Creation-Date: 2026-04-28 22:01+0000\n"
"PO-Revision-Date: 2026-04-08 07:09+0000\n"
"Last-Translator: 大王叫我来巡山 "
"<hamburger2048@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Simplified Han script) <https://hosted.weblate.org/"
@ -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\">支持的客户端应用程序</a>。任何拥有 "
"{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 ""
@ -8851,10 +8851,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 "此应用程序不支持诊断"
msgstr "浏览器不支持 passkeys。"
#: plinth/modules/users/templates/users_login.html:57
msgid "Login"
@ -8866,10 +8864,8 @@ msgid "Log in with passkey"
msgstr ""
#: plinth/modules/users/templates/users_passkey_edit.html:19
#, fuzzy
#| msgid "Update setup"
msgid "Update Passkey"
msgstr "更新安装程序"
msgstr "更新 Passkey"
#: plinth/modules/users/templates/users_passkeys.html:30
msgid "Adding passkey failed: "
@ -8898,26 +8894,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 "添加密码"
msgstr "添加 passkey"
#: plinth/modules/users/templates/users_passkeys.html:93
#, fuzzy
#| msgid "Domain"
msgid "For Domain"
msgstr "域名"
msgstr "针对域名"
#: 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 "上次扫描: "
msgstr "上次使用"
#: plinth/modules/users/templates/users_passkeys.html:126
msgid "No passkeys added to user account."
@ -8932,10 +8922,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 "删除用户"
msgstr "删除 passkey"
#: plinth/modules/users/templates/users_passkeys.html:155
#: plinth/modules/users/templates/users_update.html:72
@ -9011,16 +8999,12 @@ msgid "Password changed successfully."
msgstr "已成功更改密码。"
#: plinth/modules/users/views.py:420
#, fuzzy
#| msgid "A share with this name already exists."
msgid "Passkey with that identifier already exists."
msgstr "已存在同名共享。"
msgstr "已存在该标识符的 Passkey。"
#: plinth/modules/users/views.py:431
#, fuzzy
#| msgid "Edit User"
msgid "Edit Passkey"
msgstr "编辑用户"
msgstr "编辑 Passkey"
#: plinth/modules/users/views.py:518 plinth/modules/users/views.py:542
msgid "Passkey used is not known."
@ -9736,10 +9720,8 @@ msgid " System"
msgstr " 系统"
#: plinth/templates/base.html:179 plinth/templates/base.html:180
#, fuzzy
#| msgid "Manage Aliases"
msgid "Manage passkeys"
msgstr "管理别名"
msgstr "管理 passkeys"
#: plinth/templates/base.html:186 plinth/templates/base.html:187
msgid "Change password"

View File

@ -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 <j_h_liau@yahoo.com.tw>\n"
"Language-Team: Chinese (Traditional Han script) <https://hosted.weblate.org/"
@ -6674,7 +6674,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 "
@ -6683,14 +6683,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 ""

View File

@ -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,15 +36,13 @@ _description = [
logger = logging.getLogger(__name__)
CONFIG_FILE = '/etc/radicale/config'
class RadicaleApp(app_module.App):
"""FreedomBox app for Radicale."""
app_id = 'radicale'
_version = 5
_version = 6
def __init__(self) -> None:
"""Create components for the app."""
@ -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

View File

@ -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

View File

@ -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'
"

View File

@ -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)
@ -55,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."""

View File

@ -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/'))

View File

@ -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'))

View File

@ -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')