mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-04-22 10:01:45 +00:00
freedombox Debian release 25.5
-----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEEfWrbdQ+RCFWJSEvmd8DHXntlCAgFAmfPmDgWHGp2YWxsZXJv eUBtYWlsYm94Lm9yZwAKCRB3wMdee2UICNszD/9ZLWgnz7NAnYa3HQaF/x0sdqjG okAcqub+VW2RDJMA5pGUM8yYK/vpPehlqFOijq/AVwWIfFEa4YEItrlIRpSAk0B6 QNFIpSNoNInjBXO8aYa8vZwS2J36I1z5jvERGYkO2DGiAyyrNoWZXMnT62MOZgY3 85aJGaMAY3aP65YYw0QBdN5PGH9HkEqghP5aI7+KU3MSx1vLya9CjPSe37IfuVFj eVWSjc5N19kml7ZxS67MmYYYdPCoh4tABzfkGNaev/UmkcjVMtiKmMFbME2pynMx fR8/EpqffsKlnCNnlb1fYCp6JiEH9uQ6DY7O591Fthd0Y+9wCBmu2DaG7AtgP4FW j26cfqcpF/d2ME9ELqbkodEno3Bj6jz43yeY1ZgejxeOqlvbBEuVIv3LJ99tsOT0 wpQ6HZ148xJOJj29uA6JAz0w/eBEX5S6LZDKOOJHrCaZ0Gq+zcQYMGXkEywuG86m fKIlR2pgDX1w4LT+mTipTun4tzvncekNknoCQ+/+B5P/7kdjSv+hPdU+6LZlrGRM EuZ4Wtb26qjZF10Kl9VPcSuxfbcF6A/ZLsDzlte+3/axxn9p5oNv05ZvGVb7fiqj Ok1tNnBsM4v+DcVaDK2tP9/n7DtSLan0cIK4vxUnwUmgJ6pytVzlLXyFxo47bJJ1 DDOI44V2ZRmT9hc9tg== =WFpX -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEEfWrbdQ+RCFWJSEvmd8DHXntlCAgFAmfUEo0WHGp2YWxsZXJv eUBtYWlsYm94Lm9yZwAKCRB3wMdee2UICPtzD/9aCRzcdOJmnSfT7FsGB74JLBPN UIzKBx3TiITaDYCrffOnkiSSaBUHGvHlsw5Okk0WnK9nc23kS/uVnBP37aLCPXrB kzMv+2QzkvS8k42VQ/G84m2kbroDH80rs/QJqe4Hw0qfLc4Cv3QwE5Bz6U1I8ok0 8oT0ciUlM+0QYKvffEe+LmZJcG/NCuQYWqxU5umPWFNWh3AE3dnJ2FzdbGHZF4ui 4SbtO7gAjJeZAizLciFeMXJIH3CETPZzpNenXQnIjJTQXiCK1fj9ZshUXn9hxocg 9/lDb6qv9gL/cHGZsQCsXs81HyaJ3XOOWL1sFzDOmRDTCY30NUTrZ1LQsQzvFbqt p7CPwTXD4JnS7tPoB8TqiaK98xqHBS1KDvlImzN2/t8cENPEcsLE4yG4TWGvPxjG riOB9oXlaImnBSYKzVhGs7OYnivFpbb3WgZoXFD1Vk8o8el5QvG5/zUDVYnSr4Xa wjR2d1fO4zDsO6r1pioMllC0Cnzl6tZqsHMSAyJjwBllluFCGsWNE3H4FkQeoJT4 s/VBMdMfwKCnnmDONvHHG2f6/QoP8bpdBZqhgWO7OY9BDe/P0LDv4bPOjd/LyofC CtGTWKhyB7N3acyikB7etOgLMoHjxFtM9K7urEitPW0Adbv/jEAvugft1wqMa0RZ qe5bAKtoMA1U5sOboA== =wwy4 -----END PGP SIGNATURE----- Merge tag 'v25.5' into debian/bookworm-backports freedombox Debian release 25.5 Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
commit
ce4c9e58a9
41
debian/changelog
vendored
41
debian/changelog
vendored
@ -1,3 +1,44 @@
|
||||
freedombox (25.5) unstable; urgency=medium
|
||||
|
||||
[ Sunil Mohan Adapa ]
|
||||
* sogo: Fix a typo in tags
|
||||
* ui: tags: Show tags on all cards pages if present
|
||||
* ui: tags: Minor refactoring in menu filtering and sorting
|
||||
* ui: tags: Add tag search/filter for system page
|
||||
* ui: tags: Redirect to apps or system page appropriately
|
||||
* ui: Minor change with renaming a variable
|
||||
* ui: system: When canceling search stay on current page
|
||||
* upgrades: Split dist upgrade into a separate module
|
||||
* upgrades: Drop special handling for searx
|
||||
* upgrades: Refactor code to disable snapshots
|
||||
* upgrades: Refactor code for disabling Quassel during dist-upgrade
|
||||
* upgrades: Use systemd-run to create transient service
|
||||
* upgrades: Refactor code to hold packages
|
||||
* upgrades: Split the main dist upgrade code
|
||||
* upgrades: Relax list of packages to hold during dist upgrade
|
||||
* upgrades: Perform sources file update more reliably
|
||||
* upgrades: Refactor code to retrieve the new codename
|
||||
* upgrades: Use systemd service status instead of flag file
|
||||
* upgrades: Simplify dist upgrades checks using exceptions
|
||||
* upgrades: Log apt output to journal during dist upgrade
|
||||
* upgrades: Log messages using python logging framework
|
||||
* upgrades: Simplify some global names
|
||||
* action_utils: Ensure that package are unheld if dist upgrade fails
|
||||
* upgrades: Perform easier checks first during dist upgrade
|
||||
* upgrades: tests: Add unit tests for dist upgrade methods
|
||||
* upgrades: Minor refactor to pre-dist upgrade checks
|
||||
* upgrades: Use bind mounts to edit sources file only upon completion
|
||||
* setup: Fix issue with pending app update and force upgrade
|
||||
|
||||
[ Максим Горпиніч ]
|
||||
* Translated using Weblate (Ukrainian)
|
||||
|
||||
[ James Valleroy ]
|
||||
* locale: Update translation strings
|
||||
* doc: Fetch latest manual
|
||||
|
||||
-- James Valleroy <jvalleroy@mailbox.org> Mon, 10 Mar 2025 20:52:29 -0400
|
||||
|
||||
freedombox (25.4.1~bpo12+1) bookworm-backports; urgency=medium
|
||||
|
||||
* Rebuild for bookworm-backports.
|
||||
|
||||
26
doc/manual/en/DebianUpgradeNotes.raw.wiki
Normal file
26
doc/manual/en/DebianUpgradeNotes.raw.wiki
Normal file
@ -0,0 +1,26 @@
|
||||
<<TableOfContents(3)>>
|
||||
|
||||
## BEGIN_INCLUDE
|
||||
|
||||
!FreedomBox is built on the Debian operating system. Approximately every two years, there is a new stable Debian release. !FreedomBox provides the option of [[FreedomBox/Manual/Upgrades#Auto-Update_to_Next_Stable_Release|automatically handling the upgrade]] to the new version of Debian after it is released.
|
||||
|
||||
The current stable release is Debian 12 "bookworm". Below are additional considerations to have in mind when upgrading to a new release of Debian.
|
||||
|
||||
== Debian 13 "trixie" ==
|
||||
|
||||
=== TT-RSS no longer supported ===
|
||||
|
||||
The [[DebianPts:tt-rss]] package has been removed from the next Debian release. It is recommended to move to one of the following options as a replacement:
|
||||
* [[FreedomBox/Manual/Miniflux|Miniflux]]
|
||||
* [[FreedomBox/Manual/Nextcloud|Nextcloud News]]
|
||||
|
||||
=== Searx app no longer supported ===
|
||||
|
||||
The [[DebianPts:searx]] package has been removed from the next Debian release. There is currently no replacement for Searx app in !FreedomBox. Searx app will no longer received security updates, so it is recommended to stop using the app, and to uninstall it.
|
||||
|
||||
## END_INCLUDE
|
||||
|
||||
<<Include(FreedomBox/Portal)>>
|
||||
|
||||
----
|
||||
CategoryFreedomBox
|
||||
@ -8,6 +8,43 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f
|
||||
|
||||
The following are the release notes for each !FreedomBox version.
|
||||
|
||||
== FreedomBox 25.5 (2025-03-10) ==
|
||||
|
||||
=== Highlights ===
|
||||
|
||||
* ui: tags: Add tag search/filter for system page
|
||||
|
||||
=== Other Changes ===
|
||||
|
||||
* action_utils: Ensure that package are unheld if dist upgrade fails
|
||||
* locale: Update translations for Ukrainian
|
||||
* setup: Fix issue with pending app update and force upgrade
|
||||
* sogo: Fix a typo in tags
|
||||
* ui: Minor change with renaming a variable
|
||||
* ui: system: When canceling search stay on current page
|
||||
* ui: tags: Minor refactoring in menu filtering and sorting
|
||||
* ui: tags: Redirect to apps or system page appropriately
|
||||
* ui: tags: Show tags on all cards pages if present
|
||||
* upgrades: Drop special handling for searx
|
||||
* upgrades: Log apt output to journal during dist upgrade
|
||||
* upgrades: Log messages using python logging framework
|
||||
* upgrades: Minor refactor to pre-dist upgrade checks
|
||||
* upgrades: Perform easier checks first during dist upgrade
|
||||
* upgrades: Perform sources file update more reliably
|
||||
* upgrades: Refactor code for disabling Quassel during dist-upgrade
|
||||
* upgrades: Refactor code to disable snapshots
|
||||
* upgrades: Refactor code to hold packages
|
||||
* upgrades: Refactor code to retrieve the new codename
|
||||
* upgrades: Relax list of packages to hold during dist upgrade
|
||||
* upgrades: Simplify dist upgrades checks using exceptions
|
||||
* upgrades: Simplify some global names
|
||||
* upgrades: Split dist upgrade into a separate module
|
||||
* upgrades: Split the main dist upgrade code
|
||||
* upgrades: Use bind mounts to edit sources file only upon completion
|
||||
* upgrades: Use systemd service status instead of flag file
|
||||
* upgrades: Use systemd-run to create transient service
|
||||
* upgrades: tests: Add unit tests for dist upgrade methods
|
||||
|
||||
== FreedomBox 25.4.1 (2025-03-02) ==
|
||||
|
||||
* debian: Move e2fsprogs to Recommends
|
||||
|
||||
@ -78,16 +78,10 @@ Auto-update is recommended for most users. However if you want to do the update
|
||||
* Take backups of your apps' data before performing the update.
|
||||
* Create a system snapshot before you begin.
|
||||
* General [[DebianUpgrade|instructions]] for upgrading Debian distribution are available.
|
||||
* Some packages are known to have prompts during upgrade, due to modified conffiles. It is recommended not to upgrade these packages manually, but rather to allow !FreedomBox to handle their upgrade automatically. This applies to the following packages:
|
||||
* bind9
|
||||
* Some packages are known to have prompts during upgrade, due to modified conffiles. It is recommended not to upgrade these packages manually, but rather to allow !FreedomBox to handle their upgrade automatically. For upgrade to Debian 13 "trixie", this applies to the following packages:
|
||||
* firewalld
|
||||
* janus
|
||||
* minetest-server
|
||||
* minidlna
|
||||
* mumble-server
|
||||
* radicale
|
||||
* roundcube-core
|
||||
* tt-rss
|
||||
|
||||
## END_INCLUDE
|
||||
|
||||
|
||||
@ -103,6 +103,10 @@
|
||||
<<Include(FreedomBox/Hardware/RaspberryPi4B, , to="## END_INCLUDE")>>
|
||||
<<Include(FreedomBox/Hardware/USBWiFi, , to="## END_INCLUDE")>>
|
||||
|
||||
= Debian Upgrade Notes =
|
||||
|
||||
<<Include(FreedomBox/DebianUpgradeNotes, , from="## BEGIN_INCLUDE", to="## END_INCLUDE")>>
|
||||
|
||||
= Release Notes =
|
||||
|
||||
<<Include(FreedomBox/ReleaseNotes, , from="## BEGIN_INCLUDE", to="## END_INCLUDE")>>
|
||||
|
||||
@ -103,6 +103,10 @@
|
||||
<<Include(FreedomBox/Hardware/RaspberryPi4B, , to="## END_INCLUDE")>>
|
||||
<<Include(FreedomBox/Hardware/USBWiFi, , to="## END_INCLUDE")>>
|
||||
|
||||
= Debian Upgrade Notes =
|
||||
|
||||
<<Include(FreedomBox/DebianUpgradeNotes, , from="## BEGIN_INCLUDE", to="## END_INCLUDE")>>
|
||||
|
||||
= Release Notes =
|
||||
|
||||
<<Include(FreedomBox/ReleaseNotes, , from="## BEGIN_INCLUDE", to="## END_INCLUDE")>>
|
||||
|
||||
@ -8,6 +8,43 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f
|
||||
|
||||
The following are the release notes for each !FreedomBox version.
|
||||
|
||||
== FreedomBox 25.5 (2025-03-10) ==
|
||||
|
||||
=== Highlights ===
|
||||
|
||||
* ui: tags: Add tag search/filter for system page
|
||||
|
||||
=== Other Changes ===
|
||||
|
||||
* action_utils: Ensure that package are unheld if dist upgrade fails
|
||||
* locale: Update translations for Ukrainian
|
||||
* setup: Fix issue with pending app update and force upgrade
|
||||
* sogo: Fix a typo in tags
|
||||
* ui: Minor change with renaming a variable
|
||||
* ui: system: When canceling search stay on current page
|
||||
* ui: tags: Minor refactoring in menu filtering and sorting
|
||||
* ui: tags: Redirect to apps or system page appropriately
|
||||
* ui: tags: Show tags on all cards pages if present
|
||||
* upgrades: Drop special handling for searx
|
||||
* upgrades: Log apt output to journal during dist upgrade
|
||||
* upgrades: Log messages using python logging framework
|
||||
* upgrades: Minor refactor to pre-dist upgrade checks
|
||||
* upgrades: Perform easier checks first during dist upgrade
|
||||
* upgrades: Perform sources file update more reliably
|
||||
* upgrades: Refactor code for disabling Quassel during dist-upgrade
|
||||
* upgrades: Refactor code to disable snapshots
|
||||
* upgrades: Refactor code to hold packages
|
||||
* upgrades: Refactor code to retrieve the new codename
|
||||
* upgrades: Relax list of packages to hold during dist upgrade
|
||||
* upgrades: Simplify dist upgrades checks using exceptions
|
||||
* upgrades: Simplify some global names
|
||||
* upgrades: Split dist upgrade into a separate module
|
||||
* upgrades: Split the main dist upgrade code
|
||||
* upgrades: Use bind mounts to edit sources file only upon completion
|
||||
* upgrades: Use systemd service status instead of flag file
|
||||
* upgrades: Use systemd-run to create transient service
|
||||
* upgrades: tests: Add unit tests for dist upgrade methods
|
||||
|
||||
== FreedomBox 25.4.1 (2025-03-02) ==
|
||||
|
||||
* debian: Move e2fsprogs to Recommends
|
||||
|
||||
@ -3,4 +3,4 @@
|
||||
Package init file.
|
||||
"""
|
||||
|
||||
__version__ = '25.4.1'
|
||||
__version__ = '25.5'
|
||||
|
||||
@ -449,14 +449,14 @@ def is_disk_image():
|
||||
return os.path.exists('/var/lib/freedombox/is-freedombox-disk-image')
|
||||
|
||||
|
||||
def run_apt_command(arguments):
|
||||
def run_apt_command(arguments, stdout=subprocess.DEVNULL):
|
||||
"""Run apt-get with provided arguments."""
|
||||
command = ['apt-get', '--assume-yes', '--quiet=2'] + arguments
|
||||
|
||||
env = os.environ.copy()
|
||||
env['DEBIAN_FRONTEND'] = 'noninteractive'
|
||||
process = subprocess.run(command, stdin=subprocess.DEVNULL,
|
||||
stdout=subprocess.DEVNULL, env=env, check=False)
|
||||
process = subprocess.run(command, stdin=subprocess.DEVNULL, stdout=stdout,
|
||||
env=env, check=False)
|
||||
return process.returncode
|
||||
|
||||
|
||||
@ -475,19 +475,20 @@ def apt_hold(packages):
|
||||
|
||||
"""
|
||||
held_packages = []
|
||||
for package in packages:
|
||||
current_hold = subprocess.check_output(
|
||||
['apt-mark', 'showhold', package])
|
||||
if not current_hold:
|
||||
process = subprocess.run(['apt-mark', 'hold', package],
|
||||
check=False)
|
||||
if process.returncode == 0: # success
|
||||
held_packages.append(package)
|
||||
try:
|
||||
for package in packages:
|
||||
current_hold = subprocess.check_output(
|
||||
['apt-mark', 'showhold', package])
|
||||
if not current_hold:
|
||||
process = subprocess.run(['apt-mark', 'hold', package],
|
||||
check=False)
|
||||
if process.returncode == 0: # success
|
||||
held_packages.append(package)
|
||||
|
||||
yield held_packages
|
||||
|
||||
for package in held_packages:
|
||||
subprocess.check_call(['apt-mark', 'unhold', package])
|
||||
yield held_packages
|
||||
finally:
|
||||
for package in held_packages:
|
||||
subprocess.check_call(['apt-mark', 'unhold', package])
|
||||
|
||||
|
||||
@contextmanager
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2023-10-19 06:18+0000\n"
|
||||
"Last-Translator: Shaik <arifashaik807@gmail.com>\n"
|
||||
"Language-Team: Arabic <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2555,7 +2555,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4208,7 +4208,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6142,7 +6142,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7050,10 +7050,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7797,27 +7793,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8851,14 +8847,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9065,6 +9053,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9095,11 +9091,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2568,7 +2568,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4229,7 +4229,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6167,7 +6167,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7077,10 +7077,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7824,27 +7820,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8878,14 +8874,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9092,6 +9080,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9122,11 +9118,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@ -2548,7 +2548,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4191,7 +4191,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6121,7 +6121,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7027,10 +7027,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7773,27 +7769,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8815,14 +8811,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9029,6 +9017,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9057,11 +9053,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,10 +7,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-02-25 21:04+0000\n"
|
||||
"Last-Translator: 109247019824 <109247019824@users.noreply.hosted.weblate.org>"
|
||||
"\n"
|
||||
"Last-Translator: 109247019824 <109247019824@users.noreply.hosted.weblate."
|
||||
"org>\n"
|
||||
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/freedombox/"
|
||||
"freedombox/bg/>\n"
|
||||
"Language: bg\n"
|
||||
@ -2670,7 +2670,7 @@ msgstr "Включено"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Изключено"
|
||||
|
||||
@ -4391,7 +4391,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr "Сървърът на Mumble е настроен"
|
||||
|
||||
@ -6430,7 +6430,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7366,10 +7366,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "Webmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr "Календар"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr "Адресна книга"
|
||||
@ -8201,11 +8197,22 @@ msgstr ""
|
||||
"Автоматичното обновяване, по подразбиране, се извършва всеки ден. Извършете "
|
||||
"го за първи път ръчно сега."
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Започнато е обновяване на дистрибуцията"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Започнато е обновяване до следващото стабилно издание. То може да отнеме "
|
||||
"дълго време."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "Обновяването на дистрибуцията не може да бъде стартирано"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -8216,18 +8223,7 @@ msgstr ""
|
||||
"включено нов опит за обновяване на дистрибуцията ще бъде направен отново "
|
||||
"след 24 часа."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Започнато е обновяване на дистрибуцията"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Започнато е обновяване до следващото стабилно издание. То може да отнеме "
|
||||
"дълго време."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "Проверка за задържани от обновяване пакети"
|
||||
|
||||
@ -9312,14 +9308,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Услугата <em>%(service_name)s</em> не работи."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr "Търсене по етикети"
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr "Изчистване на всички етикети"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9532,6 +9520,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Обновяване"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr "Търсене по етикети"
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr "Изчистване на всички етикети"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Резервно копие"
|
||||
@ -9562,11 +9558,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr "Тук"
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Настройките не са променени"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "преди премахване на {app_id}"
|
||||
@ -9575,6 +9571,9 @@ msgstr "преди премахване на {app_id}"
|
||||
msgid "Gujarati"
|
||||
msgstr "Гуджарати"
|
||||
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "Календар"
|
||||
|
||||
#~ msgid "Set Domain Name"
|
||||
#~ msgstr "Име на домейн"
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2021-06-16 07:33+0000\n"
|
||||
"Last-Translator: Oymate <dhruboadittya96@gmail.com>\n"
|
||||
"Language-Team: Bengali <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2594,7 +2594,7 @@ msgstr "সক্রিয়"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "নিষ্ক্রিয়"
|
||||
|
||||
@ -4245,7 +4245,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6183,7 +6183,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7093,10 +7093,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7841,27 +7837,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8888,14 +8884,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9104,6 +9092,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9132,11 +9128,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-02-27 05:06+0000\n"
|
||||
"Last-Translator: Jiří Podhorecký <j.podhorecky@volny.cz>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2793,7 +2793,7 @@ msgstr "Zapnuto"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Vypnuto"
|
||||
|
||||
@ -4703,7 +4703,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr "Server Mumble je nakonfigurován"
|
||||
|
||||
@ -6923,7 +6923,7 @@ msgstr ""
|
||||
"své uživatelské jméno. Po kliknutí na tlačítko vyhledávání se zobrazí seznam "
|
||||
"existujících kalendářů a adresářů."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr "Kalendář"
|
||||
|
||||
@ -7966,10 +7966,6 @@ msgstr "Thunderbird + SOGo konektor"
|
||||
msgid "Webmail"
|
||||
msgstr "Webmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr "Kalendář"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr "Záznamník adres"
|
||||
@ -8829,11 +8825,21 @@ msgstr ""
|
||||
"Automatická aktualizace softwaru probíhá ve výchozím nastavení denně. Poprvé "
|
||||
"ji nyní spusťte ručně."
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Zahájena aktualizace distribuce"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Zahájena aktualizace na další stabilní verzi. Dokončení může trvat dlouho."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "Nelze spustit aktualizaci distribuce"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -8843,17 +8849,7 @@ msgstr ""
|
||||
"distribuce. Zajistěte, aby bylo volných alespoň 5 GB. Aktualizace distribuce "
|
||||
"se bude opakovat po 24 hodinách, pokud je povolena."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Zahájena aktualizace distribuce"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Zahájena aktualizace na další stabilní verzi. Dokončení může trvat dlouho."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "Kontrola zadržení balíčku"
|
||||
|
||||
@ -9996,14 +9992,6 @@ msgstr "Instalace"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Služba <em>%(service_name)s</em> není spuštěná."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr "Hledání pomocí štítků"
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr "Vymazat všechny štítky"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10232,6 +10220,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Aktualizovat"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr "Hledání pomocí štítků"
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr "Vymazat všechny štítky"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Záloha"
|
||||
@ -10262,11 +10258,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr "Zde"
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Nastavení se nezměnila"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "před odinstalací {app_id}"
|
||||
@ -10275,6 +10271,9 @@ msgstr "před odinstalací {app_id}"
|
||||
msgid "Gujarati"
|
||||
msgstr "gudžarátština"
|
||||
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "Kalendář"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "Stav není k dispozici."
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: FreedomBox UI\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2935,7 +2935,7 @@ msgstr "Aktiveret"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Deaktiveret"
|
||||
|
||||
@ -4871,7 +4871,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Mumble server is running"
|
||||
msgid "Mumble server is configured"
|
||||
@ -7112,7 +7112,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -8172,10 +8172,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -9034,29 +9030,29 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Automatisk opdatering deaktiveret"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Automatisk opdatering deaktiveret"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -10255,14 +10251,6 @@ msgstr "Installation"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Tjenestesøgningstjenesten er ikke aktiv"
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10491,6 +10479,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Opdater"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -10526,11 +10522,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Indstilling uændret"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: FreedomBox UI\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-02-27 05:06+0000\n"
|
||||
"Last-Translator: Dietmar <sagen@permondes.de>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2856,7 +2856,7 @@ msgstr "Aktiviert"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Deaktiviert"
|
||||
|
||||
@ -4819,7 +4819,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr "Mumble-Server ist konfiguriert"
|
||||
|
||||
@ -7077,7 +7077,7 @@ msgstr ""
|
||||
"freedombox.adresse>) und ihren Benutzernamen. Wenn Sie auf den Suchen-Knopf "
|
||||
"drücken, werden die bestehenden Kalender und Adressbücher aufgelistet."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr "Kalender"
|
||||
|
||||
@ -8138,10 +8138,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "Webmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr "Kalender"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr "Adressbuch"
|
||||
@ -9026,11 +9022,22 @@ msgstr ""
|
||||
"Die automatische Software-Aktualisierung wird standardmäßig täglich "
|
||||
"ausgeführt. Führen Sie es jetzt zum ersten Mal manuell aus."
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Distributions-Upgrade gestartet"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Das Update auf die nächste stabile Version wurde gestartet. Dies kann eine "
|
||||
"lange Zeit in Anspruch nehmen."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "Distributions-Update konnte nicht gestartet werden"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -9041,18 +9048,7 @@ msgstr ""
|
||||
"mindestens 5 GB frei sind. Das Distributions-Update wird nach 24 Stunden "
|
||||
"erneut versucht, falls aktiviert."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Distributions-Upgrade gestartet"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Das Update auf die nächste stabile Version wurde gestartet. Dies kann eine "
|
||||
"lange Zeit in Anspruch nehmen."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "Auf Paket-Sperren überprüfen"
|
||||
|
||||
@ -10230,14 +10226,6 @@ msgstr "Installation"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Dienst <em>%(service_name)s</em> läuft nicht."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr "Suche mit Schlagwörtern"
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr "Alle Schlagwörter löschen"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10465,6 +10453,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Aktualisieren"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr "Suche mit Schlagwörtern"
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr "Alle Schlagwörter löschen"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Sicherungskopie"
|
||||
@ -10495,11 +10491,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr "Hier"
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Einstellung unverändert"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "vor der Deinstallation von {app_id}"
|
||||
@ -10508,6 +10504,9 @@ msgstr "vor der Deinstallation von {app_id}"
|
||||
msgid "Gujarati"
|
||||
msgstr "Gujarati"
|
||||
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "Kalender"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "Kein Status verfügbar."
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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"
|
||||
@ -2549,7 +2549,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4192,7 +4192,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6122,7 +6122,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7028,10 +7028,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7774,27 +7770,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8816,14 +8812,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9030,6 +9018,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9058,11 +9054,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2022-09-14 17:20+0000\n"
|
||||
"Last-Translator: ikmaak <info@ikmaak.nl>\n"
|
||||
"Language-Team: Greek <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2979,7 +2979,7 @@ msgstr "Ενεργοποιήθηκε"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Απενεργοποιήθηκε"
|
||||
|
||||
@ -4989,7 +4989,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -7259,7 +7259,7 @@ msgstr ""
|
||||
"κλικ στο κουμπί αναζήτηση σε λίστα με υπάρχοντα ημερολόγια και βιβλία "
|
||||
"διευθύνσεων."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calendar"
|
||||
@ -8388,12 +8388,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "GNOME Calendar"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -9281,29 +9275,29 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Oι αυτόματες ενημερώσεις απενεργοποιήθηκαν"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Oι αυτόματες ενημερώσεις απενεργοποιήθηκαν"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -10534,18 +10528,6 @@ msgstr "Εγκατάσταση"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Η υπηρεσία <em>%(service_name)s </em> δεν εκτελείται."
|
||||
|
||||
#: templates/apps.html:33
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Αναζήτηση στο διαδίκτυο"
|
||||
|
||||
#: templates/apps.html:46
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Αναζήτηση στο διαδίκτυο"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10781,6 +10763,18 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Ενημερωμένη έκδοση"
|
||||
|
||||
#: templates/tags.html:24
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Αναζήτηση στο διαδίκτυο"
|
||||
|
||||
#: templates/tags.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Αναζήτηση στο διαδίκτυο"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -10816,11 +10810,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Οι ρυθμίσεις δεν άλλαξαν"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
@ -10829,6 +10823,11 @@ msgstr ""
|
||||
msgid "Gujarati"
|
||||
msgstr "Gujarati"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "GNOME Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "GNOME Calendar"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "No repositories available."
|
||||
#~ msgid "No status available."
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2886,7 +2886,7 @@ msgstr "Activado"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
@ -4849,7 +4849,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Mumble server is running"
|
||||
msgid "Mumble server is configured"
|
||||
@ -7110,7 +7110,7 @@ msgstr ""
|
||||
"freedombox>) y su nombre de usuario. Pulsando en el botón de búsqueda le "
|
||||
"mostrará un listado de los calendarios y agendas existentes."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calendar"
|
||||
@ -8189,12 +8189,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "Calendario GNOME"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -9083,11 +9077,22 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Iniciada la actualización de la distribución"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Se inició la actualización a la nueva publicación estable. Podría llevar "
|
||||
"mucho tiempo completarla."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "No se pudo iniciar la actualización de la distribución"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -9098,18 +9103,7 @@ msgstr ""
|
||||
"libres. Si está habilitada, la actualización de la distribución se "
|
||||
"reintentará tras 24h ."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Iniciada la actualización de la distribución"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Se inició la actualización a la nueva publicación estable. Podría llevar "
|
||||
"mucho tiempo completarla."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "Comprobar si hay paquetes retenidos"
|
||||
|
||||
@ -10280,18 +10274,6 @@ msgstr "Instalación"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "El servidor <em>%(service_name)s</em> no se está ejecutando."
|
||||
|
||||
#: templates/apps.html:33
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Buscar en la web"
|
||||
|
||||
#: templates/apps.html:46
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Buscar en la web"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10518,6 +10500,18 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Actualización"
|
||||
|
||||
#: templates/tags.html:24
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Buscar en la web"
|
||||
|
||||
#: templates/tags.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Buscar en la web"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Copia de seguridad"
|
||||
@ -10548,11 +10542,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Configuración sin cambio"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "antes de desinstalar {app_id}"
|
||||
@ -10561,6 +10555,11 @@ msgstr "antes de desinstalar {app_id}"
|
||||
msgid "Gujarati"
|
||||
msgstr "Gujarati"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "GNOME Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "Calendario GNOME"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "Estado de actualización No disponible."
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2870,7 +2870,7 @@ msgstr "فعال"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "غیرفعال"
|
||||
|
||||
@ -4727,7 +4727,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Configuration updated"
|
||||
msgid "Mumble server is configured"
|
||||
@ -6818,7 +6818,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7817,10 +7817,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -8622,28 +8618,28 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
#, fuzzy
|
||||
msgid "Distribution update started"
|
||||
msgstr "برنامه نصب شد."
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
#, fuzzy
|
||||
msgid "Distribution update started"
|
||||
msgstr "برنامه نصب شد."
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9767,14 +9763,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9991,6 +9979,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Create Connection"
|
||||
@ -10023,11 +10019,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Plinth 0.6\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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-discuss@lists.alioth.debian."
|
||||
@ -3013,7 +3013,7 @@ msgstr "ENABLED"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "DISABLED"
|
||||
|
||||
@ -4911,7 +4911,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Mumble server is running"
|
||||
msgid "Mumble server is configured"
|
||||
@ -7151,7 +7151,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -8216,10 +8216,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -9076,29 +9072,29 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "AUTOMATIC UPGRADES DISABLED"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "AUTOMATIC UPGRADES DISABLED"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -10299,14 +10295,6 @@ msgstr "INSTALLATION"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "SERVICE DISCOVERY SERVER IS NOT RUNNING"
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10543,6 +10531,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "UPDATE URL"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "PageKite Account"
|
||||
@ -10578,11 +10574,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "SETTING UNCHANGED"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: FreedomBox UI\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-01-05 16:52+0000\n"
|
||||
"Last-Translator: Coucouf <coucouf@coucouf.fr>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2867,7 +2867,7 @@ msgstr "Activé"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Désactivé"
|
||||
|
||||
@ -4822,7 +4822,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Mumble server is running"
|
||||
msgid "Mumble server is configured"
|
||||
@ -7095,7 +7095,7 @@ msgstr ""
|
||||
"recherche pour afficher la liste de vos agendas et carnets d’adresses "
|
||||
"existants."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr "Calendrier"
|
||||
|
||||
@ -8159,12 +8159,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "Courriel"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "Calendrier"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -9054,11 +9048,22 @@ msgstr ""
|
||||
"La mise à jour des logiciels s'exécute par défaut quotidiennement. Pour la "
|
||||
"première fois, exécutez-la manuellement maintenant."
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Mise à niveau de la distribution démarrée"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"La mise à niveau vers la nouvelle version stable a été lancée. Cette "
|
||||
"opération peut prendre beaucoup de temps."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "Impossible de lancer la mise à niveau de la distribution"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -9069,18 +9074,7 @@ msgstr ""
|
||||
"sont disponibles. Si la mise à niveau automatique de la distribution est "
|
||||
"activée, elle sera retentée dans 24H."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Mise à niveau de la distribution démarrée"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"La mise à niveau vers la nouvelle version stable a été lancée. Cette "
|
||||
"opération peut prendre beaucoup de temps."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "Vérifier la mise en attente des paquets"
|
||||
|
||||
@ -10260,14 +10254,6 @@ msgstr "Installation"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Le service <em>%(service_name)s</em> n’est pas actif."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr "Recherches avec des étiquettes"
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr "Supprimer toutes les étiquettes"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10499,6 +10485,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Mettre à jour"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr "Recherches avec des étiquettes"
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr "Supprimer toutes les étiquettes"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Sauvegarder"
|
||||
@ -10529,11 +10523,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr "Ici"
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Paramètre inchangé"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "avant la désinstallation de {app_id}"
|
||||
@ -10542,6 +10536,11 @@ msgstr "avant la désinstallation de {app_id}"
|
||||
msgid "Gujarati"
|
||||
msgstr "Gujarati"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "Calendrier"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "Aucun statut disponible."
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2565,7 +2565,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4224,7 +4224,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6164,7 +6164,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7078,10 +7078,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7829,27 +7825,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8890,14 +8886,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9106,6 +9094,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9136,11 +9132,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2800,7 +2800,7 @@ msgstr "સક્ષમ કરેલું"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "અક્ષમ કરેલું"
|
||||
|
||||
@ -4531,7 +4531,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6524,7 +6524,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7448,10 +7448,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "GnuDIP Server Address"
|
||||
@ -8229,29 +8225,29 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
#, fuzzy
|
||||
#| msgid "User registrations disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "વપરાશકર્તા રજીસ્ટ્રેશન અક્ષમ છે"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
#, fuzzy
|
||||
#| msgid "User registrations disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "વપરાશકર્તા રજીસ્ટ્રેશન અક્ષમ છે"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9338,14 +9334,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9569,6 +9557,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9599,11 +9595,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "સેટિંગ યથાવત"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2023-10-19 06:30+0000\n"
|
||||
"Last-Translator: Shaik <arifashaik807@gmail.com>\n"
|
||||
"Language-Team: Hindi <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2966,7 +2966,7 @@ msgstr "सक्षम किया गया है"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "अक्षम किया गया है"
|
||||
|
||||
@ -4895,7 +4895,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "ममबल"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -7131,7 +7131,7 @@ msgstr ""
|
||||
"(जैसे http://localhost:5232) और अपने यूसरनाम दर्ज करें. खोज बटन पर क्लिक करने से मौजूदा "
|
||||
"कैलेंडर और पता पुस्तिकाएं सूचीबद्ध होंगी."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calendar"
|
||||
@ -8206,12 +8206,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "गनोम कैलेंडर"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -9107,29 +9101,29 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "ऑटोमेटिक अपग्रेडस अक्षम किया गया"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "ऑटोमेटिक अपग्रेडस अक्षम किया गया"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -10336,18 +10330,6 @@ msgstr "इंस्टालेशन"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "सर्विस <em>%(service_name)s</em> नहीं चल रहा है."
|
||||
|
||||
#: templates/apps.html:33
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "वेब सरच किजिये"
|
||||
|
||||
#: templates/apps.html:46
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "वेब सरच किजिये"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10568,6 +10550,18 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "अपडेट"
|
||||
|
||||
#: templates/tags.html:24
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "वेब सरच किजिये"
|
||||
|
||||
#: templates/tags.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "वेब सरच किजिये"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -10603,11 +10597,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "सेटिंग स्थिर है"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
@ -10616,6 +10610,11 @@ msgstr ""
|
||||
msgid "Gujarati"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "GNOME Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "गनोम कैलेंडर"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Tor relay port available"
|
||||
#~ msgid "No status available."
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2022-10-24 18:39+0000\n"
|
||||
"Last-Translator: Sunil Mohan Adapa <sunil@medhas.org>\n"
|
||||
"Language-Team: Hungarian <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2941,7 +2941,7 @@ msgstr "Engedélyezve"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Letiltva"
|
||||
|
||||
@ -4927,7 +4927,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -7240,7 +7240,7 @@ msgstr ""
|
||||
"és a felhasználónevet. A keresés gombra kattintva ki lesz listázva az összes "
|
||||
"elérhető naptár és címjegyzék."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calendar"
|
||||
@ -8325,12 +8325,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "GNOME Calendar"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -9210,11 +9204,22 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "A disztribúció frissítése elindult"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Elkezdődött a frissítés a következő stabil kiadásra. Ez hosszú időt vehet "
|
||||
"igénybe."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "A disztribúció frissítése nem tudott elindulni"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -9225,18 +9230,7 @@ msgstr ""
|
||||
"disztribúció frissítését a rendszer 24 óra múlva újrapróbálja, ha "
|
||||
"engedélyezve van."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "A disztribúció frissítése elindult"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Elkezdődött a frissítés a következő stabil kiadásra. Ez hosszú időt vehet "
|
||||
"igénybe."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -10443,18 +10437,6 @@ msgstr "Telepítés"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "A szolgáltatás nem fut (<em>%(service_name)s</em>)."
|
||||
|
||||
#: templates/apps.html:33
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Keresés a weben"
|
||||
|
||||
#: templates/apps.html:46
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Keresés a weben"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10683,6 +10665,18 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Frissítés"
|
||||
|
||||
#: templates/tags.html:24
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Keresés a weben"
|
||||
|
||||
#: templates/tags.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Keresés a weben"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -10718,11 +10712,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "A beállítás változatlan"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
@ -10731,6 +10725,11 @@ msgstr ""
|
||||
msgid "Gujarati"
|
||||
msgstr "Gudzsaráti"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "GNOME Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "GNOME Calendar"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "Nincs elérhető állapot."
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Indonesian (FreedomBox)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2919,7 +2919,7 @@ msgstr "Aktifkan"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Non-Aktifkan"
|
||||
|
||||
@ -4793,7 +4793,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6791,7 +6791,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calendar"
|
||||
@ -7768,12 +7768,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "Kalender GNOME"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -8569,27 +8563,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Pembaruan distribusi dimulai"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Pembaruan distribusi dimulai"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9688,18 +9682,6 @@ msgstr "Pemasangan"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Layanan <em>%(service_name)s</em> tidak berjalan."
|
||||
|
||||
#: templates/apps.html:33
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Jelajahi web"
|
||||
|
||||
#: templates/apps.html:46
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Jelajahi web"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9914,6 +9896,18 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Memperbarui"
|
||||
|
||||
#: templates/tags.html:24
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Jelajahi web"
|
||||
|
||||
#: templates/tags.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Jelajahi web"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -9949,11 +9943,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
@ -9962,6 +9956,11 @@ msgstr ""
|
||||
msgid "Gujarati"
|
||||
msgstr "Bahasa Gujarat"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "GNOME Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "Kalender GNOME"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "No libraries available."
|
||||
#~ msgid "No status available."
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2022-09-14 17:19+0000\n"
|
||||
"Last-Translator: ikmaak <info@ikmaak.nl>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2870,7 +2870,7 @@ msgstr "Abilitato"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Disabilitato"
|
||||
|
||||
@ -4808,7 +4808,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6953,7 +6953,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7893,10 +7893,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -8678,27 +8674,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9759,14 +9755,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9977,6 +9965,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -10010,11 +10006,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Impostazioni invariate"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2023-05-07 23:50+0000\n"
|
||||
"Last-Translator: Nobuhiro Iwamatsu <iwamatsu@gmail.com>\n"
|
||||
"Language-Team: Japanese <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2553,7 +2553,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4196,7 +4196,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6126,7 +6126,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7032,10 +7032,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7778,27 +7774,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8820,14 +8816,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9034,6 +9022,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9062,11 +9058,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2551,7 +2551,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4194,7 +4194,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6124,7 +6124,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7032,10 +7032,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7778,27 +7774,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8820,14 +8816,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9034,6 +9022,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9062,11 +9058,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2563,7 +2563,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4212,7 +4212,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6144,7 +6144,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7054,10 +7054,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7802,27 +7798,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8844,14 +8840,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9058,6 +9046,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9086,11 +9082,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2562,7 +2562,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4211,7 +4211,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6143,7 +6143,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7053,10 +7053,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7801,27 +7797,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8843,14 +8839,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9057,6 +9045,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9085,11 +9081,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -15,7 +15,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: FreedomBox UI\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2933,7 +2933,7 @@ msgstr "Aktivert"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Deaktivert"
|
||||
|
||||
@ -4915,7 +4915,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Mumble server is running"
|
||||
msgid "Mumble server is configured"
|
||||
@ -7199,7 +7199,7 @@ msgstr ""
|
||||
"freedombox.adresse>) og ditt brukernavn. Å klikke på søkeknappen vil "
|
||||
"liste opp eksisterende kalendre og adressebøker."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calendar"
|
||||
@ -8272,12 +8272,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "GNOME-kalender"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -9155,29 +9149,29 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Automatiske oppgraderinger avslått (deaktivert)"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Automatic upgrades disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Automatiske oppgraderinger avslått (deaktivert)"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -10357,18 +10351,6 @@ msgstr "Installasjon"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Tjenesten <em>%(service_name)s</em> kjører ikke."
|
||||
|
||||
#: templates/apps.html:33
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Søk på nettet"
|
||||
|
||||
#: templates/apps.html:46
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Søk på nettet"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10595,6 +10577,18 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Oppdater"
|
||||
|
||||
#: templates/tags.html:24
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Søk på nettet"
|
||||
|
||||
#: templates/tags.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Søk på nettet"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -10629,11 +10623,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Oppsett uendret"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "før avinstallering av {app_id}"
|
||||
@ -10642,6 +10636,11 @@ msgstr "før avinstallering av {app_id}"
|
||||
msgid "Gujarati"
|
||||
msgstr "Gujarati"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "GNOME Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "GNOME-kalender"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "No libraries available."
|
||||
#~ msgid "No status available."
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-02-07 12:01+0000\n"
|
||||
"Last-Translator: ikmaak <info@ikmaak.nl>\n"
|
||||
"Language-Team: Dutch <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2816,7 +2816,7 @@ msgstr "Ingeschakeld"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Uitgeschakeld"
|
||||
|
||||
@ -4715,7 +4715,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr "Mumble server is ingesteld"
|
||||
|
||||
@ -6941,7 +6941,7 @@ msgstr ""
|
||||
"freedombox.address>) en je gebruikersnaam. Klikken op de zoekknop zal de "
|
||||
"bestaande kalenders en adresboeken weergeven."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr "Kalender"
|
||||
|
||||
@ -7989,10 +7989,6 @@ msgstr "Thunderbird + SOGo verbinder"
|
||||
msgid "Webmail"
|
||||
msgstr "Webmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr "Kalender"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr "Adresboek"
|
||||
@ -8857,11 +8853,20 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Distributie-update gestart"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr "Update naar volgende stabiele release gestart. Dit kan lang duren."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "Kan distributie-update niet starten"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -8871,16 +8876,7 @@ msgstr ""
|
||||
"te starten. Zorg ervoor dat ten minste 5 GB ruimte vrij is. Als "
|
||||
"ingeschakeld, wordt de distributie-update na 24 uur opnieuw geprobeerd."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Distributie-update gestart"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr "Update naar volgende stabiele release gestart. Dit kan lang duren."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "Controleer op blokkerende pakketten"
|
||||
|
||||
@ -10037,14 +10033,6 @@ msgstr "Installatie"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Service <em>%(service_name)s</em> is niet actief."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr "Zoeken op labels"
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr "Verwijder alle labels"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10272,6 +10260,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Update"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr "Zoeken op labels"
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr "Verwijder alle labels"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Back-up"
|
||||
@ -10302,11 +10298,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr "Hier"
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Instelling onveranderd"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "voor het verwijderen van {app_id}"
|
||||
@ -10315,6 +10311,9 @@ msgstr "voor het verwijderen van {app_id}"
|
||||
msgid "Gujarati"
|
||||
msgstr "Gujarati"
|
||||
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "Kalender"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "Geen status beschikbaar."
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2904,7 +2904,7 @@ msgstr "Włączony"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Wyłączony"
|
||||
|
||||
@ -4716,7 +4716,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "DNS server configuration updated"
|
||||
msgid "Mumble server is configured"
|
||||
@ -6747,7 +6747,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7724,10 +7724,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "IP addresses"
|
||||
@ -8533,29 +8529,29 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
#, fuzzy
|
||||
#| msgid "User registrations disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Rejestracja użytkowników wyłączona"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
#, fuzzy
|
||||
#| msgid "User registrations disabled"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Rejestracja użytkowników wyłączona"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9702,14 +9698,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Usługa <em>%(service_name)s</em> nie jest uruchomiona."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9939,6 +9927,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -9972,11 +9968,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Ustawienie bez zmian"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2023-05-22 15:50+0000\n"
|
||||
"Last-Translator: Frederico Gomes <fefekrzr@gmail.com>\n"
|
||||
"Language-Team: Portuguese <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2811,7 +2811,7 @@ msgstr "Ativado"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Desativado"
|
||||
|
||||
@ -4582,7 +4582,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Configuration updated"
|
||||
msgid "Mumble server is configured"
|
||||
@ -6619,7 +6619,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7561,10 +7561,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -8341,29 +8337,29 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
#, fuzzy
|
||||
#| msgid "Applications"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Aplicações"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Applications"
|
||||
msgid "Distribution update started"
|
||||
msgstr "Aplicações"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9454,14 +9450,6 @@ msgstr "Instalação"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "O serviço <em>%(service_name)s</em> não está em execução."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9674,6 +9662,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -9706,11 +9702,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Definição inalterada"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-01-14 01:32+0000\n"
|
||||
"Last-Translator: gfbdrgng <hnaofegnp@hldrive.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2844,7 +2844,7 @@ msgstr "Включено"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Выключено"
|
||||
|
||||
@ -4777,7 +4777,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Mumble server is running"
|
||||
msgid "Mumble server is configured"
|
||||
@ -7022,7 +7022,7 @@ msgstr ""
|
||||
"получите список существующих календарей и адресных книг.</your.freedombox."
|
||||
"address>."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr "Календарь"
|
||||
|
||||
@ -8066,12 +8066,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "Email"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "Календарь"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -8949,11 +8943,22 @@ msgstr ""
|
||||
"По умолчанию автоматическое обновление программного обеспечения выполняется "
|
||||
"ежедневно. В первый раз запустите его вручную."
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Началось обновление дистрибутива"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Начато обновление до следующего стабильного выпуска. Это может занять много "
|
||||
"времени."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "Не удалось запустить обновление дистрибутива"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -8963,18 +8968,7 @@ msgstr ""
|
||||
"дистрибутива. Пожалуйста, убедитесь, что свободно не менее 5 ГБ. Обновление "
|
||||
"дистрибутива будет повторно запущено через 24 часа, если это включено."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Началось обновление дистрибутива"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Начато обновление до следующего стабильного выпуска. Это может занять много "
|
||||
"времени."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "Проверьте, не задерживается ли посылка"
|
||||
|
||||
@ -10132,14 +10126,6 @@ msgstr "Установка"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Служба <em>%(service_name)s</em> не запущена."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr "Поиск по тегам"
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr "Очистить все теги"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10369,6 +10355,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Обновление"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr "Поиск по тегам"
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr "Очистить все теги"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Резервное копирование"
|
||||
@ -10399,11 +10393,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr "Вот здесь"
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Настройки без изменений"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "перед удалением {app_id}"
|
||||
@ -10412,6 +10406,11 @@ msgstr "перед удалением {app_id}"
|
||||
msgid "Gujarati"
|
||||
msgstr "Гуджарати"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "Календарь"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "Статус недоступен."
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2551,7 +2551,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4194,7 +4194,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6124,7 +6124,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7030,10 +7030,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -7776,27 +7772,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -8818,14 +8814,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9032,6 +9020,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
@ -9060,11 +9056,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2782,7 +2782,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4495,7 +4495,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6475,7 +6475,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7416,10 +7416,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr ""
|
||||
@ -8201,27 +8197,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9305,14 +9301,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9521,6 +9509,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -9554,11 +9550,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-02-25 09:20+0000\n"
|
||||
"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n"
|
||||
"Language-Team: Albanian <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2819,7 +2819,7 @@ msgstr "E aktivizuar"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "E çaktivizuar"
|
||||
|
||||
@ -4758,7 +4758,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr "Shërbyesi Mumble është formësuar"
|
||||
|
||||
@ -6996,7 +6996,7 @@ msgstr ""
|
||||
"e_freedombox-it.tuaj>) dhe emrin tuaj të përdoruesit. Klikimi mbi butonin "
|
||||
"e kërkimit do të shfaqë kalendarët dhe librat ekzistues të adresave."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr "Kalendar"
|
||||
|
||||
@ -8049,10 +8049,6 @@ msgstr "Lidhës Thunderbird + SOGo"
|
||||
msgid "Webmail"
|
||||
msgstr "Webmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr "Libër adresash"
|
||||
@ -8923,11 +8919,22 @@ msgstr ""
|
||||
"Përditësimi i automatizuar i software-it, si parazgjedhje, kryhet një herë "
|
||||
"në ditë. Për herën e parë, kryejeni dorazi tani."
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Përditësimi i shpërndarjes filloi"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Filloi përditësimi me hedhjen e re të qëndrueshme në qarkullim. Ky mund të "
|
||||
"dojë një kohë të gjatë për t’u plotësuar."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "S’u fillua dot përditësim shpërndarjeje"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -8938,18 +8945,7 @@ msgstr ""
|
||||
"Përditësimi i shpërndarjes do të riprovohet pas 24 orësh, nëse kjo është "
|
||||
"aktivizuar."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Përditësimi i shpërndarjes filloi"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Filloi përditësimi me hedhjen e re të qëndrueshme në qarkullim. Ky mund të "
|
||||
"dojë një kohë të gjatë për t’u plotësuar."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "Kontrolloni për mbajtje paketash"
|
||||
|
||||
@ -10112,14 +10108,6 @@ msgstr "Instalim"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Shërbimi <em>%(service_name)s</em> s’po xhiron."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr "Kërkoni me etiketa"
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr "Spastroji krejt etiketat"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10347,6 +10335,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Përditësoje"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr "Kërkoni me etiketa"
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr "Spastroji krejt etiketat"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Kopjeruajtje"
|
||||
@ -10377,11 +10373,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr "Këtu"
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Rregullim i pandryshuar"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "para çinstalimit të {app_id}"
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2709,7 +2709,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4398,7 +4398,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6362,7 +6362,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7295,10 +7295,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "IP addresses"
|
||||
@ -8062,27 +8058,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9120,14 +9116,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9336,6 +9324,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -9368,11 +9364,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2024-07-30 01:31+0000\n"
|
||||
"Last-Translator: bittin1ddc447d824349b2 <bittin@reimu.nl>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2898,7 +2898,7 @@ msgstr "Aktiverad"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Inaktiverad"
|
||||
|
||||
@ -4868,7 +4868,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Mumble server is running"
|
||||
msgid "Mumble server is configured"
|
||||
@ -7154,7 +7154,7 @@ msgstr ""
|
||||
"address>) och ditt användarnamn. Om du klickar på sökknappen visas en lista "
|
||||
"över befintliga kalendrar och adressböcker."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calendar"
|
||||
@ -8218,12 +8218,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "FairEmail"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "GNOME-kalender"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -9093,11 +9087,22 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Distributionsuppdateringen har startats"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Startade uppdateringen till nästa stabila utgåva. Det kan ta lång tid att "
|
||||
"slutföra."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "Det gick inte att starta distributionsuppdatering"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -9108,18 +9113,7 @@ msgstr ""
|
||||
"Distributionsuppdateringen kommer att göras ett nytt behov efter 24 timmar, "
|
||||
"om det är aktiverat."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Distributionsuppdateringen har startats"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Startade uppdateringen till nästa stabila utgåva. Det kan ta lång tid att "
|
||||
"slutföra."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -10288,18 +10282,6 @@ msgstr "Installation"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "Tjänsten <em> %(service_name)s </em> körs inte."
|
||||
|
||||
#: templates/apps.html:33
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Sök på webben"
|
||||
|
||||
#: templates/apps.html:46
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Sök på webben"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10529,6 +10511,18 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Uppdatera"
|
||||
|
||||
#: templates/tags.html:24
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "Sök på webben"
|
||||
|
||||
#: templates/tags.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "Sök på webben"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Säkerhetskopia"
|
||||
@ -10559,11 +10553,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Instänllningar oförändrade"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "innan du avinstallerar {app_id}"
|
||||
@ -10572,6 +10566,11 @@ msgstr "innan du avinstallerar {app_id}"
|
||||
msgid "Gujarati"
|
||||
msgstr "Gujarati"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "GNOME Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "GNOME-kalender"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "Ingen status tillgänglig."
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2024-12-27 01:03+0000\n"
|
||||
"Last-Translator: James Valleroy <jvalleroy@mailbox.org>\n"
|
||||
"Language-Team: Tamil <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2836,7 +2836,7 @@ msgstr "இயக்கப்பட்டது"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "முடக்கப்பட்டது"
|
||||
|
||||
@ -4725,7 +4725,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "முணுமுணுப்பு"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "grub package is configured"
|
||||
msgid "Mumble server is configured"
|
||||
@ -6935,7 +6935,7 @@ msgstr ""
|
||||
"புத்தகத்தைச் சேர்க்கவும். ரேடிகல் சேவையகத்தின் முகவரி ஐ உள்ளிடவும் (எ.கா. தேடல் பொத்தானைக் "
|
||||
"சொடுக்கு செய்தால், தற்போதுள்ள காலெண்டர்கள் மற்றும் முகவரி புத்தகங்களை பட்டியலிடும்."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr "நாட்காட்டி"
|
||||
|
||||
@ -7965,12 +7965,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "நாட்காட்டி"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -8842,11 +8836,21 @@ msgstr ""
|
||||
"தானியங்கி மென்பொருள் புதுப்பிப்பு முன்னிருப்பாக தினமும் இயங்குகிறது. முதல் முறையாக, "
|
||||
"இப்போது அதை கைமுறையாக இயக்கவும்."
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "விநியோக புதுப்பிப்பு தொடங்கியது"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"அடுத்த நிலையான வெளியீட்டிற்கு புதுப்பிப்பு தொடங்கியது. இது முடிக்க நீண்ட நேரம் ஆகலாம்."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "விநியோக புதுப்பிப்பை தொடங்க முடியவில்லை"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -8856,17 +8860,7 @@ msgstr ""
|
||||
"இலவசம் என்பதை உறுதிப்படுத்தவும். இயக்கப்பட்டால், 24 மணி நேரத்திற்குப் பிறகு விநியோக "
|
||||
"புதுப்பிப்பு மீண்டும் முயற்சிக்கப்படும்."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "விநியோக புதுப்பிப்பு தொடங்கியது"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"அடுத்த நிலையான வெளியீட்டிற்கு புதுப்பிப்பு தொடங்கியது. இது முடிக்க நீண்ட நேரம் ஆகலாம்."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "தொகுப்பு வைத்திருக்கும் சரிபார்க்கவும்"
|
||||
|
||||
@ -10008,16 +10002,6 @@ msgstr "நிறுவல்"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "பணி <em>%(service_name)s </em> இயங்கவில்லை."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr "குறிச்சொற்களுடன் தேடுங்கள்"
|
||||
|
||||
#: templates/apps.html:46
|
||||
#, fuzzy
|
||||
#| msgid "Search with tags"
|
||||
msgid "Clear all tags"
|
||||
msgstr "குறிச்சொற்களுடன் தேடுங்கள்"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10242,6 +10226,16 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "புதுப்பிப்பு"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr "குறிச்சொற்களுடன் தேடுங்கள்"
|
||||
|
||||
#: templates/tags.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Search with tags"
|
||||
msgid "Clear all tags"
|
||||
msgstr "குறிச்சொற்களுடன் தேடுங்கள்"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "காப்புப்பிரதி"
|
||||
@ -10272,11 +10266,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "மாறாமல் அமைத்தல்"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "{app_id} ஐ நிறுவல் நீக்குவதற்கு முன்"
|
||||
@ -10285,6 +10279,11 @@ msgstr "{app_id} ஐ நிறுவல் நீக்குவதற்கு
|
||||
msgid "Gujarati"
|
||||
msgstr "குசராத்தி"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "நாட்காட்டி"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "நிலை எதுவும் கிடைக்கவில்லை."
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: FreedomBox UI\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-02-22 10:04+0000\n"
|
||||
"Last-Translator: sai <phanindragvs2002@gmail.com>\n"
|
||||
"Language-Team: Telugu <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2844,7 +2844,7 @@ msgstr "క్రియాశీలం"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "నిలిపివేయబడింది"
|
||||
|
||||
@ -4758,7 +4758,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "మంబుల్"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
#, fuzzy
|
||||
#| msgid "Mumble server is running"
|
||||
msgid "Mumble server is configured"
|
||||
@ -6985,7 +6985,7 @@ msgstr ""
|
||||
"శోధన బటన్పై క్లిక్ చేయడం ద్వారా ఇప్పటికే ఉన్న క్యాలెండర్లు మరియు చిరునామా పుస్తకాలు జాబితా చేయబడతాయి </"
|
||||
"your.freedombox.address>."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calendar"
|
||||
@ -8039,12 +8039,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "ఫెయిర్ఇమెయిల్"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
#, fuzzy
|
||||
#| msgid "GNOME Calendar"
|
||||
msgid "Calender"
|
||||
msgstr "కేలండర్"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Address"
|
||||
@ -8892,11 +8886,20 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "పంపిణీ నవీకరణ ప్రారంభమైంది"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr "తదుపరి స్థిరమైన విడుదలకు నవీకరణ ప్రారంభించబడింది. ఇది పూర్తి కావడానికి చాలా సమయం పట్టవచ్చు."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "పంపిణీ నవీకరణను ప్రారంభించడం సాధ్యపడలేదు"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -8905,16 +8908,7 @@ msgstr ""
|
||||
"పంపిణీ నవీకరణను ప్రారంభించడానికి రూట్ విభజనలో తగినంత ఖాళీ స్థలం లేదు. దయచేసి కనీసం 5 GB ఉచితంగా "
|
||||
"ఉండేలా చూసుకోండి. ప్రారంభించబడితే, పంపిణీ నవీకరణ 24 గంటల తర్వాత మళ్లీ ప్రయత్నించబడుతుంది."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "పంపిణీ నవీకరణ ప్రారంభమైంది"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr "తదుపరి స్థిరమైన విడుదలకు నవీకరణ ప్రారంభించబడింది. ఇది పూర్తి కావడానికి చాలా సమయం పట్టవచ్చు."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -10077,18 +10071,6 @@ msgstr "నిక్షిప్తం"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "<em>%(service_name)s</em> సేవ నడవడం లేదు."
|
||||
|
||||
#: templates/apps.html:33
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "అంతర్జాలమును శోధింపుము"
|
||||
|
||||
#: templates/apps.html:46
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "అంతర్జాలమును శోధింపుము"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10315,6 +10297,18 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "నవీకరణ"
|
||||
|
||||
#: templates/tags.html:24
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Search with tags"
|
||||
msgstr "అంతర్జాలమును శోధింపుము"
|
||||
|
||||
#: templates/tags.html:37
|
||||
#, fuzzy
|
||||
#| msgid "Search the web"
|
||||
msgid "Clear all tags"
|
||||
msgstr "అంతర్జాలమును శోధింపుము"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -10347,11 +10341,11 @@ msgstr "మొత్తం యాప్ డేటా మరియు కాన
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "మారకుండా అమర్చుతోంది"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "{app_id} ని అన్ఇన్స్టాల్ చేయడానికి ముందు"
|
||||
@ -10361,6 +10355,11 @@ msgstr "{app_id} ని అన్ఇన్స్టాల్ చేయడా
|
||||
msgid "Gujarati"
|
||||
msgstr "గుజరాతీ"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "GNOME Calendar"
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "కేలండర్"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "స్థితి అందుబాటులో లేదు."
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-02-25 06:15+0000\n"
|
||||
"Last-Translator: Burak Yavuz <hitowerdigit@hotmail.com>\n"
|
||||
"Language-Team: Turkish <https://hosted.weblate.org/projects/freedombox/"
|
||||
@ -2800,7 +2800,7 @@ msgstr "Etkinleştirildi"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "Etkisizleştirildi"
|
||||
|
||||
@ -4727,7 +4727,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr "Mumble"
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr "Mumble sunucusu yapılandırıldı"
|
||||
|
||||
@ -6952,7 +6952,7 @@ msgstr ""
|
||||
"kullanıcı adınızı girin. Ara düğmesine tıklamak, varolan takvimleri ve adres "
|
||||
"defterlerini listeleyecektir."
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr "Takvim"
|
||||
|
||||
@ -8001,10 +8001,6 @@ msgstr "Thunderbird + SOGo bağlayıcı"
|
||||
msgid "Webmail"
|
||||
msgstr "Web posta"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr "Takvim"
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr "Adres defteri"
|
||||
@ -8872,11 +8868,22 @@ msgstr ""
|
||||
"Otomatik yazılım güncellemesi varsayılan olarak günlük çalışır. Şimdi ilk "
|
||||
"kez el ile çalıştırın."
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "Dağıtım güncellemesi başlatıldı"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Bir sonraki kararlı yayıma güncelleme başlatıldı. Bunun tamamlanması uzun "
|
||||
"zaman alabilir."
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr "Dağıtım güncellemesi başlatılamadı"
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
@ -8886,18 +8893,7 @@ msgstr ""
|
||||
"Lütfen en az 5 GB boş alan olduğundan emin olun. Dağıtım güncellemesi, "
|
||||
"etkinleştirildiyse 24 saat sonra yeniden denenecektir."
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "Dağıtım güncellemesi başlatıldı"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
"Bir sonraki kararlı yayıma güncelleme başlatıldı. Bunun tamamlanması uzun "
|
||||
"zaman alabilir."
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr "Paket bekletmelerini denetle"
|
||||
|
||||
@ -10052,14 +10048,6 @@ msgstr "Kurulum"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "<em>%(service_name)s</em> hizmeti çalışmıyor."
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr "Etiketler ile ara"
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr "Tüm etiketleri temizle"
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -10286,6 +10274,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Güncelle"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr "Etiketler ile ara"
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr "Tüm etiketleri temizle"
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "Yedekle"
|
||||
@ -10316,11 +10312,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr "Burada"
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "Ayar değişmedi"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr "{app_id} kaldırılmadan önce"
|
||||
@ -10329,6 +10325,9 @@ msgstr "{app_id} kaldırılmadan önce"
|
||||
msgid "Gujarati"
|
||||
msgstr "Gujarati"
|
||||
|
||||
#~ msgid "Calender"
|
||||
#~ msgstr "Takvim"
|
||||
|
||||
#~ msgid "No status available."
|
||||
#~ msgstr "Mevcut durum yok."
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2851,7 +2851,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4546,7 +4546,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6516,7 +6516,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7439,10 +7439,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "IP addresses"
|
||||
@ -8205,27 +8201,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9269,14 +9265,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9487,6 +9475,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "Cập nhật"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -9520,11 +9516,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,10 +7,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Plinth\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\n"
|
||||
"PO-Revision-Date: 2025-02-25 09:20+0000\n"
|
||||
"Last-Translator: 大王叫我来巡山 "
|
||||
"<hamburger2048@users.noreply.hosted.weblate.org>\n"
|
||||
"Last-Translator: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate."
|
||||
"org>\n"
|
||||
"Language-Team: Chinese (Simplified Han script) <https://hosted.weblate.org/"
|
||||
"projects/freedombox/freedombox/zh_Hans/>\n"
|
||||
"Language: zh_Hans\n"
|
||||
@ -2651,7 +2651,7 @@ msgstr "启用"
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr "已禁用"
|
||||
|
||||
@ -4340,7 +4340,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr "Mumble 服务器已配置"
|
||||
|
||||
@ -6330,7 +6330,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7252,10 +7252,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
msgid "Address book"
|
||||
msgstr "地址簿"
|
||||
@ -8020,27 +8016,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr "已启动分发更新"
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr "已启动分发更新"
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9078,14 +9074,6 @@ msgstr "安装"
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr "服务 <em>%(service_name)s</em> 未在运行。"
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9295,6 +9283,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr "更新"
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
msgid "Backup"
|
||||
msgstr "备份"
|
||||
@ -9323,11 +9319,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr "设置未改变"
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-24 20:13-0500\n"
|
||||
"POT-Creation-Date: 2025-03-10 20:08-0400\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/"
|
||||
@ -2741,7 +2741,7 @@ msgstr ""
|
||||
#: modules/firewall/templates/firewall.html:43
|
||||
#: modules/letsencrypt/templates/letsencrypt.html:71
|
||||
#: modules/snapshot/forms.py:23 modules/snapshot/forms.py:29
|
||||
#: templates/cards.html:36
|
||||
#: templates/cards.html:38
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@ -4434,7 +4434,7 @@ msgstr ""
|
||||
msgid "Mumble"
|
||||
msgstr ""
|
||||
|
||||
#: modules/mumble/__init__.py:157
|
||||
#: modules/mumble/__init__.py:158
|
||||
msgid "Mumble server is configured"
|
||||
msgstr ""
|
||||
|
||||
@ -6403,7 +6403,7 @@ msgid ""
|
||||
"existing calendars and address books."
|
||||
msgstr ""
|
||||
|
||||
#: modules/radicale/manifest.py:91
|
||||
#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@ -7328,10 +7328,6 @@ msgstr ""
|
||||
msgid "Webmail"
|
||||
msgstr "公平電子郵件"
|
||||
|
||||
#: modules/sogo/manifest.py:73
|
||||
msgid "Calender"
|
||||
msgstr ""
|
||||
|
||||
#: modules/sogo/manifest.py:74
|
||||
#, fuzzy
|
||||
#| msgid "IP addresses"
|
||||
@ -8093,27 +8089,27 @@ msgid ""
|
||||
"manually run it now."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:242
|
||||
#: modules/upgrades/__init__.py:230
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:232
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:256
|
||||
msgid "Could not start distribution update"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:244
|
||||
#: modules/upgrades/__init__.py:258
|
||||
msgid ""
|
||||
"There is not enough free space in the root partition to start the "
|
||||
"distribution update. Please ensure at least 5 GB is free. Distribution "
|
||||
"update will be retried after 24 hours, if enabled."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:255
|
||||
msgid "Distribution update started"
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:257
|
||||
msgid ""
|
||||
"Started update to next stable release. This may take a long time to complete."
|
||||
msgstr ""
|
||||
|
||||
#: modules/upgrades/__init__.py:350
|
||||
#: modules/upgrades/__init__.py:352
|
||||
msgid "Check for package holds"
|
||||
msgstr ""
|
||||
|
||||
@ -9157,14 +9153,6 @@ msgstr ""
|
||||
msgid "Service <em>%(service_name)s</em> is not running."
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:33
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/apps.html:46
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/base.html:31
|
||||
msgid ""
|
||||
"FreedomBox is a personal server designed for privacy and data ownership. It "
|
||||
@ -9373,6 +9361,14 @@ msgstr ""
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:24
|
||||
msgid "Search with tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/tags.html:37
|
||||
msgid "Clear all tags"
|
||||
msgstr ""
|
||||
|
||||
#: templates/toolbar.html:39 templates/toolbar.html:40
|
||||
#, fuzzy
|
||||
#| msgid "Backups"
|
||||
@ -9405,11 +9401,11 @@ msgstr ""
|
||||
msgid "Here"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:376
|
||||
#: views.py:414
|
||||
msgid "Setting unchanged"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:610
|
||||
#: views.py:647
|
||||
#, python-brace-format
|
||||
msgid "before uninstall of {app_id}"
|
||||
msgstr ""
|
||||
|
||||
@ -72,5 +72,6 @@ class BindApp(app_module.App):
|
||||
|
||||
def force_upgrade(self, _packages):
|
||||
"""Force upgrade the managed packages to resolve conffile prompt."""
|
||||
# Allow upgrades nay new version by keeping old configuration files
|
||||
install(['bind9'], force_configuration='old')
|
||||
return True
|
||||
|
||||
@ -88,7 +88,7 @@ class FirewallApp(app_module.App):
|
||||
if 'firewalld' not in packages:
|
||||
return False
|
||||
|
||||
# Allow upgrade from any version to any version below 3.0
|
||||
# Allow upgrade from 1.3.3 (bookworm) to 2.3.0 (trixie) and beyond 2.x.
|
||||
package = packages['firewalld']
|
||||
if Version(package['new_version']) > Version('3~'):
|
||||
return False
|
||||
|
||||
@ -109,7 +109,8 @@ class MiniDLNAApp(app_module.App):
|
||||
if 'minidlna' not in packages:
|
||||
return False
|
||||
|
||||
# Allow upgrade from 1.2.1+dfsg-1+b1 to 1.3.x
|
||||
# Allow upgrade from 1.3.0 (bookworm) to 1.3.3 (trixie) and beyond
|
||||
# 1.3.x.
|
||||
package = packages['minidlna']
|
||||
if Version(package['new_version']) > Version('1.4~'):
|
||||
return False
|
||||
|
||||
@ -106,7 +106,8 @@ class MumbleApp(app_module.App):
|
||||
if 'mumble-server' not in packages:
|
||||
return False
|
||||
|
||||
# Allow upgrades within 1.3.*
|
||||
# Allow upgrades from 1.3.4-1 (bullseye) to 1.3.4-4 (bookworm) but not
|
||||
# to 1.5.735 (trixie) and beyond.
|
||||
package = packages['mumble-server']
|
||||
if Version(package['new_version']) > Version('1.4~'):
|
||||
return False
|
||||
|
||||
@ -110,7 +110,7 @@ class RadicaleApp(app_module.App):
|
||||
if 'radicale' not in packages:
|
||||
return False
|
||||
|
||||
# Allow upgrade from 2.* to newer 2.* and 3.*
|
||||
# Allow upgrade from 3.1.8 (bookworm) to 3.4.1 (trixie) and beyond 3.x.
|
||||
package = packages['radicale']
|
||||
if Version(package['new_version']) > Version('4~'):
|
||||
return False
|
||||
|
||||
@ -111,7 +111,8 @@ class RoundcubeApp(app_module.App):
|
||||
return False
|
||||
|
||||
# Allow roundcube any version to upgrade to any version. This is okay
|
||||
# because there will no longer be conflicting file changes.
|
||||
# because there will no longer be conflicting file changes after
|
||||
# upgrade from bullseye to bookworm.
|
||||
install(['roundcube-core'], force_configuration='new')
|
||||
if self.get_component('webserver-roundcube').is_enabled():
|
||||
self.get_component('webserver-roundcube-freedombox').enable()
|
||||
|
||||
@ -70,7 +70,7 @@ backup = {
|
||||
tags = [
|
||||
_('Webmail'),
|
||||
_('Groupware'),
|
||||
_('Calender'),
|
||||
_('Calendar'),
|
||||
_('Address book'),
|
||||
_('CalDAV'),
|
||||
_('CardDAV')
|
||||
|
||||
@ -221,9 +221,23 @@ def try_start_dist_upgrade(test=False):
|
||||
"""Try to start dist upgrade."""
|
||||
from plinth.notification import Notification
|
||||
|
||||
result = privileged.start_dist_upgrade(test)
|
||||
dist_upgrade_started = result['dist_upgrade_started']
|
||||
reason = result['reason']
|
||||
try:
|
||||
privileged.start_dist_upgrade(test, _log_error=False)
|
||||
except RuntimeError as exception:
|
||||
reason = exception.args[0]
|
||||
else:
|
||||
logger.info('Started dist upgrade.')
|
||||
title = gettext_noop('Distribution update started')
|
||||
message = gettext_noop(
|
||||
'Started update to next stable release. This may take a long '
|
||||
'time to complete.')
|
||||
Notification.update_or_create(id='upgrades-dist-upgrade-started',
|
||||
app_id='upgrades', severity='info',
|
||||
title=title, message=message, actions=[{
|
||||
'type': 'dismiss'
|
||||
}], group='admin')
|
||||
return
|
||||
|
||||
if 'found-previous' in reason:
|
||||
logger.info(
|
||||
'Found previous dist-upgrade. If it was interrupted, it will '
|
||||
@ -250,20 +264,8 @@ def try_start_dist_upgrade(test=False):
|
||||
title=title, message=message, actions=[{
|
||||
'type': 'dismiss'
|
||||
}], group='admin')
|
||||
elif 'started-dist-upgrade' in reason:
|
||||
logger.info('Started dist upgrade.')
|
||||
title = gettext_noop('Distribution update started')
|
||||
message = gettext_noop(
|
||||
'Started update to next stable release. This may take a long '
|
||||
'time to complete.')
|
||||
Notification.update_or_create(id='upgrades-dist-upgrade-started',
|
||||
app_id='upgrades', severity='info',
|
||||
title=title, message=message, actions=[{
|
||||
'type': 'dismiss'
|
||||
}], group='admin')
|
||||
else:
|
||||
logger.warning('Unhandled result of start-dist-upgrade: %s, %s',
|
||||
dist_upgrade_started, reason)
|
||||
logger.warning('Unhandled result of start-dist-upgrade: %s', reason)
|
||||
|
||||
|
||||
def is_backports_requested():
|
||||
|
||||
343
plinth/modules/upgrades/distupgrade.py
Normal file
343
plinth/modules/upgrades/distupgrade.py
Normal file
@ -0,0 +1,343 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""Perform distribution upgrade."""
|
||||
|
||||
import contextlib
|
||||
import logging
|
||||
import pathlib
|
||||
import subprocess
|
||||
import time
|
||||
from typing import Generator
|
||||
|
||||
import augeas
|
||||
|
||||
from plinth import action_utils
|
||||
from plinth.modules import snapshot as snapshot_module
|
||||
|
||||
from . import utils
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
OBSOLETE_PACKAGES: list[str] = []
|
||||
|
||||
PACKAGES_WITH_PROMPTS = ['firewalld', 'minidlna', 'radicale']
|
||||
|
||||
PRE_DEBCONF_SELECTIONS: list[str] = [
|
||||
# Tell grub-pc to continue without installing grub again.
|
||||
'grub-pc grub-pc/install_devices_empty boolean true'
|
||||
]
|
||||
|
||||
sources_list = pathlib.Path('/etc/apt/sources.list')
|
||||
temp_sources_list = pathlib.Path('/etc/apt/sources.list.fbx-dist-upgrade')
|
||||
|
||||
|
||||
def _apt_run(arguments):
|
||||
"""Run an apt command and ensure that output is written to stdout."""
|
||||
return action_utils.run_apt_command(arguments, stdout=None)
|
||||
|
||||
|
||||
def _sources_list_update(old_codename: str, new_codename: str):
|
||||
"""Change the distribution in /etc/apt/sources.list."""
|
||||
logger.info('Upgrading from %s to %s...', old_codename, new_codename)
|
||||
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
|
||||
augeas.Augeas.NO_MODL_AUTOLOAD)
|
||||
aug.transform('aptsources', str(sources_list))
|
||||
aug.set('/augeas/context', '/files' + str(sources_list))
|
||||
aug.set('/augeas/save', 'newfile') # Save to a new file
|
||||
aug.load()
|
||||
|
||||
for match_ in aug.match('*'):
|
||||
dist_path = match_ + '/distribution'
|
||||
dist = aug.get(dist_path)
|
||||
if dist in (old_codename, 'stable'):
|
||||
aug.set(dist_path, new_codename)
|
||||
elif dist and (dist.startswith(old_codename + '-')
|
||||
or dist.startswith('stable' + '-')):
|
||||
new_value = new_codename + '-' + dist.partition('-')[2]
|
||||
aug.set(dist_path, new_value)
|
||||
|
||||
aug.save()
|
||||
|
||||
aug_path = sources_list.with_suffix('.list.augnew')
|
||||
aug_path.rename(temp_sources_list)
|
||||
|
||||
|
||||
def _get_new_codename(test_upgrade: bool) -> str | None:
|
||||
"""Return the codename for the next release."""
|
||||
release_file_dist = 'stable'
|
||||
if test_upgrade:
|
||||
release_file_dist = 'testing'
|
||||
|
||||
url = utils.RELEASE_FILE_URL.format(release_file_dist)
|
||||
command = ['curl', '--silent', '--location', '--fail', url]
|
||||
protocol = utils.get_http_protocol()
|
||||
if protocol == 'tor+http':
|
||||
command.insert(0, 'torsocks')
|
||||
logging.info('Package download over Tor is enabled.')
|
||||
|
||||
try:
|
||||
output = subprocess.check_output(command).decode()
|
||||
except (subprocess.CalledProcessError, FileNotFoundError):
|
||||
logging.warning('Error while checking for new %s release',
|
||||
release_file_dist)
|
||||
else:
|
||||
for line in output.split('\n'):
|
||||
if line.startswith('Codename:'):
|
||||
return line.split()[1]
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def _check(test_upgrade: bool = False) -> tuple[str, str]:
|
||||
"""Check if a distribution upgrade be performed.
|
||||
|
||||
Check for new stable release, if updates are enabled, and if there is
|
||||
enough free space for the dist upgrade.
|
||||
|
||||
If test_upgrade is True, also check for upgrade to testing.
|
||||
|
||||
Return (boolean, string) indicating if the upgrade is ready, and a reason
|
||||
if not.
|
||||
"""
|
||||
if not utils.check_auto():
|
||||
raise RuntimeError('upgrades-not-enabled')
|
||||
|
||||
if not utils.is_sufficient_free_space():
|
||||
raise RuntimeError('not-enough-free-space')
|
||||
|
||||
if action_utils.service_is_running('freedombox-dist-upgrade'):
|
||||
raise RuntimeError('found-previous')
|
||||
|
||||
from plinth.modules.upgrades import get_current_release
|
||||
release, old_codename = get_current_release()
|
||||
if release in ['unstable', 'testing', 'n/a']:
|
||||
raise RuntimeError(f'already-{release}')
|
||||
|
||||
new_codename = _get_new_codename(test_upgrade)
|
||||
if not new_codename:
|
||||
raise RuntimeError('codename-not-found')
|
||||
|
||||
if new_codename == old_codename:
|
||||
raise RuntimeError(f'already-{old_codename}')
|
||||
|
||||
return old_codename, new_codename
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def _snapshot_run_and_disable() -> Generator[None, None, None]:
|
||||
"""Take a snapshot if supported and enabled, then disable snapshots.
|
||||
|
||||
Snapshots shall be re-enabled, if originally enabled, on exiting this
|
||||
context manager..
|
||||
"""
|
||||
if not snapshot_module.is_supported():
|
||||
logger.info('Snapshots are not supported, skipping taking a snapshot.')
|
||||
yield
|
||||
return
|
||||
|
||||
reenable = False
|
||||
try:
|
||||
logger.info('Taking a snapshot before dist upgrade...')
|
||||
subprocess.run([
|
||||
'/usr/share/plinth/actions/actions', 'snapshot', 'create',
|
||||
'--no-args'
|
||||
], check=True)
|
||||
aug = snapshot_module.load_augeas()
|
||||
if snapshot_module.is_apt_snapshots_enabled(aug):
|
||||
logger.info('Disabling apt snapshots during dist upgrade...')
|
||||
subprocess.run([
|
||||
'/usr/share/plinth/actions/actions',
|
||||
'snapshot',
|
||||
'disable_apt_snapshot',
|
||||
], input='{"args": ["yes"], "kwargs": {}}'.encode(), check=True)
|
||||
reenable = True
|
||||
else:
|
||||
logger.info('Apt snapshots already disabled.')
|
||||
|
||||
yield
|
||||
finally:
|
||||
if reenable:
|
||||
logger.info('Re-enabling apt snapshots...')
|
||||
subprocess.run([
|
||||
'/usr/share/plinth/actions/actions', 'snapshot',
|
||||
'disable_apt_snapshot'
|
||||
], input='{"args": ["no"], "kwargs": {}}'.encode(), check=True)
|
||||
else:
|
||||
logger.info('Not re-enabling apt snapshots, as they were disabled '
|
||||
'before dist upgrade.')
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def _services_disable():
|
||||
"""Disable services that are seriously impacted by the upgrade."""
|
||||
# If quassel is running during dist upgrade, it may be restarted
|
||||
# several times. This causes IRC users to rapidly leave/join
|
||||
# channels. Stop quassel for the duration of the dist upgrade.
|
||||
logger.info('Stopping quassel service during dist upgrade...')
|
||||
with action_utils.service_ensure_stopped('quasselcore'):
|
||||
yield
|
||||
logger.info('Re-enabling quassel service if previously enabled...')
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def _apt_hold_packages():
|
||||
"""Apt hold some packages during dist upgrade."""
|
||||
packages = PACKAGES_WITH_PROMPTS
|
||||
packages_string = ', '.join(packages)
|
||||
|
||||
# Hold freedombox package during entire dist upgrade.
|
||||
logger.info('Holding freedombox package...')
|
||||
with action_utils.apt_hold_freedombox():
|
||||
# Hold packages known to have conffile prompts. FreedomBox service
|
||||
# will handle their upgrade later.
|
||||
logger.info('Holding packages with conffile prompts: %s...',
|
||||
packages_string)
|
||||
with action_utils.apt_hold(packages):
|
||||
yield
|
||||
logger.info(
|
||||
'Releasing holds on packages with conffile prompts: %s...',
|
||||
packages_string)
|
||||
|
||||
logger.info('Releasing hold on freedombox package...')
|
||||
|
||||
|
||||
def _debconf_set_selections() -> None:
|
||||
"""Pre-set debconf selections if they are needed for dist upgrade."""
|
||||
if PRE_DEBCONF_SELECTIONS:
|
||||
logger.info('Setting debconf selections: %s', PRE_DEBCONF_SELECTIONS)
|
||||
action_utils.debconf_set_selections(PRE_DEBCONF_SELECTIONS)
|
||||
|
||||
|
||||
def _packages_remove_obsolete() -> None:
|
||||
"""Remove obsolete packages.
|
||||
|
||||
These may prevent other packages from upgrading.
|
||||
"""
|
||||
if OBSOLETE_PACKAGES:
|
||||
logger.info('Removing packages: %s...', OBSOLETE_PACKAGES)
|
||||
_apt_run(['remove'] + OBSOLETE_PACKAGES)
|
||||
|
||||
|
||||
def _apt_update():
|
||||
"""Run 'apt update'."""
|
||||
logger.info('Updating Apt cache...')
|
||||
_apt_run(['update'])
|
||||
|
||||
|
||||
def _apt_autoremove():
|
||||
"""Run 'apt autoremove'."""
|
||||
logger.info('Running apt autoremove...')
|
||||
_apt_run(['autoremove'])
|
||||
|
||||
|
||||
def _apt_full_upgrade():
|
||||
"""Run and check if apt upgrade was successful."""
|
||||
logger.info('Running apt full-upgrade...')
|
||||
returncode = _apt_run(['full-upgrade'])
|
||||
if returncode:
|
||||
raise RuntimeError(
|
||||
'Apt full-upgrade was not successful. Distribution upgrade '
|
||||
'will be retried at a later time.')
|
||||
|
||||
|
||||
def _unattended_upgrades_run():
|
||||
"""Run unattended-upgrade once more.
|
||||
|
||||
To handle upgrading the freedombox package.
|
||||
"""
|
||||
logger.info('Running unattended-upgrade...')
|
||||
subprocess.run(['unattended-upgrade', '--verbose'], check=False)
|
||||
|
||||
|
||||
def _freedombox_restart():
|
||||
"""Restart FreedomBox service.
|
||||
|
||||
To ensure it is using the latest dependencies.
|
||||
"""
|
||||
logger.info('Restarting FreedomBox service...')
|
||||
action_utils.service_restart('plinth')
|
||||
|
||||
|
||||
def _wait():
|
||||
"""Wait for 10 minutes before performing remaining actions."""
|
||||
logger.info('Waiting for 10 minutes...')
|
||||
time.sleep(10 * 60)
|
||||
|
||||
|
||||
def _trigger_on_complete():
|
||||
"""Trigger the on complete step in a separate service."""
|
||||
# The dist-upgrade process will be run /etc/apt/sources.list file bind
|
||||
# mounted on with a modified file. So, moving modified file to the original
|
||||
# file will not be possible. For that, we need to launch a new process with
|
||||
# a different systemd service (which does not have the bind mounts).
|
||||
logger.info('Triggering on-complete to commit sources.lists')
|
||||
subprocess.run([
|
||||
'systemd-run', '--unit=freedombox-dist-upgrade-on-complete',
|
||||
'--description=Finish up upgrade to new stable Debian release',
|
||||
'/usr/share/plinth/actions/actions', 'upgrades',
|
||||
'dist_upgrade_on_complete', '--no-args'
|
||||
], check=True)
|
||||
|
||||
|
||||
def _logging_setup():
|
||||
"""Log to journal via console logging.
|
||||
|
||||
We need to capture all console logs created by apt and other commands and
|
||||
redirect them to journal. This is the default behavior when launching a
|
||||
service with systemd-run.
|
||||
|
||||
Avoid double logging to the journal by removing the systemd journal as a
|
||||
log handler..
|
||||
"""
|
||||
logging.getLogger(None).removeHandler('journal')
|
||||
|
||||
|
||||
def perform():
|
||||
"""Perform upgrade to next release of Debian."""
|
||||
_logging_setup()
|
||||
with _snapshot_run_and_disable(), \
|
||||
_services_disable(), \
|
||||
_apt_hold_packages():
|
||||
_apt_update()
|
||||
_debconf_set_selections()
|
||||
_packages_remove_obsolete()
|
||||
_apt_full_upgrade()
|
||||
_apt_autoremove()
|
||||
|
||||
_unattended_upgrades_run()
|
||||
_freedombox_restart()
|
||||
_wait()
|
||||
_apt_update()
|
||||
_trigger_on_complete()
|
||||
|
||||
|
||||
def start_service(test_upgrade: bool):
|
||||
"""Create dist upgrade service and start it."""
|
||||
# Cleanup old service
|
||||
old_service_path = pathlib.Path(
|
||||
'/run/systemd/system/freedombox-dist-upgrade.service')
|
||||
if old_service_path.exists():
|
||||
old_service_path.unlink(missing_ok=True)
|
||||
action_utils.service_daemon_reload()
|
||||
|
||||
old_codename, new_codename = _check(test_upgrade)
|
||||
|
||||
_sources_list_update(old_codename, new_codename)
|
||||
|
||||
args = [
|
||||
'--unit=freedombox-dist-upgrade',
|
||||
'--description=Upgrade to new stable Debian release',
|
||||
'--property=KillMode=process', '--property=TimeoutSec=12hr',
|
||||
f'--property=BindPaths={temp_sources_list}:{sources_list}'
|
||||
]
|
||||
subprocess.run(['systemd-run'] + args + [
|
||||
'systemd-inhibit', '/usr/share/plinth/actions/actions', 'upgrades',
|
||||
'dist_upgrade', '--no-args'
|
||||
], check=True)
|
||||
|
||||
|
||||
def on_complete():
|
||||
"""Perform cleanup operations."""
|
||||
_logging_setup()
|
||||
logger.info('Dist upgrade complete.')
|
||||
logger.info('Committing changes to /etc/apt/sources.list')
|
||||
temp_sources_list.rename(sources_list)
|
||||
@ -6,29 +6,21 @@ import os
|
||||
import pathlib
|
||||
import re
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
from plinth.action_utils import (apt_hold, apt_hold_flag, apt_hold_freedombox,
|
||||
apt_unhold_freedombox, debconf_set_selections,
|
||||
from plinth.action_utils import (apt_hold_flag, apt_unhold_freedombox,
|
||||
is_package_manager_busy, run_apt_command,
|
||||
service_daemon_reload, service_is_running,
|
||||
service_restart, service_start, service_stop)
|
||||
service_is_running)
|
||||
from plinth.actions import privileged
|
||||
from plinth.modules.apache.components import check_url
|
||||
from plinth.modules.snapshot import is_apt_snapshots_enabled
|
||||
from plinth.modules.snapshot import is_supported as snapshot_is_supported
|
||||
from plinth.modules.snapshot import load_augeas as snapshot_load_augeas
|
||||
|
||||
from . import distupgrade, utils
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
SOURCES_LIST = '/etc/apt/sources.list'
|
||||
BACKPORTS_SOURCES_LIST = '/etc/apt/sources.list.d/freedombox2.list'
|
||||
|
||||
AUTO_CONF_FILE = '/etc/apt/apt.conf.d/20auto-upgrades'
|
||||
LOG_FILE = '/var/log/unattended-upgrades/unattended-upgrades.log'
|
||||
DPKG_LOG_FILE = '/var/log/unattended-upgrades/unattended-upgrades-dpkg.log'
|
||||
RELEASE_FILE_URL = \
|
||||
'https://deb.debian.org/debian/dists/{}/Release'
|
||||
|
||||
APT_PREFERENCES_FREEDOMBOX = \
|
||||
'''Explanation: This file is managed by FreedomBox, do not edit.
|
||||
@ -53,38 +45,6 @@ Pin: release n=bookworm-backports
|
||||
Pin-Priority: 500
|
||||
'''
|
||||
|
||||
DIST_UPGRADE_OBSOLETE_PACKAGES: list[str] = []
|
||||
|
||||
DIST_UPGRADE_PACKAGES_WITH_PROMPTS = [
|
||||
'bind9', 'firewalld', 'janus', 'minetest-server', 'minidlna',
|
||||
'mumble-server', 'radicale', 'roundcube-core', 'tt-rss'
|
||||
]
|
||||
|
||||
DIST_UPGRADE_PRE_DEBCONF_SELECTIONS: list[str] = [
|
||||
# Tell grub-pc to continue without installing grub again.
|
||||
'grub-pc grub-pc/install_devices_empty boolean true'
|
||||
]
|
||||
|
||||
DIST_UPGRADE_REQUIRED_FREE_SPACE = 5000000
|
||||
|
||||
DIST_UPGRADE_SERVICE = '''
|
||||
[Unit]
|
||||
Description=Upgrade to new stable Debian release
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=systemd-inhibit /usr/share/plinth/actions/actions \
|
||||
upgrades dist_upgrade --no-args
|
||||
KillMode=process
|
||||
TimeoutSec=12hr
|
||||
'''
|
||||
|
||||
DIST_UPGRADE_SERVICE_PATH = \
|
||||
'/run/systemd/system/freedombox-dist-upgrade.service'
|
||||
|
||||
dist_upgrade_flag = pathlib.Path(
|
||||
'/var/lib/freedombox/dist-upgrade-in-progress')
|
||||
|
||||
|
||||
def _release_held_freedombox():
|
||||
"""If freedombox package was left in held state, release it.
|
||||
@ -127,25 +87,10 @@ def run():
|
||||
start_new_session=True)
|
||||
|
||||
|
||||
def _check_auto() -> bool:
|
||||
"""Check if automatic upgrades are enabled."""
|
||||
arguments = [
|
||||
'apt-config', 'shell', 'UpdateInterval',
|
||||
'APT::Periodic::Update-Package-Lists'
|
||||
]
|
||||
output = subprocess.check_output(arguments).decode()
|
||||
update_interval = 0
|
||||
match = re.match(r"UpdateInterval='(.*)'", output)
|
||||
if match:
|
||||
update_interval = int(match.group(1))
|
||||
|
||||
return bool(update_interval)
|
||||
|
||||
|
||||
@privileged
|
||||
def check_auto() -> bool:
|
||||
"""Check if automatic upgrades are enabled."""
|
||||
return _check_auto()
|
||||
return utils.check_auto()
|
||||
|
||||
|
||||
@privileged
|
||||
@ -185,34 +130,6 @@ def get_log() -> str:
|
||||
return '\n'.join(log_lines)
|
||||
|
||||
|
||||
def _get_protocol() -> str:
|
||||
"""Return the protocol to use for newly added repository sources."""
|
||||
try:
|
||||
from plinth.modules.torproxy import utils
|
||||
if utils.is_apt_transport_tor_enabled():
|
||||
return 'tor+http'
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return 'http'
|
||||
|
||||
|
||||
def _is_release_file_available(protocol: str, dist: str,
|
||||
backports=False) -> bool:
|
||||
"""Return whether the release for dist[-backports] is available."""
|
||||
wrapper = None
|
||||
if protocol == 'tor+http':
|
||||
wrapper = 'torsocks'
|
||||
|
||||
if backports:
|
||||
dist += '-backports'
|
||||
|
||||
try:
|
||||
return check_url(RELEASE_FILE_URL.format(dist), wrapper=wrapper)
|
||||
except FileNotFoundError:
|
||||
return False
|
||||
|
||||
|
||||
def _add_backports_sources(sources_list: str, protocol: str, dist: str):
|
||||
"""Add backports sources to freedombox repositories list."""
|
||||
sources = '''# This file is managed by FreedomBox, do not edit.
|
||||
@ -260,11 +177,11 @@ def _check_and_backports_sources(develop=False):
|
||||
logging.info(f'System release is {release}. Skip enabling backports.')
|
||||
return
|
||||
|
||||
protocol = _get_protocol()
|
||||
protocol = utils.get_http_protocol()
|
||||
if protocol == 'tor+http':
|
||||
logging.info('Package download over Tor is enabled.')
|
||||
|
||||
if not _is_release_file_available(protocol, dist, backports=True):
|
||||
if not utils.is_release_file_available(protocol, dist, backports=True):
|
||||
logging.info(
|
||||
f'Release file for {dist}-backports is not available yet.')
|
||||
return
|
||||
@ -302,244 +219,6 @@ def _add_apt_preferences():
|
||||
file_handle.write(APT_PREFERENCES_APPS)
|
||||
|
||||
|
||||
def _is_sufficient_free_space() -> bool:
|
||||
"""Return whether there is sufficient free space for dist upgrade."""
|
||||
output = subprocess.check_output(['df', '--output=avail', '/'])
|
||||
free_space = int(output.decode().split('\n')[1])
|
||||
return free_space >= DIST_UPGRADE_REQUIRED_FREE_SPACE
|
||||
|
||||
|
||||
def _check_dist_upgrade(test_upgrade=False) -> tuple[bool, str]:
|
||||
"""Check if a distribution upgrade be performed.
|
||||
|
||||
Check for new stable release, if updates are enabled, and if there is
|
||||
enough free space for the dist upgrade.
|
||||
|
||||
If test_upgrade is True, also check for upgrade to testing.
|
||||
|
||||
Return (boolean, string) indicating if the upgrade is ready, and a reason
|
||||
if not.
|
||||
"""
|
||||
if dist_upgrade_flag.exists():
|
||||
return (True, 'found-previous')
|
||||
|
||||
from plinth.modules.upgrades import get_current_release
|
||||
release, dist = get_current_release()
|
||||
if release in ['unstable', 'testing', 'n/a']:
|
||||
return (False, f'already-{release}')
|
||||
|
||||
check_dists = ['stable']
|
||||
if test_upgrade:
|
||||
check_dists.append('testing')
|
||||
|
||||
codename = None
|
||||
for check_dist in check_dists:
|
||||
url = RELEASE_FILE_URL.format(check_dist)
|
||||
command = ['curl', '--silent', '--location', '--fail', url]
|
||||
protocol = _get_protocol()
|
||||
if protocol == 'tor+http':
|
||||
command.insert(0, 'torsocks')
|
||||
logging.info('Package download over Tor is enabled.')
|
||||
|
||||
try:
|
||||
output = subprocess.check_output(command).decode()
|
||||
except (subprocess.CalledProcessError, FileNotFoundError):
|
||||
logging.warning('Error while checking for new %s release',
|
||||
check_dist)
|
||||
else:
|
||||
for line in output.split('\n'):
|
||||
if line.startswith('Codename:'):
|
||||
codename = line.split()[1]
|
||||
|
||||
if not codename:
|
||||
return (False, 'codename-not-found')
|
||||
|
||||
if codename == dist:
|
||||
return (False, f'already-{dist}')
|
||||
|
||||
if not _check_auto():
|
||||
return (False, 'upgrades-not-enabled')
|
||||
|
||||
if check_dist == 'testing' and not test_upgrade:
|
||||
return (False, 'test-not-set')
|
||||
|
||||
if not _is_sufficient_free_space():
|
||||
return (False, 'not-enough-free-space')
|
||||
|
||||
logging.info('Upgrading from %s to %s...', dist, codename)
|
||||
with open(SOURCES_LIST, 'r', encoding='utf-8') as sources_list:
|
||||
lines = sources_list.readlines()
|
||||
|
||||
with open(SOURCES_LIST, 'w', encoding='utf-8') as sources_list:
|
||||
for line in lines:
|
||||
# E.g. replace 'bullseye' with 'bookworm'.
|
||||
new_line = line.replace(dist, codename)
|
||||
if check_dist == 'testing':
|
||||
# E.g. replace 'stable' with 'bookworm'.
|
||||
new_line = new_line.replace('stable', codename)
|
||||
|
||||
sources_list.write(new_line)
|
||||
|
||||
logging.info('Dist upgrade in progress. Setting flag.')
|
||||
dist_upgrade_flag.touch(mode=0o660)
|
||||
return (True, 'started-dist-upgrade')
|
||||
|
||||
|
||||
def _take_snapshot_and_disable() -> bool:
|
||||
"""Take a snapshot if supported and enabled, then disable snapshots.
|
||||
|
||||
Return whether snapshots shall be re-enabled at the end.
|
||||
"""
|
||||
if snapshot_is_supported():
|
||||
print('Taking a snapshot before dist upgrade...', flush=True)
|
||||
subprocess.run([
|
||||
'/usr/share/plinth/actions/actions', 'snapshot', 'create',
|
||||
'--no-args'
|
||||
], check=True)
|
||||
aug = snapshot_load_augeas()
|
||||
if is_apt_snapshots_enabled(aug):
|
||||
print('Disable apt snapshots during dist upgrade...', flush=True)
|
||||
subprocess.run([
|
||||
'/usr/share/plinth/actions/actions',
|
||||
'snapshot',
|
||||
'disable_apt_snapshot',
|
||||
], input='{"args": ["yes"], "kwargs": {}}'.encode(), check=True)
|
||||
return True
|
||||
else:
|
||||
print('Apt snapshots already disabled.', flush=True)
|
||||
else:
|
||||
print('Snapshots are not supported, skip taking a snapshot.',
|
||||
flush=True)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def _restore_snapshots_config(reenable=False):
|
||||
"""Restore original snapshots configuration."""
|
||||
if reenable:
|
||||
print('Re-enable apt snapshots...', flush=True)
|
||||
subprocess.run([
|
||||
'/usr/share/plinth/actions/actions', 'snapshot',
|
||||
'disable_apt_snapshot'
|
||||
], input='{"args": ["no"], "kwargs": {}}'.encode(), check=True)
|
||||
|
||||
|
||||
def _disable_searx() -> bool:
|
||||
"""If searx is enabled, disable it until we can upgrade it properly.
|
||||
|
||||
Return whether searx was originally enabled.
|
||||
"""
|
||||
searx_is_enabled = pathlib.Path(
|
||||
'/etc/uwsgi/apps-enabled/searx.ini').exists()
|
||||
if searx_is_enabled:
|
||||
print('Disabling searx...', flush=True)
|
||||
subprocess.run(
|
||||
['/usr/share/plinth/actions/actions', 'apache', 'uwsgi_disable'],
|
||||
input='{"args": ["searx"], "kwargs": {}}'.encode(), check=True)
|
||||
|
||||
return searx_is_enabled
|
||||
|
||||
|
||||
def _update_searx(reenable=False):
|
||||
"""If searx is installed, update search engines list.
|
||||
|
||||
Re-enable if previously enabled.
|
||||
"""
|
||||
if pathlib.Path('/etc/searx/settings.yml').exists():
|
||||
print('Updating searx search engines list...', flush=True)
|
||||
subprocess.run([
|
||||
'/usr/share/plinth/actions/actions', 'searx', 'setup', '--no-args'
|
||||
], check=True)
|
||||
if reenable:
|
||||
print('Re-enabling searx after upgrade...', flush=True)
|
||||
subprocess.run([
|
||||
'/usr/share/plinth/actions/actions', 'apache', 'uwsgi_enable'
|
||||
], input='{"args": ["searx"], "kwargs": {}}'.encode(), check=True)
|
||||
|
||||
|
||||
def _perform_dist_upgrade():
|
||||
"""Perform upgrade to next release of Debian."""
|
||||
reenable_snapshots = _take_snapshot_and_disable()
|
||||
reenable_searx = _disable_searx()
|
||||
|
||||
# If quassel is running during dist upgrade, it may be restarted
|
||||
# several times. This causes IRC users to rapidly leave/join
|
||||
# channels. Stop quassel for the duration of the dist upgrade.
|
||||
quassel_service = 'quasselcore'
|
||||
quassel_was_running = service_is_running(quassel_service)
|
||||
if quassel_was_running:
|
||||
print('Stopping quassel service before dist upgrade...', flush=True)
|
||||
service_stop(quassel_service)
|
||||
|
||||
# Hold freedombox package during entire dist upgrade.
|
||||
print('Holding freedombox package...', flush=True)
|
||||
with apt_hold_freedombox():
|
||||
print('Updating Apt cache...', flush=True)
|
||||
run_apt_command(['update'])
|
||||
|
||||
# Pre-set debconf selections if they are required during the
|
||||
# dist upgrade.
|
||||
if DIST_UPGRADE_PRE_DEBCONF_SELECTIONS:
|
||||
print(
|
||||
f'Setting debconf selections: '
|
||||
f'{DIST_UPGRADE_PRE_DEBCONF_SELECTIONS}', flush=True)
|
||||
debconf_set_selections(DIST_UPGRADE_PRE_DEBCONF_SELECTIONS)
|
||||
|
||||
# Remove obsolete packages that may prevent other packages from
|
||||
# upgrading.
|
||||
if DIST_UPGRADE_OBSOLETE_PACKAGES:
|
||||
print(f'Removing packages: {DIST_UPGRADE_OBSOLETE_PACKAGES}...',
|
||||
flush=True)
|
||||
run_apt_command(['remove'] + DIST_UPGRADE_OBSOLETE_PACKAGES)
|
||||
|
||||
# Hold packages known to have conffile prompts. FreedomBox service
|
||||
# will handle their upgrade later.
|
||||
print(
|
||||
'Holding packages with conffile prompts: ' +
|
||||
', '.join(DIST_UPGRADE_PACKAGES_WITH_PROMPTS) + '...', flush=True)
|
||||
with apt_hold(DIST_UPGRADE_PACKAGES_WITH_PROMPTS):
|
||||
print('Running apt full-upgrade...', flush=True)
|
||||
returncode = run_apt_command(['full-upgrade'])
|
||||
|
||||
# Check if apt upgrade was successful.
|
||||
if returncode:
|
||||
raise RuntimeError(
|
||||
'Apt full-upgrade was not successful. Distribution upgrade '
|
||||
'will be retried at a later time.')
|
||||
|
||||
_update_searx(reenable_searx)
|
||||
|
||||
if quassel_was_running:
|
||||
print('Re-starting quassel service after dist upgrade...',
|
||||
flush=True)
|
||||
service_start(quassel_service)
|
||||
|
||||
print('Running apt autoremove...', flush=True)
|
||||
run_apt_command(['autoremove'])
|
||||
|
||||
# Run unattended-upgrade once more to handle upgrading the
|
||||
# freedombox package.
|
||||
print('Running unattended-upgrade...', flush=True)
|
||||
subprocess.run(['unattended-upgrade', '--verbose'], check=False)
|
||||
|
||||
_restore_snapshots_config(reenable_snapshots)
|
||||
|
||||
# Restart FreedomBox service to ensure it is using the latest
|
||||
# dependencies.
|
||||
print('Restarting FreedomBox service...', flush=True)
|
||||
service_restart('plinth')
|
||||
|
||||
# After 10 minutes, update apt cache again to trigger force_upgrades.
|
||||
print('Waiting for 10 minutes...', flush=True)
|
||||
time.sleep(10 * 60)
|
||||
print('Updating Apt cache...', flush=True)
|
||||
run_apt_command(['update'])
|
||||
|
||||
print('Dist upgrade complete. Removing flag.', flush=True)
|
||||
if dist_upgrade_flag.exists():
|
||||
dist_upgrade_flag.unlink()
|
||||
|
||||
|
||||
@privileged
|
||||
def setup():
|
||||
"""Setup apt preferences."""
|
||||
@ -556,21 +235,8 @@ def activate_backports(develop: bool = False):
|
||||
_check_and_backports_sources(develop)
|
||||
|
||||
|
||||
def _start_dist_upgrade_service():
|
||||
"""Create dist upgrade service and start it."""
|
||||
with open(DIST_UPGRADE_SERVICE_PATH, 'w',
|
||||
encoding='utf-8') as service_file:
|
||||
service_file.write(DIST_UPGRADE_SERVICE)
|
||||
|
||||
service_daemon_reload()
|
||||
subprocess.Popen(['systemctl', 'start', 'freedombox-dist-upgrade'],
|
||||
stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL, close_fds=True,
|
||||
start_new_session=True)
|
||||
|
||||
|
||||
@privileged
|
||||
def start_dist_upgrade(test: bool = False) -> dict[str, str | bool]:
|
||||
def start_dist_upgrade(test: bool = False):
|
||||
"""Start dist upgrade process.
|
||||
|
||||
Check if a new stable release is available, and start dist-upgrade process
|
||||
@ -578,14 +244,16 @@ def start_dist_upgrade(test: bool = False) -> dict[str, str | bool]:
|
||||
"""
|
||||
_release_held_freedombox()
|
||||
|
||||
upgrade_ready, reason = _check_dist_upgrade(test)
|
||||
if upgrade_ready:
|
||||
_start_dist_upgrade_service()
|
||||
|
||||
return {'dist_upgrade_started': upgrade_ready, 'reason': reason}
|
||||
distupgrade.start_service(test)
|
||||
|
||||
|
||||
@privileged
|
||||
def dist_upgrade():
|
||||
"""Perform major distribution upgrade."""
|
||||
_perform_dist_upgrade()
|
||||
distupgrade.perform()
|
||||
|
||||
|
||||
@privileged
|
||||
def dist_upgrade_on_complete():
|
||||
"""Perform cleanup operations after distribution upgrade."""
|
||||
distupgrade.on_complete()
|
||||
|
||||
350
plinth/modules/upgrades/tests/test_distupgrade.py
Normal file
350
plinth/modules/upgrades/tests/test_distupgrade.py
Normal file
@ -0,0 +1,350 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""
|
||||
Test various part of the dist upgrade process.
|
||||
"""
|
||||
|
||||
import re
|
||||
import subprocess
|
||||
from unittest.mock import call, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from plinth.modules.upgrades import distupgrade
|
||||
|
||||
# pylint: disable=protected-access
|
||||
|
||||
|
||||
@patch('subprocess.run')
|
||||
def test_apt_run(run):
|
||||
"""Test that running apt command logs properly."""
|
||||
run.return_value.returncode = 10
|
||||
args = ['command', 'arg1', 'arg2']
|
||||
assert distupgrade._apt_run(args) == 10
|
||||
assert run.call_args.args == \
|
||||
(['apt-get', '--assume-yes', '--quiet=2'] + args,)
|
||||
assert not run.call_args.kwargs['stdout']
|
||||
|
||||
|
||||
def test_sources_list_update(tmp_path):
|
||||
"""Test that updating a sources file works."""
|
||||
original = '''
|
||||
# This is a comment with 'bookworm' in it.
|
||||
deb http://deb.debian.org/debian bookworm main non-free-firmware
|
||||
deb-src http://deb.debian.org/debian bookworm main non-free-firmware
|
||||
|
||||
deb http://deb.debian.org/debian bookworm-updates main non-free-firmware
|
||||
deb-src http://deb.debian.org/debian bookworm-updates main non-free-firmware
|
||||
|
||||
deb http://security.debian.org/debian-security/ bookworm-security main non-free-firmware
|
||||
deb-src http://security.debian.org/debian-security/ bookworm-security main non-free-firmware
|
||||
|
||||
deb https://deb.debian.org/debian other main
|
||||
deb https://deb.debian.org/debian bookwormish main
|
||||
''' # noqa: E501
|
||||
modified = '''
|
||||
# This is a comment with 'bookworm' in it.
|
||||
deb http://deb.debian.org/debian trixie main non-free-firmware
|
||||
deb-src http://deb.debian.org/debian trixie main non-free-firmware
|
||||
|
||||
deb http://deb.debian.org/debian trixie-updates main non-free-firmware
|
||||
deb-src http://deb.debian.org/debian trixie-updates main non-free-firmware
|
||||
|
||||
deb http://security.debian.org/debian-security/ trixie-security main non-free-firmware
|
||||
deb-src http://security.debian.org/debian-security/ trixie-security main non-free-firmware
|
||||
|
||||
deb https://deb.debian.org/debian other main
|
||||
deb https://deb.debian.org/debian bookwormish main
|
||||
''' # noqa: E501
|
||||
|
||||
sources_list = tmp_path / 'sources.list'
|
||||
temp_sources_list = tmp_path / 'sources.list.fbx-dist-upgrade'
|
||||
|
||||
module = 'plinth.modules.upgrades.distupgrade'
|
||||
with patch(f'{module}.sources_list', sources_list), \
|
||||
patch(f'{module}.temp_sources_list', temp_sources_list):
|
||||
sources_list.write_text(original)
|
||||
distupgrade._sources_list_update('bookworm', 'trixie')
|
||||
|
||||
assert temp_sources_list.read_text() == modified
|
||||
|
||||
original = re.sub(r'bookworm([ -])', r'stable\1', original)
|
||||
sources_list.write_text(original)
|
||||
distupgrade._sources_list_update('bookworm', 'trixie')
|
||||
|
||||
assert temp_sources_list.read_text() == modified
|
||||
|
||||
|
||||
@patch('plinth.modules.upgrades.utils.get_http_protocol')
|
||||
@patch('subprocess.check_output')
|
||||
def test_get_new_codename(check_output, get_http_protocol):
|
||||
"""Test that getting a new distro codename works."""
|
||||
get_http_protocol.return_value = 'http'
|
||||
check_output.return_value = b'''
|
||||
Suite: testing
|
||||
Codename: trixie
|
||||
Description: Debian Testing distribution
|
||||
'''
|
||||
assert distupgrade._get_new_codename(False) == 'trixie'
|
||||
check_output.assert_called_with([
|
||||
'curl', '--silent', '--location', '--fail',
|
||||
'https://deb.debian.org/debian/dists/stable/Release'
|
||||
])
|
||||
|
||||
assert distupgrade._get_new_codename(True) == 'trixie'
|
||||
check_output.assert_called_with([
|
||||
'curl', '--silent', '--location', '--fail',
|
||||
'https://deb.debian.org/debian/dists/testing/Release'
|
||||
])
|
||||
|
||||
check_output.side_effect = FileNotFoundError('curl not found')
|
||||
assert not distupgrade._get_new_codename(True)
|
||||
|
||||
|
||||
@patch('plinth.modules.upgrades.distupgrade._get_new_codename')
|
||||
@patch('plinth.modules.upgrades.get_current_release')
|
||||
@patch('plinth.action_utils.service_is_running')
|
||||
@patch('plinth.modules.upgrades.utils.is_sufficient_free_space')
|
||||
@patch('plinth.modules.upgrades.utils.check_auto')
|
||||
def test_check(check_auto, is_sufficient_free_space, service_is_running,
|
||||
get_current_release, get_new_codename):
|
||||
"""Test checking for available dist upgrade."""
|
||||
check_auto.return_value = False
|
||||
with pytest.raises(RuntimeError, match='upgrades-not-enabled'):
|
||||
distupgrade._check()
|
||||
|
||||
check_auto.return_value = True
|
||||
is_sufficient_free_space.return_value = False
|
||||
with pytest.raises(RuntimeError, match='not-enough-free-space'):
|
||||
distupgrade._check()
|
||||
|
||||
is_sufficient_free_space.return_value = True
|
||||
service_is_running.return_value = True
|
||||
with pytest.raises(RuntimeError, match='found-previous'):
|
||||
distupgrade._check()
|
||||
|
||||
service_is_running.return_value = False
|
||||
for release in ['unstable', 'testing', 'n/a']:
|
||||
get_current_release.return_value = (release, release)
|
||||
with pytest.raises(RuntimeError, match=f'already-{release}'):
|
||||
distupgrade._check()
|
||||
|
||||
get_current_release.return_value = ('12', 'bookworm')
|
||||
get_new_codename.return_value = None
|
||||
with pytest.raises(RuntimeError, match='codename-not-found'):
|
||||
distupgrade._check()
|
||||
get_new_codename.assert_called_with(False)
|
||||
|
||||
distupgrade._check(True)
|
||||
get_new_codename.assert_called_with(True)
|
||||
|
||||
get_new_codename.return_value = 'bookworm'
|
||||
with pytest.raises(RuntimeError, match='already-bookworm'):
|
||||
distupgrade._check()
|
||||
|
||||
get_new_codename.return_value = 'trixie'
|
||||
assert distupgrade._check() == ('bookworm', 'trixie')
|
||||
|
||||
|
||||
@patch('subprocess.run')
|
||||
@patch('plinth.modules.snapshot.is_apt_snapshots_enabled')
|
||||
@patch('plinth.modules.snapshot.is_supported')
|
||||
def test_snapshot_run_and_disable(is_supported, is_apt_snapshots_enabled, run):
|
||||
"""Test taking a snapshot."""
|
||||
is_supported.return_value = False
|
||||
with distupgrade._snapshot_run_and_disable():
|
||||
run.assert_not_called()
|
||||
|
||||
run.assert_not_called()
|
||||
|
||||
is_supported.return_value = True
|
||||
is_apt_snapshots_enabled.return_value = False
|
||||
with distupgrade._snapshot_run_and_disable():
|
||||
assert run.call_args_list == [
|
||||
call([
|
||||
'/usr/share/plinth/actions/actions', 'snapshot', 'create',
|
||||
'--no-args'
|
||||
], check=True)
|
||||
]
|
||||
run.reset_mock()
|
||||
|
||||
run.assert_not_called()
|
||||
|
||||
is_supported.return_value = True
|
||||
is_apt_snapshots_enabled.return_value = True
|
||||
with distupgrade._snapshot_run_and_disable():
|
||||
assert run.call_args_list == [
|
||||
call([
|
||||
'/usr/share/plinth/actions/actions', 'snapshot', 'create',
|
||||
'--no-args'
|
||||
], check=True),
|
||||
call([
|
||||
'/usr/share/plinth/actions/actions', 'snapshot',
|
||||
'disable_apt_snapshot'
|
||||
], input=b'{"args": ["yes"], "kwargs": {}}', check=True)
|
||||
]
|
||||
run.reset_mock()
|
||||
|
||||
assert run.call_args_list == [
|
||||
call([
|
||||
'/usr/share/plinth/actions/actions', 'snapshot',
|
||||
'disable_apt_snapshot'
|
||||
], input=b'{"args": ["no"], "kwargs": {}}', check=True)
|
||||
]
|
||||
|
||||
|
||||
@patch('plinth.action_utils.service_enable')
|
||||
@patch('plinth.action_utils.service_disable')
|
||||
@patch('plinth.action_utils.service_is_running')
|
||||
def test_services_disable(service_is_running, service_disable, service_enable):
|
||||
"""Test that disabling services works."""
|
||||
service_is_running.return_value = False
|
||||
with distupgrade._services_disable():
|
||||
service_disable.assert_not_called()
|
||||
|
||||
service_enable.assert_not_called()
|
||||
|
||||
service_is_running.return_value = True
|
||||
with distupgrade._services_disable():
|
||||
service_disable.call_args_list = [call('quasselcore')]
|
||||
|
||||
service_enable.call_args_list = [call('quasselcore')]
|
||||
|
||||
|
||||
@patch('subprocess.run')
|
||||
@patch('subprocess.check_call')
|
||||
@patch('subprocess.check_output')
|
||||
def test_apt_hold_packages(check_output, check_call, run, tmp_path):
|
||||
"""Test that holding apt packages works."""
|
||||
hold_flag = tmp_path / 'flag'
|
||||
run.return_value.returncode = 0
|
||||
with patch('plinth.action_utils.apt_hold_flag', hold_flag), \
|
||||
patch('plinth.modules.upgrades.distupgrade.PACKAGES_WITH_PROMPTS',
|
||||
['package1', 'package2']):
|
||||
check_output.return_value = False
|
||||
with distupgrade._apt_hold_packages():
|
||||
assert hold_flag.exists()
|
||||
assert hold_flag.stat().st_mode & 0o117 == 0
|
||||
expected_call = [call(['apt-mark', 'hold', 'freedombox'])]
|
||||
assert check_call.call_args_list == expected_call
|
||||
expected_calls = [
|
||||
call(['apt-mark', 'hold', 'package1'], check=False),
|
||||
call(['apt-mark', 'hold', 'package2'], check=False)
|
||||
]
|
||||
assert run.call_args_list == expected_calls
|
||||
check_call.reset_mock()
|
||||
run.reset_mock()
|
||||
|
||||
expected_call = [
|
||||
call(['apt-mark', 'unhold', 'freedombox'],
|
||||
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
|
||||
check=False)
|
||||
]
|
||||
assert run.call_args_list == expected_call
|
||||
expected_calls = [
|
||||
call(['apt-mark', 'unhold', 'package1']),
|
||||
call(['apt-mark', 'unhold', 'package2'])
|
||||
]
|
||||
assert check_call.call_args_list == expected_calls
|
||||
|
||||
|
||||
@patch('plinth.action_utils.debconf_set_selections')
|
||||
def test_debconf_set_selections(debconf_set_selections):
|
||||
"""Test that setting debconf selections works."""
|
||||
selections = 'plinth.modules.upgrades.distupgrade.PRE_DEBCONF_SELECTIONS'
|
||||
with patch(selections, []):
|
||||
distupgrade._debconf_set_selections()
|
||||
debconf_set_selections.assert_not_called()
|
||||
|
||||
with patch(selections, ['selection1', 'selection2']):
|
||||
distupgrade._debconf_set_selections()
|
||||
debconf_set_selections.assert_called_with(['selection1', 'selection2'])
|
||||
|
||||
distupgrade._debconf_set_selections()
|
||||
debconf_set_selections.assert_called_with(
|
||||
['grub-pc grub-pc/install_devices_empty boolean true'])
|
||||
|
||||
|
||||
@patch('plinth.modules.upgrades.distupgrade._apt_run')
|
||||
def test_packages_remove_obsolete(apt_run):
|
||||
"""Test that obsolete packages are removed."""
|
||||
distupgrade._packages_remove_obsolete()
|
||||
apt_run.assert_not_called() # No obsolete package to remove currently.
|
||||
|
||||
with patch('plinth.modules.upgrades.distupgrade.OBSOLETE_PACKAGES',
|
||||
['tt-rss', 'searx']):
|
||||
distupgrade._packages_remove_obsolete()
|
||||
apt_run.assert_called_with(['remove', 'tt-rss', 'searx'])
|
||||
|
||||
|
||||
@patch('plinth.modules.upgrades.distupgrade._apt_run')
|
||||
def test_apt_update(apt_run):
|
||||
"""Test that apt update works."""
|
||||
distupgrade._apt_update()
|
||||
apt_run.assert_called_with(['update'])
|
||||
|
||||
|
||||
@patch('plinth.modules.upgrades.distupgrade._apt_run')
|
||||
def test_apt_autoremove(apt_run):
|
||||
"""Test that apt autoremove works."""
|
||||
distupgrade._apt_autoremove()
|
||||
apt_run.assert_called_with(['autoremove'])
|
||||
|
||||
|
||||
@patch('plinth.modules.upgrades.distupgrade._apt_run')
|
||||
def test_apt_full_upgrade(apt_run):
|
||||
"""Test that apt full upgrade works."""
|
||||
apt_run.return_value = 0
|
||||
distupgrade._apt_full_upgrade()
|
||||
apt_run.assert_called_with(['full-upgrade'])
|
||||
|
||||
apt_run.return_value = 1
|
||||
with pytest.raises(RuntimeError):
|
||||
distupgrade._apt_full_upgrade()
|
||||
|
||||
|
||||
@patch('subprocess.run')
|
||||
def test_unatteneded_upgrades_run(run):
|
||||
"""Test that running unattended upgrades works."""
|
||||
distupgrade._unattended_upgrades_run()
|
||||
run.assert_called_with(['unattended-upgrade', '--verbose'], check=False)
|
||||
|
||||
|
||||
@patch('plinth.action_utils.service_restart')
|
||||
def test_freedombox_restart(service_restart):
|
||||
"""Test that restarting freedombox service works."""
|
||||
distupgrade._freedombox_restart()
|
||||
service_restart.assert_called_with('plinth')
|
||||
|
||||
|
||||
@patch('time.sleep')
|
||||
def test_wait(sleep):
|
||||
"""Test that sleeping works."""
|
||||
distupgrade._wait()
|
||||
sleep.assert_called_with(600)
|
||||
|
||||
|
||||
@patch('subprocess.run')
|
||||
def test_trigger_on_complete(run):
|
||||
"""Test triggering post completion process."""
|
||||
distupgrade._trigger_on_complete()
|
||||
run.assert_called_with([
|
||||
'systemd-run', '--unit=freedombox-dist-upgrade-on-complete',
|
||||
'--description=Finish up upgrade to new stable Debian release',
|
||||
'/usr/share/plinth/actions/actions', 'upgrades',
|
||||
'dist_upgrade_on_complete', '--no-args'
|
||||
], check=True)
|
||||
|
||||
|
||||
def test_on_complete(tmp_path):
|
||||
"""Test that /etc/apt/sources.list is committed."""
|
||||
sources_list = tmp_path / 'sources.list'
|
||||
sources_list.write_text('before')
|
||||
temp_sources_list = tmp_path / 'sources.list.fbx-dist-upgrade'
|
||||
temp_sources_list.write_text('after')
|
||||
|
||||
module = 'plinth.modules.upgrades.distupgrade'
|
||||
with patch(f'{module}.sources_list', sources_list), \
|
||||
patch(f'{module}.temp_sources_list', temp_sources_list):
|
||||
distupgrade.on_complete()
|
||||
assert sources_list.read_text() == 'after'
|
||||
assert not temp_sources_list.exists()
|
||||
62
plinth/modules/upgrades/utils.py
Normal file
62
plinth/modules/upgrades/utils.py
Normal file
@ -0,0 +1,62 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""Utilities for regular updates and dist-upgrades."""
|
||||
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
from plinth.modules.apache.components import check_url
|
||||
|
||||
RELEASE_FILE_URL = \
|
||||
'https://deb.debian.org/debian/dists/{}/Release'
|
||||
|
||||
DIST_UPGRADE_REQUIRED_FREE_SPACE = 5000000
|
||||
|
||||
|
||||
def check_auto() -> bool:
|
||||
"""Return whether automatic updates are enabled."""
|
||||
arguments = [
|
||||
'apt-config', 'shell', 'UpdateInterval',
|
||||
'APT::Periodic::Update-Package-Lists'
|
||||
]
|
||||
output = subprocess.check_output(arguments).decode()
|
||||
update_interval = 0
|
||||
match = re.match(r"UpdateInterval='(.*)'", output)
|
||||
if match:
|
||||
update_interval = int(match.group(1))
|
||||
|
||||
return bool(update_interval)
|
||||
|
||||
|
||||
def get_http_protocol() -> str:
|
||||
"""Return the protocol to use for newly added repository sources."""
|
||||
try:
|
||||
from plinth.modules.torproxy import utils
|
||||
if utils.is_apt_transport_tor_enabled():
|
||||
return 'tor+http'
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return 'http'
|
||||
|
||||
|
||||
def is_release_file_available(protocol: str, dist: str,
|
||||
backports=False) -> bool:
|
||||
"""Return whether the release for dist[-backports] is available."""
|
||||
wrapper = None
|
||||
if protocol == 'tor+http':
|
||||
wrapper = 'torsocks'
|
||||
|
||||
if backports:
|
||||
dist += '-backports'
|
||||
|
||||
try:
|
||||
return check_url(RELEASE_FILE_URL.format(dist), wrapper=wrapper)
|
||||
except FileNotFoundError:
|
||||
return False
|
||||
|
||||
|
||||
def is_sufficient_free_space() -> bool:
|
||||
"""Return whether there is sufficient free space for dist upgrade."""
|
||||
output = subprocess.check_output(['df', '--output=avail', '/'])
|
||||
free_space = int(output.decode().split('\n')[1])
|
||||
return free_space >= DIST_UPGRADE_REQUIRED_FREE_SPACE
|
||||
@ -647,9 +647,13 @@ class ForceUpgrader():
|
||||
# App does not implement force upgrade
|
||||
continue
|
||||
|
||||
if (app.get_setup_state() != app_module.App.SetupState.UP_TO_DATE):
|
||||
# App is not installed.
|
||||
# Or needs an update, let it update first.
|
||||
if (app.get_setup_state() == app_module.App.SetupState.NEEDS_SETUP
|
||||
):
|
||||
# If an app is not installed don't considered it. If an app
|
||||
# needs an update, it may have to do a force upgrade before
|
||||
# running app version update. This is because the app version
|
||||
# update process will include installing packages that will
|
||||
# fail due to pending configuration file updates.
|
||||
continue
|
||||
|
||||
for component in app.get_components_of_type(Packages):
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
{% if app_info.tags %}
|
||||
<div class="app-tags">
|
||||
{% for tag in app_info.tags %}
|
||||
<a href="{% url 'apps' %}?tag={{ tag|urlencode }}"
|
||||
<a href="{{ active_section_url }}?tag={{ tag|urlencode }}"
|
||||
class="btn btn-light rounded-pill tag">
|
||||
{% trans tag %}
|
||||
</a>
|
||||
|
||||
@ -11,42 +11,3 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block body_class %}apps-page{% endblock %}
|
||||
|
||||
{% block tags %}
|
||||
{% if tags %}
|
||||
<div class="container">
|
||||
<div class="dropdown searchable-dropdown">
|
||||
<div class="tag-input">
|
||||
<div id="selected-tags">
|
||||
{% for tag in tags %}
|
||||
<span class="btn btn-light rounded-pill tag"
|
||||
data-tag="{{ tag }}">
|
||||
{% trans tag %}
|
||||
<button class="btn btn-sm btn-light remove-tag">
|
||||
<i class="fa fa-times"></i>
|
||||
</button>
|
||||
</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<input id="add-tag-input" type="search" class="form-control dropdown-toggle"
|
||||
data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
|
||||
autocomplete="off" placeholder="{% trans "Search with tags" %}">
|
||||
<div class="dropdown-menu" aria-labelledby="add-tag-input">
|
||||
<ul class="dropdown-items">
|
||||
{% for tag in all_tags %}
|
||||
{% if tag not in tags %}
|
||||
<li class="dropdown-item" data-tag="{{ tag }}"
|
||||
data-tag_l10n="{% trans tag %}">
|
||||
{% trans tag %}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<a href="{% url 'apps' %}" aria-label="{% trans 'Clear all tags' %}"
|
||||
class="btn-close" type="button"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@ -15,7 +15,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% block tags %}{% endblock %}
|
||||
{% block tags %}
|
||||
{% include "tags.html" %}
|
||||
{% endblock %}
|
||||
|
||||
<div class="container card-container">
|
||||
<div class="row">
|
||||
|
||||
@ -6,6 +6,10 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block page_js %}
|
||||
<script type="text/javascript" src="{% static 'tags.js' %}" defer></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block body_class %}system-page{% endblock %}
|
||||
|
||||
{% block container %}
|
||||
@ -17,12 +21,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% block tags %}
|
||||
{% include "tags.html" %}
|
||||
{% endblock %}
|
||||
|
||||
<div class="container card-container">
|
||||
{% for section_item in menu_items %}
|
||||
<div class="system-section-title">{{ section_item.name }}</div>
|
||||
<div class="row">
|
||||
<div class="card-list card-list-primary">
|
||||
{% for item in section_item.sorted_items %}
|
||||
{% for item in section_item.items %}
|
||||
{% if advanced_mode or not item.advanced %}
|
||||
{% include "card.html" %}
|
||||
{% endif %}
|
||||
|
||||
42
plinth/templates/tags.html
Normal file
42
plinth/templates/tags.html
Normal file
@ -0,0 +1,42 @@
|
||||
{% comment %}
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% if tags %}
|
||||
<div class="container">
|
||||
<div class="dropdown searchable-dropdown">
|
||||
<div class="tag-input">
|
||||
<div id="selected-tags">
|
||||
{% for tag in tags %}
|
||||
<span class="btn btn-light rounded-pill tag"
|
||||
data-tag="{{ tag }}">
|
||||
{% trans tag %}
|
||||
<button class="btn btn-sm btn-light remove-tag">
|
||||
<i class="fa fa-times"></i>
|
||||
</button>
|
||||
</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<input id="add-tag-input" type="search" class="form-control dropdown-toggle"
|
||||
data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
|
||||
autocomplete="off" placeholder="{% trans "Search with tags" %}">
|
||||
<div class="dropdown-menu" aria-labelledby="add-tag-input">
|
||||
<ul class="dropdown-items">
|
||||
{% for tag in all_tags %}
|
||||
{% if tag not in tags %}
|
||||
<li class="dropdown-item" data-tag="{{ tag }}"
|
||||
data-tag_l10n="{% trans tag %}">
|
||||
{% trans tag %}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<a href="{{ active_section_url }}" aria-label="{% trans 'Clear all tags' %}"
|
||||
class="btn-close" type="button"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
137
plinth/views.py
137
plinth/views.py
@ -171,6 +171,79 @@ def index(request):
|
||||
})
|
||||
|
||||
|
||||
def _pick_menu_items(menu_items, selected_tags):
|
||||
"""Return a sorted list of menu items filtered by tags."""
|
||||
|
||||
class MenuProxy:
|
||||
"""A proxy for the menu item to hold filtered children."""
|
||||
|
||||
def __init__(self, menu_item: menu.Menu):
|
||||
"""Initialize a menu proxy object."""
|
||||
self.menu_item = menu_item
|
||||
self.items: list[menu.Menu] = []
|
||||
tags = menu_item.tags or []
|
||||
for item in menu_item.items:
|
||||
tags += item.tags or []
|
||||
|
||||
self.tags = list(tags)
|
||||
|
||||
def __getattr__(self, name: str):
|
||||
"""Return attributed from proxied object."""
|
||||
return getattr(self.menu_item, name)
|
||||
|
||||
def _mismatch_map(menu_item) -> list[bool]:
|
||||
"""Return a list of mismatches for selected tags.
|
||||
|
||||
A mismatch is when a selected tag is *not* present in the list of
|
||||
tags for menu item.
|
||||
"""
|
||||
menu_tags = set(menu_item.tags or [])
|
||||
return [tag not in menu_tags for tag in selected_tags]
|
||||
|
||||
def _sort_key(menu_item):
|
||||
"""Returns a comparable tuple to sort menu items.
|
||||
|
||||
Sort items by tag match count first, then by the order of matched
|
||||
tags in user specified order, then by the order set by menu item,
|
||||
and then by the name of the menu item in current locale (by
|
||||
configured collation order).
|
||||
"""
|
||||
return (_mismatch_map(menu_item).count(True), _mismatch_map(menu_item),
|
||||
menu_item.order, menu_item.name.lower())
|
||||
|
||||
proxied_menu_items = []
|
||||
for menu_item in menu_items:
|
||||
proxied_item = MenuProxy(menu_item)
|
||||
proxied_item.items = _pick_menu_items(menu_item.items, selected_tags)
|
||||
proxied_menu_items.append(proxied_item)
|
||||
|
||||
# Filter out menu items that don't match any of the selected tags. If
|
||||
# no tags are selected, return all menu items. Otherwise, return all
|
||||
# menu items that have at least one matching tag.
|
||||
filtered_menu_items = [
|
||||
menu_item for menu_item in proxied_menu_items
|
||||
if (not selected_tags) or (not all(_mismatch_map(menu_item)))
|
||||
]
|
||||
|
||||
return sorted(filtered_menu_items, key=_sort_key)
|
||||
|
||||
|
||||
def _get_all_tags(menu_items: list[menu.Menu]) -> list[str]:
|
||||
"""Return a sorted list of all tags present in the given menu items."""
|
||||
|
||||
def get_tags(menu_items: list[menu.Menu]) -> set[str]:
|
||||
"""Return a list of tags, unsorted."""
|
||||
all_tags = set()
|
||||
for menu_item in menu_items:
|
||||
all_tags.update(menu_item.tags or [])
|
||||
all_tags |= get_tags(menu_item.items)
|
||||
|
||||
return all_tags
|
||||
|
||||
# Sort tags by localized string
|
||||
return sorted(get_tags(menu_items), key=_)
|
||||
|
||||
|
||||
class AppsIndexView(TemplateView):
|
||||
"""View for apps index.
|
||||
|
||||
@ -180,41 +253,6 @@ class AppsIndexView(TemplateView):
|
||||
"""
|
||||
template_name = 'apps.html'
|
||||
|
||||
@staticmethod
|
||||
def _pick_menu_items(menu_items, selected_tags):
|
||||
"""Return a sorted list of menu items filtered by tags."""
|
||||
|
||||
def _mismatch_map(menu_item) -> list[bool]:
|
||||
"""Return a list of mismatches for selected tags.
|
||||
|
||||
A mismatch is when a selected tag is *not* present in the list of
|
||||
tags for menu item.
|
||||
"""
|
||||
menu_tags = set(menu_item.tags)
|
||||
return [tag not in menu_tags for tag in selected_tags]
|
||||
|
||||
def _sort_key(menu_item):
|
||||
"""Returns a comparable tuple to sort menu items.
|
||||
|
||||
Sort items by tag match count first, then by the order of matched
|
||||
tags in user specified order, then by the order set by menu item,
|
||||
and then by the name of the menu item in current locale (by
|
||||
configured collation order).
|
||||
"""
|
||||
return (_mismatch_map(menu_item).count(True),
|
||||
_mismatch_map(menu_item), menu_item.order,
|
||||
menu_item.name.lower())
|
||||
|
||||
# Filter out menu items that don't match any of the selected tags. If
|
||||
# no tags are selected, return all menu items. Otherwise, return all
|
||||
# menu items that have at least one matching tag.
|
||||
filtered_menu_items = [
|
||||
menu_item for menu_item in menu_items
|
||||
if (not selected_tags) or (not all(_mismatch_map(menu_item)))
|
||||
]
|
||||
|
||||
return sorted(filtered_menu_items, key=_sort_key)
|
||||
|
||||
def get_context_data(self, *args, **kwargs):
|
||||
context = super().get_context_data(*args, **kwargs)
|
||||
context['show_disabled'] = True
|
||||
@ -224,24 +262,24 @@ class AppsIndexView(TemplateView):
|
||||
menu_items = menu.main_menu.active_item(self.request).items
|
||||
|
||||
context['tags'] = tags
|
||||
# Sorted tags by localized string
|
||||
all_tags = set()
|
||||
for menu_item in menu_items:
|
||||
all_tags.update(menu_item.tags or [])
|
||||
|
||||
context['all_tags'] = sorted(all_tags, key=lambda tag: _(tag))
|
||||
context['menu_items'] = self._pick_menu_items(menu_items, tags)
|
||||
context['all_tags'] = _get_all_tags(menu_items)
|
||||
context['menu_items'] = _pick_menu_items(menu_items, tags)
|
||||
|
||||
return context
|
||||
|
||||
|
||||
def system_index(request):
|
||||
"""Serve the system index page."""
|
||||
menu_items = menu.main_menu.active_item(request).sorted_items()
|
||||
return TemplateResponse(request, 'system.html', {
|
||||
'advanced_mode': get_advanced_mode(),
|
||||
'menu_items': menu_items
|
||||
})
|
||||
tags = request.GET.getlist('tag', [])
|
||||
menu_items = menu.main_menu.active_item(request).items
|
||||
|
||||
return TemplateResponse(
|
||||
request, 'system.html', {
|
||||
'advanced_mode': get_advanced_mode(),
|
||||
'menu_items': _pick_menu_items(menu_items, tags),
|
||||
'tags': tags,
|
||||
'all_tags': _get_all_tags(menu_items)
|
||||
})
|
||||
|
||||
|
||||
class LanguageSelectionView(FormView):
|
||||
@ -472,9 +510,8 @@ class SetupView(TemplateView):
|
||||
context['setup_state'] = setup_state
|
||||
context['operations'] = operation.manager.filter(app.app_id)
|
||||
context['show_rerun_setup'] = False
|
||||
context['show_uninstall'] = (
|
||||
not app.info.is_essential
|
||||
and setup_state != app_module.App.SetupState.NEEDS_SETUP)
|
||||
context['show_uninstall'] = (not app.info.is_essential and setup_state
|
||||
!= app_module.App.SetupState.NEEDS_SETUP)
|
||||
|
||||
# Perform expensive operation only if needed.
|
||||
if not context['operations']:
|
||||
|
||||
@ -26,15 +26,15 @@
|
||||
/**
|
||||
* Update the URL path based on the selected tags.
|
||||
*
|
||||
* If no tags are selected, redirects to the base apps path. Otherwise,
|
||||
* If no tags are selected, redirects to the base section path. Otherwise,
|
||||
* constructs a new URL with query parameters for each tag.
|
||||
*
|
||||
* @param {string[]} tags - An array of selected tag names.
|
||||
*/
|
||||
function updatePathWithTags(tags) {
|
||||
const appsPath = window.location.pathname;
|
||||
const sectionPath = window.location.pathname;
|
||||
if (tags.length === 0) {
|
||||
this.location.assign(appsPath);
|
||||
this.location.assign(sectionPath);
|
||||
} else {
|
||||
const urlParams = new URLSearchParams();
|
||||
tags.forEach(tag => urlParams.append('tag', tag));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user