From 9cf92cf3f1fe93f978453dae3ac22d0ee94a21aa Mon Sep 17 00:00:00 2001 From: Dietmar Date: Tue, 14 Jan 2025 09:26:55 +0000 Subject: [PATCH 01/49] Translated using Weblate (German) Currently translated at 98.6% (1774 of 1798 strings) --- plinth/locale/de/LC_MESSAGES/django.po | 43 ++++++++++++-------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index 353433a9f..a6b7e4548 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-13 20:33-0500\n" -"PO-Revision-Date: 2025-01-09 07:38+0000\n" +"PO-Revision-Date: 2025-01-15 04:00+0000\n" "Last-Translator: Dietmar \n" "Language-Team: German \n" @@ -321,6 +321,8 @@ msgid "" "In 24 hour format. Services may become temporarily unavailable while running " "backup operation at this time of the day." msgstr "" +"Im 24-Stunden-Format. Die Dienste können vorübergehend nicht verfügbar sein, " +"wenn zu dieser Zeit eine Datensicherung durchgeführt wird." #: modules/backups/forms.py:85 modules/backups/forms.py:107 msgid "Included apps" @@ -556,6 +558,8 @@ msgstr "Das Backup-System ist mit einem anderen Vorgang beschäftigt." #: modules/backups/privileged.py:92 msgid "Not enough space left on the disk or remote location." msgstr "" +"Nicht genügend Speicherplatz auf dem Datenträger oder an einem entfernten " +"Ort." #: modules/backups/repository.py:94 msgid "Existing repository is not encrypted." @@ -1880,6 +1884,8 @@ msgid "" "This service uses an external service to lookup public IP address. This can " "be configured in the privacy app." msgstr "" +"Dieser Dienst verwendet einen externen Dienst, um die öffentliche IP-Adresse " +"zu ermitteln. Dies kann in der Datenschutz-App konfiguriert werden." #: modules/dynamicdns/__init__.py:64 msgid "Dynamic DNS Client" @@ -2396,22 +2402,16 @@ msgid "Add" msgstr "Hinzufügen" #: modules/email/templates/email-dns.html:9 -#, fuzzy -#| msgid "DNS Records" msgid "DNS Records for domain:" -msgstr "DNS-Einträge" +msgstr "DNS-Einträge für die Domain:" #: modules/email/templates/email-dns.html:12 -#, fuzzy -#| msgid "" -#| "The following DNS records must be added manually on your primary domain " -#| "for the mail server to work properly." msgid "" "The following DNS records must be added manually on this domain for the mail " "server to work properly for this domain." msgstr "" -"Die folgenden DNS-Einträge müssen manuell zu Ihrer primären Domain " -"hinzugefügt werden, damit der Mailserver korrekt funktioniert." +"Die folgenden DNS-Einträge müssen manuell zu dieser Domäne hinzugefügt " +"werden, damit der E-Mail-Server für diese Domäne ordnungsgemäß funktioniert." #: modules/email/templates/email-dns.html:23 #: modules/email/templates/email-dns.html:77 @@ -2441,10 +2441,8 @@ msgid "Host/Target/Value" msgstr "Host/Ziel/Wert" #: modules/email/templates/email-dns.html:50 -#, fuzzy -#| msgid "Server hostname or IP address" msgid "Reverse DNS Records for IP Addresses" -msgstr "Servername oder IP-Adresse" +msgstr "" #: modules/email/templates/email-dns.html:53 #, python-format @@ -2469,7 +2467,7 @@ msgstr "" #, fuzzy #| msgid "Hostname" msgid "Host" -msgstr "Hostname" +msgstr "Host" #: modules/email/templates/email.html:10 msgid "Manage Spam" @@ -2485,12 +2483,13 @@ msgid "" "The following domains are configured. View details to see the list of DNS " "entries to be made for the domain." msgstr "" +"Die folgenden Domänen sind konfiguriert. Unter Details finden Sie die Liste " +"der DNS-Einträge, die für die Domäne erstellt werden müssen." #: modules/email/templates/email.html:35 -#, fuzzy, python-format -#| msgid "Resolve domain name: {domain}" +#, python-format msgid "View domain: %(domain)s" -msgstr "Domainname auflösen: {domain}" +msgstr "Domäne anzeigen: %(domain)s" #: modules/featherwiki/__init__.py:25 #, python-brace-format @@ -4682,10 +4681,8 @@ msgid "Mumble" msgstr "Mumble" #: modules/mumble/__init__.py:158 -#, fuzzy -#| msgid "Mumble server is running" msgid "Mumble server is configured" -msgstr "Mumble Server läuft" +msgstr "Mumble-Server ist konfiguriert" #: modules/mumble/forms.py:30 msgid "Set SuperUser Password" @@ -6737,10 +6734,8 @@ msgid "Usage reporting" msgstr "Nutzungsberichte" #: modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "Enable repro service" msgid "External services" -msgstr "repro Dienst einschalten" +msgstr "Externe Dienste" #: modules/privacy/manifest.py:10 msgid "Fallback DNS" @@ -9800,7 +9795,7 @@ msgid "" "Zoph. For additional users, accounts must be created both in {box_name} and " "in Zoph with the same user name." msgstr "" -"Der Benutzer {box_name}, der Zoph eingerichtet hat, wird auch der " +"Der {box_name} Benutzer, der Zoph eingerichtet hat, wird auch der " "Administrator in Zoph. Für zusätzliche Benutzer müssen Konten sowohl in " "{box_name} als auch in Zoph mit demselben Benutzernamen erstellt werden." From c13dba245d647b1cd47d50182f3167406a85642a Mon Sep 17 00:00:00 2001 From: Burak Yavuz Date: Tue, 14 Jan 2025 04:24:34 +0000 Subject: [PATCH 02/49] Translated using Weblate (Turkish) Currently translated at 100.0% (1798 of 1798 strings) --- plinth/locale/tr/LC_MESSAGES/django.po | 68 ++++++++++++++------------ 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index 03cc19bd7..9be2476c7 100644 --- a/plinth/locale/tr/LC_MESSAGES/django.po +++ b/plinth/locale/tr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-13 20:33-0500\n" -"PO-Revision-Date: 2025-01-01 08:00+0000\n" +"PO-Revision-Date: 2025-01-15 04:00+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish \n" @@ -312,6 +312,8 @@ msgid "" "In 24 hour format. Services may become temporarily unavailable while running " "backup operation at this time of the day." msgstr "" +"24 saat biçiminde. Günün bu saatinde yedekleme işlemi çalıştırılırken " +"hizmetler geçici olarak kullanılamayabilir." #: modules/backups/forms.py:85 modules/backups/forms.py:107 msgid "Included apps" @@ -541,7 +543,7 @@ msgstr "Yedekleme sistemi başka bir işlemle meşgul." #: modules/backups/privileged.py:92 msgid "Not enough space left on the disk or remote location." -msgstr "" +msgstr "Diskte veya uzak konumda yeterli alan kalmadı." #: modules/backups/repository.py:94 msgid "Existing repository is not encrypted." @@ -1838,6 +1840,8 @@ msgid "" "This service uses an external service to lookup public IP address. This can " "be configured in the privacy app." msgstr "" +"Bu hizmet, dış IP adresini aramak için harici bir hizmet kullanır. Bu, " +"gizlilik uygulamasında yapılandırılabilir." #: modules/dynamicdns/__init__.py:64 msgid "Dynamic DNS Client" @@ -2262,11 +2266,11 @@ msgstr "Postfix/Dovecot" #: modules/email/__init__.py:80 msgid "More emails" -msgstr "" +msgstr "Daha fazla e-posta" #: modules/email/__init__.py:80 msgid "Same mailbox" -msgstr "" +msgstr "Aynı posta kutusu" #: modules/email/__init__.py:82 msgid "My Email Aliases" @@ -2351,22 +2355,16 @@ msgid "Add" msgstr "Ekle" #: modules/email/templates/email-dns.html:9 -#, fuzzy -#| msgid "DNS Records" msgid "DNS Records for domain:" -msgstr "DNS Kayıtları" +msgstr "Etki alanı için DNS Kayıtları:" #: modules/email/templates/email-dns.html:12 -#, fuzzy -#| msgid "" -#| "The following DNS records must be added manually on your primary domain " -#| "for the mail server to work properly." msgid "" "The following DNS records must be added manually on this domain for the mail " "server to work properly for this domain." msgstr "" -"Posta sunucusunun düzgün çalışması için aşağıdaki DNS kayıtları birincil " -"etki alanınıza el ile eklenmek zorundadır." +"Bu etki alanı için posta sunucusunun düzgün çalışması amacıyla aşağıdaki DNS " +"kayıtları bu etki alanına el ile eklenmek zorundadır." #: modules/email/templates/email-dns.html:23 #: modules/email/templates/email-dns.html:77 @@ -2396,10 +2394,8 @@ msgid "Host/Target/Value" msgstr "Anamakine/Hedef/Değer" #: modules/email/templates/email-dns.html:50 -#, fuzzy -#| msgid "Server hostname or IP address" msgid "Reverse DNS Records for IP Addresses" -msgstr "Sunucu anamakine adı veya IP adresi" +msgstr "IP Adresleri için Ters DNS Kayıtları" #: modules/email/templates/email-dns.html:53 #, python-format @@ -2413,18 +2409,27 @@ msgid "" "part. Only one of your domains can have Revese DNS lookup configured unless " "you have multiple public IP addresses." msgstr "" +"Eğer %(box_name)s cihazınız bir bulut hizmeti altyapısında çalışıyorsa, Ters DNS " +"aramasını yapılandırmanız gerekir. Bu zorunlu değildir, ancak e-posta " +"teslim edilebilirliğini büyük ölçüde artırır. Ters DNS, normal DNS'nizin " +"olduğu yerde yapılandırılmamıştır. Bunu VPS/ISP'nizin ayarlarında " +"aramalısınız. Bazı sağlayıcılar IP adresi bölümünü sizin için önceden " +"yapılandırır ve sadece etki alanı bölümünü ayarlamak zorundasınız. Birden " +"çok dış IP adresiniz olmadığı sürece, etki alanlarınızdan sadece birinde " +"Ters DNS araması yapılandırılmış olabilir." #: modules/email/templates/email-dns.html:66 msgid "" "An external service is used to lookup public IP address to show in the " "following section. This can be configured in the privacy app." msgstr "" +"Aşağıdaki bölümde gösterilecek ortak IP adresini aramak için harici bir " +"hizmet kullanılır. Bu, gizlilik uygulamasında yapılandırılabilir." #: modules/email/templates/email-dns.html:76 -#, fuzzy -#| msgid "Hostname" msgid "Host" -msgstr "Anamakine Adı" +msgstr "Anamakine" #: modules/email/templates/email.html:10 msgid "Manage Spam" @@ -2440,12 +2445,13 @@ msgid "" "The following domains are configured. View details to see the list of DNS " "entries to be made for the domain." msgstr "" +"Aşağıdaki etki alanları yapılandırıldı. Etki alanı için yapılacak DNS " +"girişlerinin listesini görmek için ayrıntıları görüntüleyin." #: modules/email/templates/email.html:35 -#, fuzzy, python-format -#| msgid "Resolve domain name: {domain}" +#, python-format msgid "View domain: %(domain)s" -msgstr "Etki alanı adını çözümle: {domain}" +msgstr "Etki alanını görüntüle: %(domain)s" #: modules/featherwiki/__init__.py:25 #, python-brace-format @@ -4602,10 +4608,8 @@ msgid "Mumble" msgstr "Mumble" #: modules/mumble/__init__.py:158 -#, fuzzy -#| msgid "Mumble server is running" msgid "Mumble server is configured" -msgstr "Mumble sunucusu çalışmaktadır" +msgstr "Mumble sunucusu yapılandırıldı" #: modules/mumble/forms.py:30 msgid "Set SuperUser Password" @@ -6576,6 +6580,12 @@ msgid "" "provided by the FreedomBox Foundation at https://ddns.freedombox.org/ip/. If " "empty, lookups are disabled and some functionality will fail." msgstr "" +"İsteğe Bağlı Değer. Bu URL, {box_name}'ınızın herkese açık olarak " +"görülebilen IP adresini belirlemek için kullanılır. URL, istemci isteğinin " +"geldiği IPv4 veya IPv6 adresini döndürmelidir. Varsayılanı, FreedomBox Vakfı " +"tarafından https://ddns.freedombox.org/ip/ adresinde sağlanan hizmetin " +"kullanılmasıdır. Eğer boşsa, aramalar etkisizleştirilir ve bazı işlevler " +"başarısız olacaktır." #: modules/privacy/forms.py:25 msgid "Periodically submit a list of apps used (suggested)" @@ -6617,20 +6627,16 @@ msgstr "" "çoğu durumda etkisizleştirilebilir." #: modules/privacy/forms.py:45 -#, fuzzy -#| msgid "URL to look up public IP" msgid "URL to look up public IP address" -msgstr "Dış IP'yi aramak için URL" +msgstr "Dış IP adresi aramak için URL" #: modules/privacy/manifest.py:10 msgid "Usage reporting" msgstr "Kullanım raporlama" #: modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "Enable repro service" msgid "External services" -msgstr "repro servisini etkinleştir" +msgstr "Harici hizmetler" #: modules/privacy/manifest.py:10 msgid "Fallback DNS" From 66e912b998e9e0eebf301ebb8e6d1338c8ee706c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=8E=8B=E5=8F=AB=E6=88=91=E6=9D=A5=E5=B7=A1?= =?UTF-8?q?=E5=B1=B1?= Date: Tue, 14 Jan 2025 07:04:00 +0000 Subject: [PATCH 03/49] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 63.0% (1134 of 1798 strings) --- plinth/locale/zh_Hans/LC_MESSAGES/django.po | 24 ++++++--------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po index e002f07ee..52f2a9328 100644 --- a/plinth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hans/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: Plinth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-13 20:33-0500\n" -"PO-Revision-Date: 2025-01-01 08:00+0000\n" -"Last-Translator: 大王叫我来巡山 \n" +"PO-Revision-Date: 2025-01-15 04:00+0000\n" +"Last-Translator: 大王叫我来巡山 " +"\n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans\n" @@ -2240,10 +2240,8 @@ msgid "Add" msgstr "添加" #: modules/email/templates/email-dns.html:9 -#, fuzzy -#| msgid "Server domain" msgid "DNS Records for domain:" -msgstr "服务器域" +msgstr "域名的 DNS 记录:" #: modules/email/templates/email-dns.html:12 msgid "" @@ -2302,8 +2300,6 @@ msgid "" msgstr "" #: modules/email/templates/email-dns.html:76 -#, fuzzy -#| msgid "Hostname" msgid "Host" msgstr "主机名" @@ -4236,10 +4232,8 @@ msgid "Mumble" msgstr "" #: modules/mumble/__init__.py:158 -#, fuzzy -#| msgid "Mumble server is running" msgid "Mumble server is configured" -msgstr "Mumble 服务器正在运行" +msgstr "Mumble 服务器已配置" #: modules/mumble/forms.py:30 msgid "Set SuperUser Password" @@ -6047,20 +6041,16 @@ msgid "" msgstr "" #: modules/privacy/forms.py:45 -#, fuzzy -#| msgid "URL to look up public IP" msgid "URL to look up public IP address" -msgstr "查寻公开 IP 的 URL" +msgstr "查寻公开 IP 地址的 URL" #: modules/privacy/manifest.py:10 msgid "Usage reporting" msgstr "" #: modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "Enable repro service" msgid "External services" -msgstr "启用 repro 服务" +msgstr "外部服务" #: modules/privacy/manifest.py:10 msgid "Fallback DNS" From 84f29fde45186942905f14ae475d230a41400722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Podhoreck=C3=BD?= Date: Tue, 14 Jan 2025 21:17:56 +0000 Subject: [PATCH 04/49] Translated using Weblate (Czech) Currently translated at 100.0% (1798 of 1798 strings) --- plinth/locale/cs/LC_MESSAGES/django.po | 67 ++++++++++++++------------ 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po index c4071785f..563cfcf79 100644 --- a/plinth/locale/cs/LC_MESSAGES/django.po +++ b/plinth/locale/cs/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-13 20:33-0500\n" -"PO-Revision-Date: 2025-01-02 09:00+0000\n" +"PO-Revision-Date: 2025-01-15 04:00+0000\n" "Last-Translator: Jiří Podhorecký \n" "Language-Team: Czech \n" @@ -313,6 +313,8 @@ msgid "" "In 24 hour format. Services may become temporarily unavailable while running " "backup operation at this time of the day." msgstr "" +"Ve 24-hodinovém formátu. Při zálohování v tuto denní dobu mohou být služby " +"dočasně nedostupné." #: modules/backups/forms.py:85 modules/backups/forms.py:107 msgid "Included apps" @@ -543,7 +545,7 @@ msgstr "Zálohovací systém je zaneprázdněn jinou operací." #: modules/backups/privileged.py:92 msgid "Not enough space left on the disk or remote location." -msgstr "" +msgstr "Na disku nebo ve vzdáleném umístění nezbývá dostatek místa." #: modules/backups/repository.py:94 msgid "Existing repository is not encrypted." @@ -1832,6 +1834,8 @@ msgid "" "This service uses an external service to lookup public IP address. This can " "be configured in the privacy app." msgstr "" +"Tato služba používá externí službu k vyhledávání veřejné IP adresy. To lze " +"nakonfigurovat v aplikaci pro ochranu soukromí." #: modules/dynamicdns/__init__.py:64 msgid "Dynamic DNS Client" @@ -2255,11 +2259,11 @@ msgstr "Postfix / Dovecot" #: modules/email/__init__.py:80 msgid "More emails" -msgstr "" +msgstr "Další e-maily" #: modules/email/__init__.py:80 msgid "Same mailbox" -msgstr "" +msgstr "Stejná poštovní schránka" #: modules/email/__init__.py:82 msgid "My Email Aliases" @@ -2344,22 +2348,16 @@ msgid "Add" msgstr "Přidat" #: modules/email/templates/email-dns.html:9 -#, fuzzy -#| msgid "DNS Records" msgid "DNS Records for domain:" -msgstr "Záznamy DNS" +msgstr "Záznamy DNS pro doménu:" #: modules/email/templates/email-dns.html:12 -#, fuzzy -#| msgid "" -#| "The following DNS records must be added manually on your primary domain " -#| "for the mail server to work properly." msgid "" "The following DNS records must be added manually on this domain for the mail " "server to work properly for this domain." msgstr "" -"Pro správnou funkci poštovního serveru je třeba na primární doméně ručně " -"přidat následující záznamy DNS." +"Pro správnou funkci poštovního serveru na této doméně je třeba ručně přidat " +"následující záznamy DNS." #: modules/email/templates/email-dns.html:23 #: modules/email/templates/email-dns.html:77 @@ -2389,10 +2387,8 @@ msgid "Host/Target/Value" msgstr "Hostitel / cíl / hodnota" #: modules/email/templates/email-dns.html:50 -#, fuzzy -#| msgid "Server hostname or IP address" msgid "Reverse DNS Records for IP Addresses" -msgstr "Název nebo IP adresa serveru" +msgstr "Reverzní záznamy DNS pro IP adresy" #: modules/email/templates/email-dns.html:53 #, python-format @@ -2406,18 +2402,27 @@ msgid "" "part. Only one of your domains can have Revese DNS lookup configured unless " "you have multiple public IP addresses." msgstr "" +"Pokud vaše %(box_name)s běží na infrastruktuře cloudové služby, měli byste " +"nakonfigurovat Reverzní vyhledávání DNS. Není to povinné, nicméně to výrazně zlepšuje " +"doručitelnost e-mailů. Reverzní DNS se nekonfiguruje tam, kde je váš běžný " +"DNS. Měli byste jej hledat v nastavení svého VPS/ISP. Někteří poskytovatelé " +"za vás předkonfigurují část s IP adresou a vy musíte nastavit pouze část s " +"doménou. Reverzní vyhledávání DNS může být nakonfigurováno pouze u jedné z " +"vašich domén, pokud nemáte více veřejných IP adres." #: modules/email/templates/email-dns.html:66 msgid "" "An external service is used to lookup public IP address to show in the " "following section. This can be configured in the privacy app." msgstr "" +"K vyhledání veřejné IP adresy, která se zobrazí v následující části, se " +"používá externí služba. To lze nakonfigurovat v aplikaci pro ochranu " +"soukromí." #: modules/email/templates/email-dns.html:76 -#, fuzzy -#| msgid "Hostname" msgid "Host" -msgstr "Název stroje" +msgstr "Hostitel" #: modules/email/templates/email.html:10 msgid "Manage Spam" @@ -2433,12 +2438,13 @@ msgid "" "The following domains are configured. View details to see the list of DNS " "entries to be made for the domain." msgstr "" +"Jsou nakonfigurovány následující domény. Zobrazením podrobností zobrazíte " +"seznam záznamů DNS, které mají být pro danou doménu vytvořeny." #: modules/email/templates/email.html:35 -#, fuzzy, python-format -#| msgid "Resolve domain name: {domain}" +#, python-format msgid "View domain: %(domain)s" -msgstr "Vyřešit název domény: {domain}" +msgstr "Zobrazit doménu: %(domain)s" #: modules/featherwiki/__init__.py:25 #, python-brace-format @@ -4578,10 +4584,8 @@ msgid "Mumble" msgstr "Mumble" #: modules/mumble/__init__.py:158 -#, fuzzy -#| msgid "grub package is configured" msgid "Mumble server is configured" -msgstr "balíček grub je nakonfigurován" +msgstr "Server Mumble je nakonfigurován" #: modules/mumble/forms.py:30 msgid "Set SuperUser Password" @@ -6552,6 +6556,11 @@ msgid "" "provided by the FreedomBox Foundation at https://ddns.freedombox.org/ip/. If " "empty, lookups are disabled and some functionality will fail." msgstr "" +"Volitelná hodnota. Tato adresa URL slouží k určení veřejně viditelné IP " +"adresy vašeho {box_name}. Adresa URL by měla jednoduše vrátit adresu IPv4 " +"nebo IPv6, odkud přichází požadavek klienta. Výchozí nastavení je použití " +"služby poskytované nadací FreedomBox na adrese https://ddns.freedombox.org/" +"ip/. Pokud je prázdná, vyhledávání je zakázáno a některé funkce selžou." #: modules/privacy/forms.py:25 msgid "Periodically submit a list of apps used (suggested)" @@ -6591,20 +6600,16 @@ msgstr "" "připojení stabilní a spolehlivé." #: modules/privacy/forms.py:45 -#, fuzzy -#| msgid "URL to look up public IP" msgid "URL to look up public IP address" -msgstr "URL adresa na které hledat veřejnou IP adresu" +msgstr "URL pro vyhledání veřejné IP adresy" #: modules/privacy/manifest.py:10 msgid "Usage reporting" msgstr "Hlášení o použití" #: modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "Standard Services" msgid "External services" -msgstr "Standardní služby" +msgstr "Externí služby" #: modules/privacy/manifest.py:10 msgid "Fallback DNS" From 8ddcf83811a172420087949eda950f10aaaaa247 Mon Sep 17 00:00:00 2001 From: 109247019824 <109247019824@users.noreply.hosted.weblate.org> Date: Tue, 14 Jan 2025 03:26:08 +0000 Subject: [PATCH 05/49] Translated using Weblate (Bulgarian) Currently translated at 54.8% (987 of 1798 strings) --- plinth/locale/bg/LC_MESSAGES/django.po | 48 ++++++++++---------------- 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index fcb0c1db9..19ae75a6e 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-13 20:33-0500\n" -"PO-Revision-Date: 2025-01-03 22:02+0000\n" -"Last-Translator: 109247019824 <109247019824@users.noreply.hosted.weblate." -"org>\n" +"PO-Revision-Date: 2025-01-15 04:00+0000\n" +"Last-Translator: 109247019824 <109247019824@users.noreply.hosted.weblate.org>" +"\n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -2181,19 +2181,19 @@ msgstr "" #: modules/email/forms.py:42 msgid "Contains illegal characters" -msgstr "" +msgstr "Съдържа недопустими знаци" #: modules/email/forms.py:45 msgid "Must start and end with a-z or 0-9" -msgstr "" +msgstr "Трябва да започва и завършва с a-z или 0-9" #: modules/email/forms.py:49 msgid "Cannot be a number" -msgstr "" +msgstr "Не може да бъде число" #: modules/email/forms.py:59 msgid "Aliases" -msgstr "" +msgstr "Псевдоними" #: modules/email/manifest.py:12 modules/roundcube/__init__.py:50 #: modules/roundcube/manifest.py:7 @@ -2218,20 +2218,20 @@ msgstr "Пощенски сървър" #: modules/email/manifest.py:82 msgid "IMAP" -msgstr "" +msgstr "IMAP" #: modules/email/manifest.py:82 msgid "Spam control" -msgstr "" +msgstr "Нежелана поща" #: modules/email/templates/email-aliases.html:13 #: modules/email/templates/email.html:15 msgid "Manage Aliases" -msgstr "" +msgstr "Управление на псевдоними" #: modules/email/templates/email-aliases.html:16 msgid "You have no email aliases." -msgstr "" +msgstr "Не са настроени псевдоними." #: modules/email/templates/email-aliases.html:28 msgid "Create a new email alias" @@ -2242,22 +2242,16 @@ msgid "Add" msgstr "Добавяне" #: modules/email/templates/email-dns.html:9 -#, fuzzy -#| msgid "DNS Records" msgid "DNS Records for domain:" -msgstr "Записи на DNS" +msgstr "Записи на DNS за домейна:" #: modules/email/templates/email-dns.html:12 -#, fuzzy -#| msgid "" -#| "The following DNS records must be added manually on your primary domain " -#| "for the mail server to work properly." msgid "" "The following DNS records must be added manually on this domain for the mail " "server to work properly for this domain." msgstr "" -"Следните записи на DNS трябва да бъдат добавени ръчно в основния домейн, за " -"да работи правилно пощенският сървър." +"Следните записи в DNS трябва да бъдат добавени ръчно за този домейн, за да " +"работи правилно пощенският сървър за домейна." #: modules/email/templates/email-dns.html:23 #: modules/email/templates/email-dns.html:77 @@ -2310,10 +2304,8 @@ msgid "" msgstr "" #: modules/email/templates/email-dns.html:76 -#, fuzzy -#| msgid "Hostname" msgid "Host" -msgstr "Име на хоста" +msgstr "Хост" #: modules/email/templates/email.html:10 msgid "Manage Spam" @@ -4264,14 +4256,12 @@ msgid "Mumble" msgstr "" #: modules/mumble/__init__.py:158 -#, fuzzy -#| msgid "grub package is configured" msgid "Mumble server is configured" -msgstr "Пакетът grub е настроен" +msgstr "Сървърът на Mumble е настроен" #: modules/mumble/forms.py:30 msgid "Set SuperUser Password" -msgstr "" +msgstr "Задаване на парола за суперпотребителя" #: modules/mumble/forms.py:33 msgid "" @@ -6151,10 +6141,8 @@ msgid "Usage reporting" msgstr "Отчет за използването" #: modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "Onion services" msgid "External services" -msgstr "Услуга на Onion" +msgstr "Външни услуги" #: modules/privacy/manifest.py:10 msgid "Fallback DNS" From cb487e1e4c75247914755e878b13979476724e4d Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 14 Jan 2025 09:12:50 +0000 Subject: [PATCH 06/49] Translated using Weblate (Albanian) Currently translated at 99.6% (1791 of 1798 strings) --- plinth/locale/sq/LC_MESSAGES/django.po | 69 ++++++++++++++------------ 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index ce55aa909..9fb04822a 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-13 20:33-0500\n" -"PO-Revision-Date: 2025-01-01 08:00+0000\n" +"PO-Revision-Date: 2025-01-15 04:00+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" @@ -316,6 +316,8 @@ msgid "" "In 24 hour format. Services may become temporarily unavailable while running " "backup operation at this time of the day." msgstr "" +"Në format 24-orësh. Shërbimet mund të jenë përkohësisht të pakapshme, teksa " +"kryhet veprimi i kopjeruajtjes në këtë kohë të ditës." #: modules/backups/forms.py:85 modules/backups/forms.py:107 msgid "Included apps" @@ -550,6 +552,7 @@ msgstr "Sistemi i kojeruajtjeve është i zënë me një tjetër veprim." #: modules/backups/privileged.py:92 msgid "Not enough space left on the disk or remote location." msgstr "" +"S’ka mbetur hapësirë e mjaftueshme te disku apo te vendndodhja e largët." #: modules/backups/repository.py:94 msgid "Existing repository is not encrypted." @@ -1853,6 +1856,8 @@ msgid "" "This service uses an external service to lookup public IP address. This can " "be configured in the privacy app." msgstr "" +"Ky shërbim përdor një shërbim të jashtëm për të kërkuar adresa IP publike. " +"Kjo mund të formësohet te aplikacioni për privatësinë." #: modules/dynamicdns/__init__.py:64 msgid "Dynamic DNS Client" @@ -2280,11 +2285,11 @@ msgstr "Postfix/Dovecot" #: modules/email/__init__.py:80 msgid "More emails" -msgstr "" +msgstr "Më tepër email-e" #: modules/email/__init__.py:80 msgid "Same mailbox" -msgstr "" +msgstr "E njëjta kuti postare" #: modules/email/__init__.py:82 msgid "My Email Aliases" @@ -2369,22 +2374,16 @@ msgid "Add" msgstr "Shtoje" #: modules/email/templates/email-dns.html:9 -#, fuzzy -#| msgid "DNS Records" msgid "DNS Records for domain:" -msgstr "Zëra DNS" +msgstr "Zëra DNS për përkatësinë:" #: modules/email/templates/email-dns.html:12 -#, fuzzy -#| msgid "" -#| "The following DNS records must be added manually on your primary domain " -#| "for the mail server to work properly." msgid "" "The following DNS records must be added manually on this domain for the mail " "server to work properly for this domain." msgstr "" -"Që shërbyesi i postës të funksionojë si duhet, zërat DNS vijues duhen shtuar " -"dorazi te përkatësia juaj parësore." +"Që shërbyesi i postës të funksionojë si duhet për këtë përkatësi, zërat DNS " +"vijues duhen shtuar dorazi te kjo përkatësi." #: modules/email/templates/email-dns.html:23 #: modules/email/templates/email-dns.html:77 @@ -2414,10 +2413,8 @@ msgid "Host/Target/Value" msgstr "Strehë/Objektiv/Vlerë" #: modules/email/templates/email-dns.html:50 -#, fuzzy -#| msgid "Server hostname or IP address" msgid "Reverse DNS Records for IP Addresses" -msgstr "Strehëemër ose adresë IP shërbyesi" +msgstr "Zëra Reverse DNS për Adresa IP" #: modules/email/templates/email-dns.html:53 #, python-format @@ -2431,18 +2428,27 @@ msgid "" "part. Only one of your domains can have Revese DNS lookup configured unless " "you have multiple public IP addresses." msgstr "" +"Nëse %(box_name)s juaj funksionon në një infrastrukturë shërbimesh në re, " +"duhet të formësoni kërkim Reverse DNS. Kjo s’është e detyrueshme, por, përmirëson fort shkallën e dërgimit të " +"email-eve. Reverse DNS s’është formësuar atje ku është formësuar DNS-ja juaj " +"e rregull. Duhet të kërkoni për të te rregullimet e VPS/ISP-së tuaj. Disa " +"furnizues e paraformësojnë pjesën e adresës IP për ju dhe ju duhet vetëm të " +"ujdisni pjesën e përkatësisë. Kërkim Revese DNS mund të ketë të formësuar " +"vetëm një nga përkatësitë tuaja, veç në paçi adresa të shumta publike IP." #: modules/email/templates/email-dns.html:66 msgid "" "An external service is used to lookup public IP address to show in the " "following section. This can be configured in the privacy app." msgstr "" +"Për të kërkuar adresë publike IP, që të shfaqet te ndarja pasues, përdoret " +"një shërbim i jashtëm. Kjo mund të formësohet te aplikacioni për privatësinë." #: modules/email/templates/email-dns.html:76 -#, fuzzy -#| msgid "Hostname" msgid "Host" -msgstr "Strehëemër" +msgstr "Strehë" #: modules/email/templates/email.html:10 msgid "Manage Spam" @@ -2458,12 +2464,13 @@ msgid "" "The following domains are configured. View details to see the list of DNS " "entries to be made for the domain." msgstr "" +"Janë të formësuar përkatësinë vijuese. Shihni hollësitë, për të parë listën " +"e zërave DNS që duhen ujdisur për përkatësinë." #: modules/email/templates/email.html:35 -#, fuzzy, python-format -#| msgid "Resolve domain name: {domain}" +#, python-format msgid "View domain: %(domain)s" -msgstr "Ftillo emër përkatësie: {domain}" +msgstr "Shihni përkatësi: %(domain)s" #: modules/featherwiki/__init__.py:25 #, python-brace-format @@ -2734,7 +2741,7 @@ msgstr "Porta" #: modules/firewall/manifest.py:10 msgid "Blocking" -msgstr "" +msgstr "Bllokim" #: modules/firewall/manifest.py:10 modules/networks/forms.py:319 #: modules/upgrades/manifest.py:10 @@ -4630,10 +4637,8 @@ msgid "Mumble" msgstr "Mumble" #: modules/mumble/__init__.py:158 -#, fuzzy -#| msgid "grub package is configured" msgid "Mumble server is configured" -msgstr "paketa grub është e formësuar" +msgstr "Shërbyesi Mumble është formësuar" #: modules/mumble/forms.py:30 msgid "Set SuperUser Password" @@ -6617,6 +6622,12 @@ msgid "" "provided by the FreedomBox Foundation at https://ddns.freedombox.org/ip/. If " "empty, lookups are disabled and some functionality will fail." msgstr "" +"Vlerë Opsionale. Kjo URL përdoret për të përcaktuar adresën IP të dukshme " +"publikisht të {box_name} tuaj. URL-ja duhet të japë thjesht adresën IPv4 ose " +"IPv6 prej nga vjen kërkesa e klientit. Parazgjedhja është të përdoret " +"shërbimi i ofruar nga FreedomBox Foundation te https://ddns.freedombox.org/" +"ip/. Në u lëntë e zbrazët, kërkimet çaktivizohen dhe disa funksione s’do të " +"kryhen dot." #: modules/privacy/forms.py:25 msgid "Periodically submit a list of apps used (suggested)" @@ -6659,20 +6670,16 @@ msgstr "" "dhe e besueshme." #: modules/privacy/forms.py:45 -#, fuzzy -#| msgid "URL to look up public IP" msgid "URL to look up public IP address" -msgstr "URL ku të kërkohet IP publike" +msgstr "URL ku të kërkohet adresë IP publike" #: modules/privacy/manifest.py:10 msgid "Usage reporting" msgstr "Raportim përdorimi" #: modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "Onion services" msgid "External services" -msgstr "Shërbime Onion" +msgstr "Shërbime të jashtme" #: modules/privacy/manifest.py:10 msgid "Fallback DNS" From dbb4391b611db90f19c7f92e468ad686001a06f4 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 12 Jan 2025 20:46:22 -0800 Subject: [PATCH 07/49] action_utils: Implement methods to get/set the systemd boot target - To be used in GNOME app. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- plinth/action_utils.py | 18 ++++++++++++++++++ plinth/privileged/__init__.py | 11 ++++++----- plinth/privileged/service.py | 9 +++++++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/plinth/action_utils.py b/plinth/action_utils.py index 51ba3e866..337c45cd7 100644 --- a/plinth/action_utils.py +++ b/plinth/action_utils.py @@ -29,6 +29,24 @@ def is_systemd_running(): return os.path.exists('/run/systemd') +def systemd_get_default() -> str: + """Return the default target that systemd will boot into.""" + process = subprocess.run(['systemctl', 'get-default'], + stdout=subprocess.PIPE, check=True) + return process.stdout.decode().strip() + + +def systemd_set_default(target: str, isolate: bool = True): + """Set the default target that systemd will boot into. + + If 'isolate' is True, then immediate switch the current system target to + newly set target resulting in starting/stopping of services. + """ + subprocess.run(['systemctl', 'set-default', target], check=True) + if isolate: + subprocess.run(['systemctl', 'isolate', target], check=True) + + def service_daemon_reload(): """Reload systemd to ensure that newer unit files are read.""" subprocess.run(['systemctl', 'daemon-reload'], check=True, diff --git a/plinth/privileged/__init__.py b/plinth/privileged/__init__.py index 9c1093b9d..fa2c5f88d 100644 --- a/plinth/privileged/__init__.py +++ b/plinth/privileged/__init__.py @@ -5,12 +5,13 @@ from .config import dropin_is_valid, dropin_link, dropin_unlink from .packages import (filter_conffile_packages, install, is_package_manager_busy, remove, update) from .service import (disable, enable, is_enabled, is_running, mask, reload, - restart, start, stop, try_reload_or_restart, try_restart, - unmask) + restart, start, stop, systemd_set_default, + try_reload_or_restart, try_restart, unmask) __all__ = [ 'filter_conffile_packages', 'install', 'is_package_manager_busy', 'remove', - 'update', 'disable', 'enable', 'is_enabled', 'is_running', 'mask', - 'reload', 'restart', 'start', 'stop', 'try_reload_or_restart', - 'try_restart', 'unmask', 'dropin_is_valid', 'dropin_link', 'dropin_unlink' + 'update', 'systemd_set_default', 'disable', 'enable', 'is_enabled', + 'is_running', 'mask', 'reload', 'restart', 'start', 'stop', + 'try_reload_or_restart', 'try_restart', 'unmask', 'dropin_is_valid', + 'dropin_link', 'dropin_unlink' ] diff --git a/plinth/privileged/service.py b/plinth/privileged/service.py index d9c5450e3..657ec9c76 100644 --- a/plinth/privileged/service.py +++ b/plinth/privileged/service.py @@ -8,6 +8,15 @@ from plinth.actions import privileged from plinth.daemon import Daemon, RelatedDaemon +@privileged +def systemd_set_default(target: str, isolate: bool = True): + """Set the default target that systemd will boot into.""" + if target not in ['graphical.target', 'multi-user.target']: + raise ValueError('Invalid target') + + action_utils.systemd_set_default(target, isolate) + + @privileged def start(service: str): """Start a service.""" From 837ed09dc3eda87965926dd4ad8182777ee5b29b Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 12 Jan 2025 20:49:23 -0800 Subject: [PATCH 08/49] gnome: Add app to provide a graphical desktop environment - This app is useful for people who can connect a monitor, a keyboard, and a mouse to their FreedomBox. - Later this app allow a headless FreedomBox to be used as a remote desktop server. Users will be able to connect and access desktop applications from LAN or WAN. - No functional tests as they will likely fail in CI and container setups. Tests: - In a VM, install the app. Installation succeeds. - Disabling the app makes systemd switch to multi-user.target shutting down any service that any mean for GUI such as gnome-remote-desktop.service. Graphical login is not shown on the VM's virtual monitor. - Enabling the app make systemd switch to graphical.target and all the services are started again. Graphical login is shown on the VM's virtual monitor. - Login to desktop using VM's graphical terminal works. Settings, apps, browser etc. work. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- debian/copyright | 2 + plinth/modules/gnome/__init__.py | 90 +++ .../share/freedombox/modules-enabled/gnome | 1 + plinth/modules/gnome/manifest.py | 15 + plinth/modules/gnome/static/icons/gnome.png | Bin 0 -> 26096 bytes plinth/modules/gnome/static/icons/gnome.svg | 549 ++++++++++++++++++ plinth/modules/gnome/urls.py | 10 + 7 files changed, 667 insertions(+) create mode 100644 plinth/modules/gnome/__init__.py create mode 100644 plinth/modules/gnome/data/usr/share/freedombox/modules-enabled/gnome create mode 100644 plinth/modules/gnome/manifest.py create mode 100644 plinth/modules/gnome/static/icons/gnome.png create mode 100644 plinth/modules/gnome/static/icons/gnome.svg create mode 100644 plinth/modules/gnome/urls.py diff --git a/debian/copyright b/debian/copyright index 577de3278..fca404714 100644 --- a/debian/copyright +++ b/debian/copyright @@ -64,6 +64,8 @@ Files: plinth/modules/ejabberd/static/icons/ejabberd.png plinth/modules/ejabberd/static/icons/ejabberd.svg plinth/modules/email/static/icons/email.png plinth/modules/email/static/icons/email.svg + plinth/modules/email/static/icons/gnome.png + plinth/modules/email/static/icons/gnome.svg plinth/modules/matrixsynapse/static/icons/matrixsynapse.svg plinth/modules/privoxy/static/icons/privoxy.png plinth/modules/privoxy/static/icons/privoxy.svg diff --git a/plinth/modules/gnome/__init__.py b/plinth/modules/gnome/__init__.py new file mode 100644 index 000000000..a464232f2 --- /dev/null +++ b/plinth/modules/gnome/__init__.py @@ -0,0 +1,90 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""FreedomBox app to configure GNOME desktop.""" + +from django.utils.translation import gettext_lazy as _ + +from plinth import action_utils +from plinth import app as app_module +from plinth import cfg, menu +from plinth.modules.backups.components import BackupRestore +from plinth.package import Packages +from plinth.privileged import service as service_privileged +from plinth.utils import format_lazy + +from . import manifest + +_description = [ + _('GNOME is a desktop environment that focuses on simplicity and ease of ' + 'use.'), + format_lazy( + _('This app turns your {box_name} into a desktop computer if you ' + 'physically connect a monitor, a keyboard, and a mouse to it. A ' + 'browser, an office suite, and other basic utilities are available. ' + 'You may install further graphical applications using the software ' + 'center provided within.'), box_name=_(cfg.box_name)), + _('This app is not suitable for low-end hardware. It requires at least ' + '4GiB for RAM, 4GiB or disk space and a GPU capable of basic 3D ' + 'acceleration.'), +] + + +class GNOMEApp(app_module.App): + """FreedomBox app for GNOME desktop.""" + + app_id = 'gnome' + + _version = 1 + + def __init__(self) -> None: + """Create components for the app.""" + super().__init__() + + info = app_module.Info(app_id=self.app_id, version=self._version, + name=_('GNOME'), icon_filename='gnome', + description=_description, manual_page='GNOME', + donation_url='https://www.gnome.org/donate/', + tags=manifest.tags) + self.add(info) + + menu_item = menu.Menu('menu-gnome', info.name, info.icon_filename, + info.tags, 'gnome:index', parent_url_name='apps') + self.add(menu_item) + + packages = Packages('packages-gnome', ['gnome']) + self.add(packages) + + system_target = SystemTarget('system-target-gnome', 'graphical.target') + self.add(system_target) + + backup_restore = BackupRestore('backup-restore-gnome', + **manifest.backup) + self.add(backup_restore) + + def setup(self, old_version): + """Install and configure the app.""" + super().setup(old_version) + if not old_version: + self.enable() + + +class SystemTarget(app_module.LeaderComponent): + """Component to set the default target systemd will boot into.""" + + _DEFAULT_TARGET: str = 'multi-user.target' + + def __init__(self, component_id: str, target: str): + """Initialize the component.""" + super().__init__(component_id) + self.target = target + + def is_enabled(self) -> bool: + """Return whether the component is enabled.""" + return action_utils.systemd_get_default() == self.target + + def enable(self) -> None: + """Run operations to enable the component.""" + service_privileged.systemd_set_default(self.target) + + def disable(self) -> None: + """Run operations to disable the component.""" + service_privileged.systemd_set_default(self._DEFAULT_TARGET) diff --git a/plinth/modules/gnome/data/usr/share/freedombox/modules-enabled/gnome b/plinth/modules/gnome/data/usr/share/freedombox/modules-enabled/gnome new file mode 100644 index 000000000..94ddfc9c8 --- /dev/null +++ b/plinth/modules/gnome/data/usr/share/freedombox/modules-enabled/gnome @@ -0,0 +1 @@ +plinth.modules.gnome diff --git a/plinth/modules/gnome/manifest.py b/plinth/modules/gnome/manifest.py new file mode 100644 index 000000000..de18fdb4a --- /dev/null +++ b/plinth/modules/gnome/manifest.py @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Application manifest for GNOME.""" + +from django.utils.translation import gettext_lazy as _ + +backup = {} + +tags = [ + _('Desktop'), + _('Browser'), + _('Office suite'), + _('Software store'), + _('GUI'), + _('Graphical apps') +] diff --git a/plinth/modules/gnome/static/icons/gnome.png b/plinth/modules/gnome/static/icons/gnome.png new file mode 100644 index 0000000000000000000000000000000000000000..4d341cb5b7772a93fa2241a395546ac14e8e488c GIT binary patch literal 26096 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 gG&HohWZ% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plinth/modules/gnome/urls.py b/plinth/modules/gnome/urls.py new file mode 100644 index 000000000..a4a4fa0f4 --- /dev/null +++ b/plinth/modules/gnome/urls.py @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""URLs for the GNOME module.""" + +from django.urls import re_path + +from plinth.views import AppView + +urlpatterns = [ + re_path(r'^apps/gnome/$', AppView.as_view(app_id='gnome'), name='index'), +] From acc3fa1bdb72862a9412508bdfbb40f50ea72b18 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 12 Jan 2025 20:46:22 -0800 Subject: [PATCH 09/49] gnome: Add changes missing from branch merge Signed-off-by: Sunil Mohan Adapa --- plinth/action_utils.py | 10 ++-------- plinth/modules/gnome/__init__.py | 7 ++++++- plinth/modules/gnome/manifest.py | 2 +- plinth/privileged/service.py | 4 ++-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/plinth/action_utils.py b/plinth/action_utils.py index 337c45cd7..a1f26a19c 100644 --- a/plinth/action_utils.py +++ b/plinth/action_utils.py @@ -36,15 +36,9 @@ def systemd_get_default() -> str: return process.stdout.decode().strip() -def systemd_set_default(target: str, isolate: bool = True): - """Set the default target that systemd will boot into. - - If 'isolate' is True, then immediate switch the current system target to - newly set target resulting in starting/stopping of services. - """ +def systemd_set_default(target: str): + """Set the default target that systemd will boot into.""" subprocess.run(['systemctl', 'set-default', target], check=True) - if isolate: - subprocess.run(['systemctl', 'isolate', target], check=True) def service_daemon_reload(): diff --git a/plinth/modules/gnome/__init__.py b/plinth/modules/gnome/__init__.py index a464232f2..b26a39948 100644 --- a/plinth/modules/gnome/__init__.py +++ b/plinth/modules/gnome/__init__.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """FreedomBox app to configure GNOME desktop.""" +from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ from plinth import action_utils @@ -23,8 +24,12 @@ _description = [ 'You may install further graphical applications using the software ' 'center provided within.'), box_name=_(cfg.box_name)), _('This app is not suitable for low-end hardware. It requires at least ' - '4GiB for RAM, 4GiB or disk space and a GPU capable of basic 3D ' + '4GiB of RAM, 4GiB of disk space and a GPU capable of basic 3D ' 'acceleration.'), + format_lazy( + _('After installing, enabling, disabling, or uninstalling the app, ' + 'you will need to restart the machine for ' + 'changes to take effect.'), power_url=reverse_lazy('power:restart')), ] diff --git a/plinth/modules/gnome/manifest.py b/plinth/modules/gnome/manifest.py index de18fdb4a..fae93bd0e 100644 --- a/plinth/modules/gnome/manifest.py +++ b/plinth/modules/gnome/manifest.py @@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _ -backup = {} +backup: dict = {} tags = [ _('Desktop'), diff --git a/plinth/privileged/service.py b/plinth/privileged/service.py index 657ec9c76..c299c98ac 100644 --- a/plinth/privileged/service.py +++ b/plinth/privileged/service.py @@ -9,12 +9,12 @@ from plinth.daemon import Daemon, RelatedDaemon @privileged -def systemd_set_default(target: str, isolate: bool = True): +def systemd_set_default(target: str): """Set the default target that systemd will boot into.""" if target not in ['graphical.target', 'multi-user.target']: raise ValueError('Invalid target') - action_utils.systemd_set_default(target, isolate) + action_utils.systemd_set_default(target) @privileged From 0a35c91de5f09b55b285dbda1c9dac3fff3b48ac Mon Sep 17 00:00:00 2001 From: 109247019824 <109247019824@users.noreply.hosted.weblate.org> Date: Wed, 15 Jan 2025 11:36:02 +0000 Subject: [PATCH 10/49] Translated using Weblate (Bulgarian) Currently translated at 55.0% (990 of 1798 strings) --- plinth/locale/bg/LC_MESSAGES/django.po | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index 19ae75a6e..d75fe938c 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-13 20:33-0500\n" -"PO-Revision-Date: 2025-01-15 04:00+0000\n" +"PO-Revision-Date: 2025-01-16 11:00+0000\n" "Last-Translator: 109247019824 <109247019824@users.noreply.hosted.weblate.org>" "\n" "Language-Team: Bulgarian Date: Thu, 16 Jan 2025 12:14:04 -0800 Subject: [PATCH 11/49] ui: Fix missing arrow on dropdown form fields Closes: #2488. This is due to outdated django-bootstrap-form package that does not set .form-select class on dropdowns as needed by Bootstrap 5. Tests: - On stable and testing VMs, dropdowns in the 'Add backup location' page show arrows. - On a mobile layout, the overflowing text does not overlap onto the dropdown arrow. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- static/themes/default/css/main.css | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/static/themes/default/css/main.css b/static/themes/default/css/main.css index c39c4ab79..c100ba7f6 100644 --- a/static/themes/default/css/main.css +++ b/static/themes/default/css/main.css @@ -165,6 +165,21 @@ form .alert .close { flex-wrap: wrap; } +/* In Bootstrap 5, drop down fields are meant to be to be styled with the + form-select class. Needs updated django-bootstrap-form */ +select.form-control { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + background-image: var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + padding-right: 2.25rem; /* Don't overall text on the drop down arrow */ +} + +[data-bs-theme="dark"] select.form-control { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); +} + /* In Bootstrap 5, instead of styling .col-* to 100% width by default, .row > * is styled as .form-group has been removed. Needs updated django-bootstrap-form */ From b15bca2fe4d91356c984c623b5a6a4492098d599 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 6 Jan 2025 13:52:10 -0800 Subject: [PATCH 12/49] nextcloud: tests: functional: Set override domain testing on VM Closes: #2437 - The port part of the override domain was not being set properly. Set this properly. Tests: - Running tests on am VM spawned by the container script works (it does not require port). - Running tests on Vagrant VM has not been tested. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/nextcloud/tests/test_functional.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plinth/modules/nextcloud/tests/test_functional.py b/plinth/modules/nextcloud/tests/test_functional.py index b98bd7f64..6c8833162 100644 --- a/plinth/modules/nextcloud/tests/test_functional.py +++ b/plinth/modules/nextcloud/tests/test_functional.py @@ -23,8 +23,10 @@ class TestNextcloudApp(functional.BaseAppTests): super().install_and_setup(session_browser) functional.app_enable(session_browser, self.app_name) default_url = functional.config['DEFAULT']['url'] - hostname = urllib.parse.urlparse(default_url).hostname - session_browser.find_by_id('id_override_domain').fill(hostname) + parse_result = urllib.parse.urlparse(default_url) + override_domain = parse_result.hostname + override_domain += f':{parse_result.port}' if parse_result.port else '' + session_browser.find_by_id('id_override_domain').fill(override_domain) session_browser.find_by_id('id_admin_password').fill(PASSWORD) functional.submit(session_browser, form_class='form-configuration') From 861796d21b7a7fa44ec92c5506a8b2f2c2098441 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Mon, 6 Jan 2025 13:54:44 -0800 Subject: [PATCH 13/49] nextcloud: tests: functional: Fix test for modified structure of UI - The DOM structure of the nextcloud UI seems to have changed. Tests: - In functional tests, with the updated code, test_create_folder test passes. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/nextcloud/tests/test_functional.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plinth/modules/nextcloud/tests/test_functional.py b/plinth/modules/nextcloud/tests/test_functional.py index 6c8833162..6bce73eb2 100644 --- a/plinth/modules/nextcloud/tests/test_functional.py +++ b/plinth/modules/nextcloud/tests/test_functional.py @@ -112,7 +112,8 @@ def _class(klass): def _create_folder(browser, folder_name): """Create a folder in the Nextcloud files app.""" # Click on the '+ New' button in the header - xpath = f'//div[{_class("action-item")} and @menu-title="New"]//button' + xpath = f'//div[{_class("action-item")}]' \ + '//button[.//*[contains(text(),"New")]]' browser.find_by_xpath(xpath).first.click() # Click on the 'New folder' pop down menu item From 00a4ff3b413cb0ab14723103328f99d87ba4470c Mon Sep 17 00:00:00 2001 From: Benedek Nagy Date: Tue, 14 Jan 2025 13:27:09 +0100 Subject: [PATCH 14/49] email: Make rspamd learn spam/ham when the user marks mails as junk or not junk. Add two sieve scripts for spam/ham learning. When the user moves a mail from anywhere to junk, or from junk to anywhere (except for trash) the mail is piped into the respective rspamc learn_spam/learn_ham command. The rspamc command is run as the mail user and the command requires that the user can connect to localhost:11334. Because of that, add the mail user to the allowed users that can access protected services. The sievec compilation of the new scripts requre the dovecot-antispam package, so install it and increment the email version number. Closes: #2487 Imroves: #56 Tests done: 1. Apply the patches on an existing install 2. Confirm the firewall and the email app get updated 3. Move a mail from inbox to junk and confirm that rspamd statistics for "Learned" mails increment by one. 4. Move back the mail from junk to inbox and confirm the number increments again. 5. Move the mail to trash and confirm the script doesn't execute. 6. Repeat steps 3-5 with mail_debug = yes in /etc/dovecot/dovecot.conf and confirm the script esxecution further by reading the debug logs. [Sunil] - Split the configuration file 90-freedombox-sieve.conf into 90-freedombox-imap.conf and merge the remaining with 95-freedombox-sieve.conf. - These changes do not need dovecot-anitspam package. Remove it from packages list for the app. Signed-off-by: Benedek Nagy Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa --- plinth/modules/email/__init__.py | 11 +++++++---- .../etc/dovecot/conf.d/90-freedombox-imap.conf | 8 ++++++++ .../etc/dovecot/conf.d/95-freedombox-sieve.conf | 17 +++++++++++++++++ .../dovecot/freedombox-sieve/learn-ham.sieve | 6 ++++++ .../dovecot/freedombox-sieve/learn-spam.sieve | 2 ++ plinth/modules/email/privileged/spam.py | 6 ++++-- plinth/modules/firewall/__init__.py | 2 +- plinth/modules/firewall/privileged.py | 2 +- 8 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 plinth/modules/email/data/usr/share/freedombox/etc/dovecot/conf.d/90-freedombox-imap.conf create mode 100644 plinth/modules/email/data/usr/share/freedombox/etc/dovecot/freedombox-sieve/learn-ham.sieve create mode 100644 plinth/modules/email/data/usr/share/freedombox/etc/dovecot/freedombox-sieve/learn-spam.sieve diff --git a/plinth/modules/email/__init__.py b/plinth/modules/email/__init__.py index f7763c3e5..a1dba4139 100644 --- a/plinth/modules/email/__init__.py +++ b/plinth/modules/email/__init__.py @@ -52,7 +52,7 @@ class EmailApp(plinth.app.App): app_id = 'email' - _version = 5 + _version = 6 def __init__(self) -> None: """Initialize the email app.""" @@ -104,6 +104,7 @@ class EmailApp(plinth.app.App): '/etc/dovecot/conf.d/05-freedombox-userdb.conf', '/etc/dovecot/conf.d/15-freedombox-auth.conf', '/etc/dovecot/conf.d/15-freedombox-mail.conf', + '/etc/dovecot/conf.d/90-freedombox-imap.conf', '/etc/dovecot/conf.d/90-freedombox-lmtp.conf', '/etc/dovecot/conf.d/90-freedombox-mailboxes.conf', '/etc/dovecot/conf.d/90-freedombox-master.conf', @@ -118,9 +119,11 @@ class EmailApp(plinth.app.App): '/etc/rspamd/local.d/freedombox-dkim-signing.conf' ]) self.add(dropin_configs) - dropin_configs_sieve = DropinConfigs( - 'dropin-configs-email-sieve', - ['/etc/dovecot/freedombox-sieve-after/sort-spam.sieve']) + dropin_configs_sieve = DropinConfigs('dropin-configs-email-sieve', [ + '/etc/dovecot/freedombox-sieve/learn-ham.sieve', + '/etc/dovecot/freedombox-sieve/learn-spam.sieve', + '/etc/dovecot/freedombox-sieve-after/sort-spam.sieve', + ]) self.add(dropin_configs_sieve) listen_ports = [(25, 'tcp4'), (25, 'tcp6'), (465, 'tcp4'), diff --git a/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/conf.d/90-freedombox-imap.conf b/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/conf.d/90-freedombox-imap.conf new file mode 100644 index 000000000..b49b5df9c --- /dev/null +++ b/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/conf.d/90-freedombox-imap.conf @@ -0,0 +1,8 @@ +# Do not edit this file. Manage your settings on FreedomBox. + +# Make rspamd learn spam/ham when the user marks mails as junk or not junk. +# https://doc.dovecot.org/2.3/configuration_manual/howto/antispam_with_sieve/ + +protocol imap { + mail_plugins = $mail_plugins imap_sieve +} diff --git a/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/conf.d/95-freedombox-sieve.conf b/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/conf.d/95-freedombox-sieve.conf index 2b4ec8ccb..f6cfb9e62 100644 --- a/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/conf.d/95-freedombox-sieve.conf +++ b/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/conf.d/95-freedombox-sieve.conf @@ -6,4 +6,21 @@ plugin { sieve_after = /etc/dovecot/freedombox-sieve-after + + # Make rspamd learn spam/ham when the user marks mails as junk or not junk. + # https://doc.dovecot.org/2.3/configuration_manual/howto/antispam_with_sieve/ + sieve_plugins = sieve_imapsieve sieve_extprograms + sieve_pipe_bin_dir = /usr/bin + sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment + + # From elsewhere to Junk folder + imapsieve_mailbox1_name = Junk + imapsieve_mailbox1_causes = COPY + imapsieve_mailbox1_before = file:/etc/dovecot/freedombox-sieve/learn-spam.sieve + + # From Junk folder to elsewhere + imapsieve_mailbox2_name = * + imapsieve_mailbox2_from = Junk + imapsieve_mailbox2_causes = COPY + imapsieve_mailbox2_before = file:/etc/dovecot/freedombox-sieve/learn-ham.sieve } diff --git a/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/freedombox-sieve/learn-ham.sieve b/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/freedombox-sieve/learn-ham.sieve new file mode 100644 index 000000000..e651129da --- /dev/null +++ b/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/freedombox-sieve/learn-ham.sieve @@ -0,0 +1,6 @@ +require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment"]; +if environment "imap.mailbox" "Trash" { + # Putting spam in Trash mailbox is not significant + stop; +} +pipe :copy "rspamc" ["learn_ham"]; diff --git a/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/freedombox-sieve/learn-spam.sieve b/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/freedombox-sieve/learn-spam.sieve new file mode 100644 index 000000000..ef4634ac5 --- /dev/null +++ b/plinth/modules/email/data/usr/share/freedombox/etc/dovecot/freedombox-sieve/learn-spam.sieve @@ -0,0 +1,2 @@ +require ["vnd.dovecot.pipe", "copy", "imapsieve"]; +pipe :copy "rspamc" ["learn_spam"]; diff --git a/plinth/modules/email/privileged/spam.py b/plinth/modules/email/privileged/spam.py index 43451f9e3..c42331393 100644 --- a/plinth/modules/email/privileged/spam.py +++ b/plinth/modules/email/privileged/spam.py @@ -31,8 +31,10 @@ def setup_spam(): def _compile_sieve(): """Compile all .sieve script to binary format for performance.""" - sieve_dir = '/etc/dovecot/freedombox-sieve-after/' - subprocess.run(['sievec', sieve_dir], check=True) + sieve_dirs = ['/etc/dovecot/freedombox-sieve-after/', + '/etc/dovecot/freedombox-sieve'] + for sieve_dir in sieve_dirs: + subprocess.run(['sievec', sieve_dir], check=True) def _setup_rspamd(): diff --git a/plinth/modules/firewall/__init__.py b/plinth/modules/firewall/__init__.py index d76f59968..cc16c659e 100644 --- a/plinth/modules/firewall/__init__.py +++ b/plinth/modules/firewall/__init__.py @@ -49,7 +49,7 @@ class FirewallApp(app_module.App): app_id = 'firewall' - _version = 4 + _version = 5 can_be_disabled = False diff --git a/plinth/modules/firewall/privileged.py b/plinth/modules/firewall/privileged.py index 8682d4d27..605c7e948 100644 --- a/plinth/modules/firewall/privileged.py +++ b/plinth/modules/firewall/privileged.py @@ -111,7 +111,7 @@ def _setup_local_service_protection(): for permanent in [[], ['--permanent']]: for ip_type in ['ipv4', 'ipv6']: for owner_type in ['--uid-owner', '--gid-owner']: - for user_group in ['root', 'www-data']: + for user_group in ['root', 'www-data', 'mail']: _add_rule(permanent, ip_type, '-A', 'OUTPUT', '-m', 'owner', owner_type, user_group, '-j', 'MARK', '--or-mark', '0x800000') From d14739c8addd115f2e95d6facc964d138187c5a1 Mon Sep 17 00:00:00 2001 From: pesder Date: Thu, 23 Jan 2025 10:38:39 +0000 Subject: [PATCH 15/49] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 20.3% (365 of 1798 strings) --- plinth/locale/zh_Hant/LC_MESSAGES/django.po | 34 ++++++++------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po index b297143e1..b8357c266 100644 --- a/plinth/locale/zh_Hant/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hant/LC_MESSAGES/django.po @@ -8,16 +8,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-13 20:33-0500\n" -"PO-Revision-Date: 2024-07-26 08:09+0000\n" -"Last-Translator: Ricky From Hong Kong \n" -"Language-Team: Chinese (Traditional) \n" +"PO-Revision-Date: 2025-01-24 03:38+0000\n" +"Last-Translator: pesder \n" +"Language-Team: Chinese (Traditional Han script) \n" "Language: zh_Hant\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.10-dev\n" #: config.py:103 #, python-brace-format @@ -62,10 +62,8 @@ msgid "Restoring from the backup will restore app data." msgstr "從備份中恢復將還原應用程式資料." #: forms.py:39 -#, fuzzy -#| msgid "Repository not found" msgid "Repository to backup to" -msgstr "找不到儲存庫" +msgstr "用來備份的儲存庫" #: forms.py:64 msgid "Select a domain name to be used with this application" @@ -101,11 +99,11 @@ msgstr "使用瀏覽器語言設定" #: menu.py:116 templates/base.html:121 msgid "Home" -msgstr "" +msgstr "首頁" #: menu.py:117 templates/base.html:130 msgid "Apps" -msgstr "" +msgstr "程式" #: menu.py:119 menu.py:126 templates/base.html:139 msgid "System" @@ -135,19 +133,15 @@ msgstr "系統可能負載過重. 請稍後重試." #: middleware.py:147 #, python-brace-format msgid "Page not found: {url}" -msgstr "" +msgstr "找不到頁面:{url}" #: middleware.py:150 -#, fuzzy -#| msgid "Error During Backup" msgid "Error running operation." -msgstr "備份時發生錯誤" +msgstr "執行操作時發生錯誤。" #: middleware.py:152 -#, fuzzy -#| msgid "Error During Backup" msgid "Error loading page." -msgstr "備份時發生錯誤" +msgstr "載入頁面時發生錯誤。" #: modules/apache/__init__.py:32 msgid "Apache HTTP Server" @@ -466,8 +460,6 @@ msgid "Encrypted" msgstr "加密" #: modules/backups/manifest.py:16 -#, fuzzy -#| msgid "Schedule" msgid "Schedules" msgstr "排程" @@ -477,14 +469,14 @@ msgstr "" #: modules/backups/manifest.py:19 msgid "App data" -msgstr "" +msgstr "程式資料" #: modules/backups/manifest.py:20 #: modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:15 #: modules/miniflux/templates/miniflux.html:12 #: modules/snapshot/templates/snapshot.html:13 templates/app.html:52 msgid "Configuration" -msgstr "" +msgstr "設定" #: modules/backups/manifest.py:21 msgid "Borg" From 54b956c602ee5cfca992543aaa9c04572feb6891 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 22 Jan 2025 15:37:12 -0800 Subject: [PATCH 16/49] ui: Drop the temporary fix for missing popper.js 2.0 - Latest version of libjs-bootstrap5 depends on node-popper2. However, version in Debian bookworm still continue to have incorrect dependency. So, add explicit dependency on node-popper2 until we stop supporting Bookworm. Tests: - In stable and testing VMs, install node-popper2 and notices that the following work as expected: - User menu dropdown in desktop and mobile layouts. - Help menu dropdown in desktop and mobile layouts. - Notification dropdown. - App extra actions dropdown. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- debian/control | 4 +++ plinth/templates/base.html | 3 +-- static/themes/default/js/fix.js | 44 --------------------------------- 3 files changed, 5 insertions(+), 46 deletions(-) delete mode 100644 static/themes/default/js/fix.js diff --git a/debian/control b/debian/control index e262db663..668d5d22d 100644 --- a/debian/control +++ b/debian/control @@ -18,6 +18,8 @@ Build-Depends: e2fsprogs, gir1.2-nm-1.0, libjs-bootstrap5, + # Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0 + node-popper2, pybuild-plugin-pyproject, python3-all:any, python3-apt, @@ -94,6 +96,8 @@ Depends: lsof, netcat-openbsd, network-manager, + # Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0 + node-popper2, ppp, pppoe, python3-apt, diff --git a/plinth/templates/base.html b/plinth/templates/base.html index c32e8f0fd..876f86674 100644 --- a/plinth/templates/base.html +++ b/plinth/templates/base.html @@ -59,8 +59,7 @@ {% endif %} - - + diff --git a/static/themes/default/js/fix.js b/static/themes/default/js/fix.js deleted file mode 100644 index 12e49dd23..000000000 --- a/static/themes/default/js/fix.js +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later -/* - This file is part of FreedomBox. - - @licstart The following is the entire license notice for the - JavaScript code in this page. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - - @licend The above is the entire license notice - for the JavaScript code in this page. -*/ - -// Workaround Debian bug #1087969. popper.js 2.x is needed for Bootstrap 5, -// however, the current version on in Debian is 1.x. -if (typeof(Popper.createPopper) === 'undefined') { - window.Popper.createPopper = function(reference, popper, options) { - if (options.modifiers.length == 1) { - // Navbar dropdown - options.modifiers = { - 'applyStyle': {'enabled': false} - }; - } else { - // Regular dropdown - options.modifiers = { - 'flip': {'enabled': true}, - 'offset': {'offset': 0}, - 'preventOverflow': {'boundariesElement': 'scrollParent'} - }; - } - return new Popper(reference, popper, options); - }; -} From 67fd7475885bf099fc6fa42261e6fd619b494abb Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Wed, 15 Jan 2025 14:58:07 -0800 Subject: [PATCH 17/49] firewall, networks, storage: Drop polkit pkla files Closes: Debian bug #1093065. These files were only present to serve polkit = 105 in Debian bullseye. Alternate files .rules already being shipped for polkit > 105. Tests: - Install infinoted and enable/disable firewalld. infinoted ports have been enabled/disabled in the firewall as noticed using firewall-cmd. - Creating/deleting network manager connections works well. nmcli shows the updates. - Add backup location page shows list of disks properly. Signed-off-by: Sunil Mohan Adapa Reviewed-by: Veiko Aasa --- .../usr/share/polkit-1/rules.d/50-freedombox-firewalld.rules | 5 ----- .../10-vendor.d/org.freedombox.FirewallD1.pkla | 4 ---- .../polkit-1/rules.d/50-freedombox-network-manager.rules | 5 ----- .../10-vendor.d/org.freedombox.NetworkManager.pkla | 4 ---- .../usr/share/polkit-1/rules.d/50-freedombox-udisks2.rules | 5 ----- .../localauthority/10-vendor.d/org.freedombox.UDisks2.pkla | 4 ---- 6 files changed, 27 deletions(-) delete mode 100644 plinth/modules/firewall/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.FirewallD1.pkla delete mode 100644 plinth/modules/networks/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.NetworkManager.pkla delete mode 100644 plinth/modules/storage/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.UDisks2.pkla diff --git a/plinth/modules/firewall/data/usr/share/polkit-1/rules.d/50-freedombox-firewalld.rules b/plinth/modules/firewall/data/usr/share/polkit-1/rules.d/50-freedombox-firewalld.rules index aa0da8b93..6612e90cd 100644 --- a/plinth/modules/firewall/data/usr/share/polkit-1/rules.d/50-freedombox-firewalld.rules +++ b/plinth/modules/firewall/data/usr/share/polkit-1/rules.d/50-freedombox-firewalld.rules @@ -1,10 +1,5 @@ /* # SPDX-License-Identifier: AGPL-3.0-or-later - -This file is used only by policykit-1 version > 0.105. A corresponding .pkla -file is used by policykit-1 <= 0.105. See: -https://davidz25.blogspot.com/2012/06/authorization-rules-in-polkit.html - */ polkit.addRule(function(action, subject) { diff --git a/plinth/modules/firewall/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.FirewallD1.pkla b/plinth/modules/firewall/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.FirewallD1.pkla deleted file mode 100644 index 9fbef974c..000000000 --- a/plinth/modules/firewall/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.FirewallD1.pkla +++ /dev/null @@ -1,4 +0,0 @@ -[Allow FreedomBox to manage firewalld] -Identity=unix-user:plinth -Action=org.fedoraproject.FirewallD1.config.info;org.fedoraproject.FirewallD1.config;org.fedoraproject.FirewallD1.direct.info;org.fedoraproject.FirewallD1.direct; -ResultAny=yes diff --git a/plinth/modules/networks/data/usr/share/polkit-1/rules.d/50-freedombox-network-manager.rules b/plinth/modules/networks/data/usr/share/polkit-1/rules.d/50-freedombox-network-manager.rules index 795cdf81b..b5c3b8867 100644 --- a/plinth/modules/networks/data/usr/share/polkit-1/rules.d/50-freedombox-network-manager.rules +++ b/plinth/modules/networks/data/usr/share/polkit-1/rules.d/50-freedombox-network-manager.rules @@ -1,10 +1,5 @@ /* # SPDX-License-Identifier: AGPL-3.0-or-later - -This file is used only by policykit-1 version > 0.105. A corresponding .pkla -file is used by policykit-1 <= 0.105. See: -https://davidz25.blogspot.com/2012/06/authorization-rules-in-polkit.html - */ polkit.addRule(function(action, subject) { diff --git a/plinth/modules/networks/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.NetworkManager.pkla b/plinth/modules/networks/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.NetworkManager.pkla deleted file mode 100644 index 5b7071c26..000000000 --- a/plinth/modules/networks/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.NetworkManager.pkla +++ /dev/null @@ -1,4 +0,0 @@ -[Allow Plinth to manage NetworkManager connections] -Identity=unix-user:plinth -Action=org.freedesktop.NetworkManager.* -ResultAny=yes diff --git a/plinth/modules/storage/data/usr/share/polkit-1/rules.d/50-freedombox-udisks2.rules b/plinth/modules/storage/data/usr/share/polkit-1/rules.d/50-freedombox-udisks2.rules index 89e521108..5e5adb581 100644 --- a/plinth/modules/storage/data/usr/share/polkit-1/rules.d/50-freedombox-udisks2.rules +++ b/plinth/modules/storage/data/usr/share/polkit-1/rules.d/50-freedombox-udisks2.rules @@ -1,10 +1,5 @@ /* # SPDX-License-Identifier: AGPL-3.0-or-later - -This file is used only by policykit-1 version > 0.105. A corresponding .pkla -file is used by policykit-1 <= 0.105. See: -https://davidz25.blogspot.com/2012/06/authorization-rules-in-polkit.html - */ polkit.addRule(function(action, subject) { diff --git a/plinth/modules/storage/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.UDisks2.pkla b/plinth/modules/storage/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.UDisks2.pkla deleted file mode 100644 index acb5350f5..000000000 --- a/plinth/modules/storage/data/var/lib/polkit-1/localauthority/10-vendor.d/org.freedombox.UDisks2.pkla +++ /dev/null @@ -1,4 +0,0 @@ -[Allow FreedomBox to manage UDisks2] -Identity=unix-user:plinth -Action=org.freedesktop.udisks2.filesystem-mount;org.freedesktop.udisks2.filesystem-mount-system;org.freedesktop.udisks2.filesystem-mount-other-seat;org.freedesktop.udisks2.filesystem-fstab -ResultAny=yes From 6a057342d8e3088ec1cb8a363087b3e5a6eaab8b Mon Sep 17 00:00:00 2001 From: ikmaak Date: Fri, 24 Jan 2025 20:24:10 +0000 Subject: [PATCH 18/49] Translated using Weblate (Dutch) Currently translated at 90.8% (1634 of 1798 strings) --- plinth/locale/nl/LC_MESSAGES/django.po | 295 +++++++++---------------- 1 file changed, 107 insertions(+), 188 deletions(-) diff --git a/plinth/locale/nl/LC_MESSAGES/django.po b/plinth/locale/nl/LC_MESSAGES/django.po index 8d2dfcd4f..c02ac193f 100644 --- a/plinth/locale/nl/LC_MESSAGES/django.po +++ b/plinth/locale/nl/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-13 20:33-0500\n" -"PO-Revision-Date: 2024-09-21 01:05+0000\n" +"PO-Revision-Date: 2025-01-24 23:26+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Dutch \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.8-dev\n" +"X-Generator: Weblate 5.10-dev\n" "X-Language: nl_NL\n" "X-Source-Language: C\n" @@ -138,22 +138,17 @@ msgid "System is possibly under heavy load. Please retry later." msgstr "Systeem is mogelijk zwaar belast. Probeer het later nog eens." #: middleware.py:147 -#, fuzzy, python-brace-format -#| msgid "Page not found - %(box_name)s" +#, python-brace-format msgid "Page not found: {url}" -msgstr "Pagina niet gevonden - %(box_name)s" +msgstr "Pagina niet gevonden: {url}" #: middleware.py:150 -#, fuzzy -#| msgid "Error running apt-get" msgid "Error running operation." -msgstr "Fout bij het uitvoeren van apt-get" +msgstr "Fout bij het uitvoeren." #: middleware.py:152 -#, fuzzy -#| msgid "Error running apt-get" msgid "Error loading page." -msgstr "Fout bij het uitvoeren van apt-get" +msgstr "Pagina-laadfout." #: modules/apache/__init__.py:32 msgid "Apache HTTP Server" @@ -205,15 +200,15 @@ msgstr "Lokaal netwerkdomein" #: modules/avahi/manifest.py:14 msgid "Auto-discovery" -msgstr "" +msgstr "Automatische herkenning" #: modules/avahi/manifest.py:14 modules/backups/manifest.py:17 msgid "Local" -msgstr "" +msgstr "Lokaal" #: modules/avahi/manifest.py:14 msgid "mDNS" -msgstr "" +msgstr "mDNS" #: modules/backups/__init__.py:24 msgid "Backups allows creating and managing backup archives." @@ -482,16 +477,12 @@ msgid "Restore" msgstr "Herstellen" #: modules/backups/manifest.py:15 -#, fuzzy -#| msgid "Encryption" msgid "Encrypted" -msgstr "Encryptie" +msgstr "Versleuteld" #: modules/backups/manifest.py:16 -#, fuzzy -#| msgid "Schedule" msgid "Schedules" -msgstr "Schema" +msgstr "Schema's" #: modules/backups/manifest.py:18 #, fuzzy @@ -514,7 +505,7 @@ msgstr "Configuratie" #: modules/backups/manifest.py:21 msgid "Borg" -msgstr "" +msgstr "Borg" #: modules/backups/privileged.py:31 msgid "" @@ -998,7 +989,7 @@ msgstr "Delen van bestanden en fragmenten" #: modules/bepasty/manifest.py:23 msgid "Pastebin" -msgstr "" +msgstr "Pastebin" #: modules/bepasty/templates/bepasty.html:12 msgid "Manage Passwords" @@ -1122,10 +1113,8 @@ msgstr "" "worden doorgestuurd" #: modules/bind/manifest.py:16 -#, fuzzy -#| msgid "DNSSEC" msgid "DNS" -msgstr "DNSSEC" +msgstr "DNS" #: modules/bind/manifest.py:17 modules/mumble/manifest.py:67 #: modules/radicale/manifest.py:91 modules/shadowsocks/forms.py:24 @@ -1242,7 +1231,7 @@ msgstr "Er bestaat al een bibliotheek met deze naam." #: modules/calibre/manifest.py:20 msgid "Ebook" -msgstr "" +msgstr "Eboek" #: modules/calibre/manifest.py:20 #, fuzzy @@ -1557,15 +1546,15 @@ msgstr "Ongeldige lijst van STUN/TURN-server URI's" #: modules/coturn/manifest.py:7 modules/janus/manifest.py:16 msgid "Video conference" -msgstr "" +msgstr "Videoconferentie" #: modules/coturn/manifest.py:7 msgid "STUN" -msgstr "" +msgstr "STUN" #: modules/coturn/manifest.py:7 msgid "TURN" -msgstr "" +msgstr "TURN" #: modules/coturn/templates/coturn.html:15 msgid "Use the following URLs to configure your communication server:" @@ -1779,7 +1768,7 @@ msgstr "Als er problemen zijn, probeer ze dan automatisch te repareren." #: modules/diagnostics/manifest.py:10 msgid "Detect problems" -msgstr "" +msgstr "Herken problemen" #: modules/diagnostics/manifest.py:10 msgid "Repair" @@ -1787,7 +1776,7 @@ msgstr "Herstellen" #: modules/diagnostics/manifest.py:10 msgid "Daily" -msgstr "" +msgstr "Dagelijks" #: modules/diagnostics/templates/diagnostics.html:11 msgid "Diagnostics Run" @@ -2036,13 +2025,11 @@ msgstr "Domein" #: modules/dynamicdns/manifest.py:17 msgid "Free" -msgstr "" +msgstr "Vrij" #: modules/dynamicdns/manifest.py:17 -#, fuzzy -#| msgid "Server public key:" msgid "Needs public IP" -msgstr "Openbare sleutel van de server:" +msgstr "Heeft publiek IP adres nodig" #: modules/dynamicdns/templates/dynamicdns.html:16 #: modules/ejabberd/templates/ejabberd.html:18 modules/firewall/manifest.py:10 @@ -2238,7 +2225,7 @@ msgstr "Encryptie" #: modules/ejabberd/manifest.py:125 modules/matrixsynapse/manifest.py:103 #: modules/mumble/manifest.py:67 msgid "Audio chat" -msgstr "" +msgstr "Audiogesprek" #: modules/ejabberd/manifest.py:126 modules/matrixsynapse/manifest.py:104 #, fuzzy @@ -2248,36 +2235,27 @@ msgstr "Video Ruimte" #: modules/ejabberd/manifest.py:127 modules/jsxc/manifest.py:16 msgid "XMPP" -msgstr "" +msgstr "XMPP" #: modules/ejabberd/templates/ejabberd.html:23 -#, fuzzy, python-format -#| msgid "" -#| "Your XMPP server domain is set to %(domainname)s. User IDs will " -#| "look like username@%(domainname)s. You can setup your domain on " -#| "the system Configure page." +#, python-format msgid "" "Your XMPP server domain is set to %(domain_name)s. User IDs will look " "like username@%(domain_name)s. You can setup your domain on the " "system Name Services page." msgstr "" -"Het XMPP domein is ingesteld als %(domainname)s. Gebruikersnamen zien " -"eruit als username@%(domainname)s. Het domein kan worden ingesteld op " -"de Instellingen pagina." +"Het XMPP domein is ingesteld als %(domain_name)s. Gebruikersnamen " +"zien eruit als username@%(domain_name)s. Het domein kan worden " +"ingesteld op de Domeininstellingen pagina." #: modules/ejabberd/templates/ejabberd.html:30 -#, fuzzy, python-format -#| msgid "" -#| "Your XMPP server domain is set to %(domainname)s. User IDs will " -#| "look like username@%(domainname)s. You can setup your domain on " -#| "the system Configure page." +#, python-format msgid "" "Your XMPP server domain is not set. You can setup your domain on the system " "Name Services page." msgstr "" -"Het XMPP domein is ingesteld als %(domainname)s. Gebruikersnamen zien " -"eruit als username@%(domainname)s. Het domein kan worden ingesteld op " -"de Instellingen pagina." +"Het XMPP domein is niet ingesteld. Het domein kan worden ingesteld op de Domeininstellingen pagina." #: modules/email/__init__.py:26 msgid "" @@ -2338,7 +2316,7 @@ msgstr "Postfix/Dovecot" #: modules/email/__init__.py:80 msgid "More emails" -msgstr "" +msgstr "Meer emails" #: modules/email/__init__.py:80 msgid "Same mailbox" @@ -2405,11 +2383,11 @@ msgstr "E-mailserver" #: modules/email/manifest.py:82 msgid "IMAP" -msgstr "" +msgstr "IMAP" #: modules/email/manifest.py:82 msgid "Spam control" -msgstr "" +msgstr "Spam beheer" #: modules/email/templates/email-aliases.html:13 #: modules/email/templates/email.html:15 @@ -2429,10 +2407,8 @@ msgid "Add" msgstr "Toevoegen" #: modules/email/templates/email-dns.html:9 -#, fuzzy -#| msgid "DNS Records" msgid "DNS Records for domain:" -msgstr "DNS Records" +msgstr "DNS Records voor domein:" #: modules/email/templates/email-dns.html:12 #, fuzzy @@ -2522,7 +2498,7 @@ msgstr "" #: modules/email/templates/email.html:35 #, python-format msgid "View domain: %(domain)s" -msgstr "" +msgstr "Bekijk domein: %(domain)s" #: modules/featherwiki/__init__.py:25 #, python-brace-format @@ -2582,11 +2558,11 @@ msgstr "" #: modules/featherwiki/forms.py:23 modules/tiddlywiki/forms.py:23 msgid "New name for the wiki file, with file extension \".html\"" -msgstr "" +msgstr "Nieuwe naam voor het wiki bestand, met bestandsextensie \".html\"" #: modules/featherwiki/forms.py:25 modules/tiddlywiki/forms.py:25 msgid "Renaming the file has no effect on the title of the wiki." -msgstr "" +msgstr "Het bestand hernoemen heeft geen invloed op de wikinaam." #: modules/featherwiki/forms.py:32 msgid "A Feather Wiki file with .html file extension" @@ -2609,26 +2585,22 @@ msgstr "Wiki" #: modules/featherwiki/manifest.py:18 modules/infinoted/manifest.py:46 #: modules/tiddlywiki/manifest.py:20 msgid "Note taking" -msgstr "" +msgstr "Notities maken" #: modules/featherwiki/manifest.py:18 modules/ikiwiki/manifest.py:15 #: modules/mediawiki/manifest.py:25 modules/tiddlywiki/manifest.py:21 #: modules/wordpress/manifest.py:26 -#, fuzzy -#| msgid "Website Security" msgid "Website" -msgstr "Websitebeveiliging" +msgstr "Website" #: modules/featherwiki/manifest.py:18 modules/tiddlywiki/manifest.py:25 msgid "Quine" -msgstr "" +msgstr "Quine" #: modules/featherwiki/manifest.py:18 modules/nextcloud/manifest.py:56 #: modules/tiddlywiki/manifest.py:26 -#, fuzzy -#| msgid "Debian:" msgid "Non-Debian" -msgstr "Debian:" +msgstr "Non-Debian" #: modules/featherwiki/templates/featherwiki_configure.html:12 #: modules/tiddlywiki/templates/tiddlywiki_configure.html:12 @@ -2733,10 +2705,9 @@ msgid "Failed to add wiki file." msgstr "Wiki bestand toevoegen mislukt." #: modules/featherwiki/views.py:138 modules/tiddlywiki/views.py:139 -#, fuzzy, python-brace-format -#| msgid "Could not delete {name}: {error}" +#, python-brace-format msgid "Could not delete {name}" -msgstr "Verwijderen van {name} mislukt: {error}" +msgstr "Verwijderen van {name} mislukt" #: modules/firewall/__init__.py:25 #, python-brace-format @@ -2853,10 +2824,8 @@ msgstr "" "worden geleverd door de Cockpit toepassing." #: modules/first_boot/__init__.py:61 -#, fuzzy -#| msgid "Setup Complete!" msgid "Setup complete! Next steps:" -msgstr "Instelling voltooid!" +msgstr "Instelling voltooid! Volgende stappen:" #: modules/first_boot/__init__.py:63 #, python-brace-format @@ -2867,11 +2836,11 @@ msgstr "" #: modules/first_boot/__init__.py:66 msgid "Next steps" -msgstr "" +msgstr "Volgende stappen" #: modules/first_boot/__init__.py:73 msgid "See next steps" -msgstr "" +msgstr "Zie volgende stappen" #: modules/first_boot/forms.py:14 #, python-brace-format @@ -2889,10 +2858,8 @@ msgid "Firstboot Wizard Secret" msgstr "geheime code van Firstboot Wizard" #: modules/first_boot/templates/firstboot_complete.html:14 -#, fuzzy -#| msgid "Setup Complete!" msgid "Setup Complete! Next Steps:" -msgstr "Instelling voltooid!" +msgstr "Instelling voltooid! Volgende stappen:" #: modules/first_boot/templates/firstboot_complete.html:21 #, python-format @@ -3054,7 +3021,7 @@ msgstr "" #: modules/gitweb/manifest.py:37 msgid "Developer tool" -msgstr "" +msgstr "Ontwikkelaarshulpmiddel" #: modules/gitweb/templates/gitweb_configure.html:13 msgid "Manage Repositories" @@ -3144,10 +3111,8 @@ msgid "About" msgstr "Over ons" #: modules/help/templates/help_about.html:25 templates/messages.html:23 -#, fuzzy -#| msgid "Success" msgid "Success:" -msgstr "Succes" +msgstr "Succes:" #: modules/help/templates/help_about.html:29 #: modules/upgrades/templates/upgrades_configure.html:26 @@ -3238,10 +3203,8 @@ msgstr "" "Cockpit of SSH)." #: modules/help/templates/help_about.html:97 -#, fuzzy -#| msgid "Learn more" msgid "Learn" -msgstr "Meer informatie" +msgstr "Leren" #: modules/help/templates/help_about.html:116 templates/toolbar.html:19 msgid "Donate" @@ -3249,11 +3212,11 @@ msgstr "Doneren" #: modules/help/templates/help_about.html:119 msgid "Join project" -msgstr "" +msgstr "Doe mee aan het project" #: modules/help/templates/help_about.html:123 msgid "Translate" -msgstr "" +msgstr "Vertaal" #: modules/help/templates/help_about.html:129 #, fuzzy @@ -3554,7 +3517,7 @@ msgstr "Beheerdersaccount wachtwooord" #: modules/ikiwiki/manifest.py:15 modules/wordpress/manifest.py:26 msgid "Blog" -msgstr "" +msgstr "Weblog" #: modules/ikiwiki/templates/ikiwiki_configure.html:12 msgid "Manage Wikis and Blogs" @@ -3976,15 +3939,12 @@ msgid "Obtain" msgstr "Verkrijgen" #: modules/letsencrypt/templates/letsencrypt.html:112 -#, fuzzy, python-format -#| msgid "" -#| "No domains have been configured. Configure " -#| "domains to be able to obtain certificates for them." +#, python-format msgid "" "No domains have been configured. Configure " "domains to be able to obtain certificates for them." msgstr "" -"Er zijn geen geconfigureerde domeinen. Stel " +"Er zijn geen geconfigureerde domeinen. Stel " "domeinen in om certificaten ervoor te kunnen uitgeven." #: modules/letsencrypt/views.py:40 @@ -4132,24 +4092,14 @@ msgstr "" "identificeren als volgt; @gebruikersnaam:domeinnaam." #: modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:31 -#, fuzzy -#| msgid "" -#| "\n" -#| " Warning! Changing the domain name after this step " -#| "will\n" -#| " require uninstalling and reinstalling the app which will wipe app's " -#| "data.\n" -#| " " msgid "" "Warning! Changing the domain name after this step will " "require uninstalling and reinstalling the app which will wipe app's data." msgstr "" -"\n" -" Waarschuwing! De domeinnaam veranderen na deze stap\n" +"Waarschuwing! De domeinnaam veranderen na deze stap\n" " vereist het verwijderen en herinstalleren van dit programma, dit " "verwijdert\n" -" de data in dit programma.\n" -" " +" de data in dit programma." #: modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:42 #, python-format @@ -4452,10 +4402,8 @@ msgid "When disabled, players cannot die or receive damage of any kind." msgstr "Indien uitgeschakeld, kunnen spelers niet sterven of schade oplopen." #: modules/minetest/manifest.py:49 -#, fuzzy -#| msgid "Updated server." msgid "Game server" -msgstr "Server geaktualiseerd." +msgstr "Game server" #: modules/minetest/manifest.py:49 #, fuzzy @@ -4465,7 +4413,7 @@ msgstr "Block Sandbox" #: modules/minetest/manifest.py:49 msgid "Platform" -msgstr "" +msgstr "Platform" #: modules/minetest/templates/minetest.html:17 modules/networks/forms.py:105 #: modules/networks/forms.py:145 @@ -4530,11 +4478,11 @@ msgstr "Simple Media Server" #: modules/minidlna/manifest.py:116 msgid "Television" -msgstr "" +msgstr "Televisie" #: modules/minidlna/manifest.py:116 msgid "UPnP" -msgstr "" +msgstr "UPnP" #: modules/minidlna/manifest.py:116 #, fuzzy @@ -4640,7 +4588,7 @@ msgstr "SSH" #: modules/miniflux/manifest.py:138 modules/rssbridge/manifest.py:16 #: modules/ttrss/manifest.py:55 msgid "ATOM" -msgstr "" +msgstr "ATOM" #: modules/miniflux/templates/miniflux.html:14 msgid "" @@ -4903,16 +4851,16 @@ msgstr "" #: modules/names/templates/names.html:66 msgid "Global" -msgstr "" +msgstr "Globaal" #: modules/names/templates/names.html:68 msgid "Link" -msgstr "" +msgstr "Link" #: modules/names/templates/names.html:73 #: modules/networks/templates/connection_show.html:268 msgid "DNS-over-TLS" -msgstr "" +msgstr "DNS-over-TLS" #: modules/names/templates/names.html:77 msgid "DNSSEC" @@ -4941,10 +4889,8 @@ msgid "Install" msgstr "Installeer" #: modules/names/templates/names.html:131 -#, fuzzy -#| msgid "Error during installation" msgid "Error retrieving status:" -msgstr "Fout tijdens installatie" +msgstr "Fout bij ophalen status:" #: modules/names/views.py:81 #, fuzzy @@ -5126,16 +5072,12 @@ msgstr "" "dit netwerk gebruiken" #: modules/networks/forms.py:136 -#, fuzzy -#| msgid "" -#| "Automatic: Configure automatically, use Internet connection from this " -#| "network" msgid "" "Link-local: Configure automatically to use an address that is only relevant " "to this network." msgstr "" -"Automatisch: Automatisch configureren, internetverbinding van dit netwerk " -"gebruiken" +"Link-local: Configureer automatisch om een adres te gebruiken dat alleen " +"voor dit netwerk geldt." #: modules/networks/forms.py:141 msgid "Ignore: Ignore this addressing method" @@ -5445,7 +5387,7 @@ msgstr "Lokaal netwerkdomein" #: modules/networks/manifest.py:8 msgid "Topology" -msgstr "" +msgstr "Topologie" #: modules/networks/templates/connection_show.html:27 #, python-format @@ -5614,7 +5556,7 @@ msgstr "Firewall zone" #: modules/networks/templates/connection_show.html:338 #: templates/internal-zone.html:13 templates/messages.html:20 msgid "Info:" -msgstr "" +msgstr "Info:" #: modules/networks/templates/connection_show.html:292 msgid "" @@ -5699,10 +5641,8 @@ msgstr "Wijzig verbinding" #: modules/networks/templates/connections_fields.html:13 #: templates/messages.html:14 -#, fuzzy -#| msgid "Error" msgid "Error:" -msgstr "Foutmelding" +msgstr "Foutmelding:" #: modules/networks/templates/connections_fields.html:20 #: modules/users/templates/users_update.html:51 templates/messages.html:30 @@ -5949,26 +5889,21 @@ msgid "No Wi-Fi device detected." msgstr "" #: modules/networks/templates/wifi_scan.html:21 -#, fuzzy, python-format -#| msgid "Delete %(username)s" +#, python-format msgid "Device: %(interface_name)s" -msgstr "Verwijder %(username)s" +msgstr "Netwerkapparaat: %(interface_name)s" #: modules/networks/templates/wifi_scan.html:27 -#, fuzzy -#| msgid "Last Connected Time" msgid "Last scanned: " -msgstr "Tijdstip vorige verbinding" +msgstr "Laatst gescand: " #: modules/networks/templates/wifi_scan.html:31 msgid "never" -msgstr "" +msgstr "nooit" #: modules/networks/templates/wifi_scan.html:52 -#, fuzzy -#| msgid "Wi-Fi network not found" msgid "No Wi-Fi networks found." -msgstr "Wifi netwerk niet gevonden" +msgstr "Geen Wifi netwerken gevonden." #: modules/networks/views.py:27 msgid "disabled" @@ -6566,20 +6501,14 @@ msgid "Add custom PageKite service" msgstr "Aangepaste PageKite dienst toevoegen" #: modules/pagekite/templates/pagekite_custom_services.html:19 -#, fuzzy -#| msgid "" -#| "Warning:
Your PageKite frontend server may not support all the " -#| "protocol/port combinations that you are able to define here. For example, " -#| "HTTPS on ports other than 443 is known to cause problems." msgid "" "Your PageKite frontend server may not support all the protocol/port " "combinations that you are able to define here. For example, HTTPS on ports " "other than 443 is known to cause problems." msgstr "" -"Waarschuwing:
Deze PageKite frontend server zal niet alle protocol/" -"poortcombinaties die hier gedefinieerd kunnen worden ondersteunen. Het is " -"bijvoorbeeld bekend dat HTTPS servers die niet op poort 443 worden ingesteld " -"problemen opleveren." +"Deze PageKite frontend server zal niet alle protocol/poortcombinaties die " +"hier gedefinieerd kunnen worden ondersteunen. Het is bijvoorbeeld bekend dat " +"HTTPS servers die niet op poort 443 worden ingesteld problemen opleveren." #: modules/pagekite/utils.py:45 msgid "Web Server (HTTP)" @@ -6652,7 +6581,7 @@ msgstr "Power" #: modules/power/manifest.py:10 msgid "Reboot" -msgstr "" +msgstr "Herstart" #: modules/power/manifest.py:10 #, fuzzy @@ -6869,7 +6798,7 @@ msgstr "Quasseldroid" #: modules/quassel/manifest.py:54 msgid "IRC" -msgstr "" +msgstr "IRC" #: modules/radicale/__init__.py:25 #, fuzzy, python-brace-format @@ -6984,15 +6913,15 @@ msgstr "GNOME Kalender" #: modules/radicale/manifest.py:91 modules/roundcube/manifest.py:23 msgid "Contacts" -msgstr "" +msgstr "Contacten" #: modules/radicale/manifest.py:91 msgid "CalDAV" -msgstr "" +msgstr "CalDAV" #: modules/radicale/manifest.py:91 msgid "CardDAV" -msgstr "" +msgstr "CardDAV" #: modules/radicale/views.py:32 msgid "Access rights configuration updated" @@ -7058,10 +6987,8 @@ msgstr "" "aangeven met welk account verbinding moet worden gemaakt." #: modules/roundcube/manifest.py:23 -#, fuzzy -#| msgid "FairEmail" msgid "Email" -msgstr "FairEmail" +msgstr "Email" #: modules/rssbridge/__init__.py:21 msgid "" @@ -7081,19 +7008,16 @@ msgstr "" "href=\"{users_url}\">elke gebruiker die tot de feed-reader groep behoort." #: modules/rssbridge/__init__.py:28 -#, fuzzy, python-brace-format -#| msgid "" -#| "You can use RSS-Bridge with Tiny Tiny RSS to " -#| "follow various websites. When adding a feed, enable authentication and " -#| "use your {box_name} credentials." +#, python-brace-format msgid "" "You can use RSS-Bridge with Miniflux or Tiny Tiny RSS to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"RSS-Bridge wordt met Tiny Tiny RSS gebruikt om " -"verschillende websites te volgen. Schakel bij het toevoegen van een feed " -"authenticatie in en gebruik de {box_name}-inloggegevens." +"RSS-Bridge wordt met Miniflux of Tiny Tiny RSS gebruikt om verschillende websites te " +"volgen. Schakel bij het toevoegen van een feed authenticatie in en gebruik " +"de {box_name}-inloggegevens." #: modules/rssbridge/__init__.py:48 modules/ttrss/__init__.py:47 msgid "Read and subscribe to news feeds" @@ -7880,7 +7804,7 @@ msgstr "" #: modules/snapshot/manifest.py:14 msgid "Periodic" -msgstr "" +msgstr "Periosiek" #: modules/snapshot/manifest.py:14 msgid "Known good state" @@ -7888,7 +7812,7 @@ msgstr "" #: modules/snapshot/manifest.py:14 msgid "Btrfs" -msgstr "" +msgstr "Btrfs" #: modules/snapshot/templates/snapshot_delete_selected.html:12 msgid "Delete the following snapshots permanently?" @@ -8303,7 +8227,7 @@ msgstr "Schijven" #: modules/storage/manifest.py:9 msgid "Usage" -msgstr "" +msgstr "Gebruik" #: modules/storage/manifest.py:9 #, fuzzy @@ -8490,7 +8414,7 @@ msgstr "" #: modules/tiddlywiki/manifest.py:24 msgid "Zettelkasten" -msgstr "" +msgstr "Zettelkasten" #: modules/tiddlywiki/templates/tiddlywiki_delete.html:18 msgid "" @@ -9360,10 +9284,9 @@ msgid "Save Changes" msgstr "Wijzigingen opslaan" #: modules/users/templates/users_update.html:46 -#, fuzzy, python-format -#| msgid "Delete user %(username)s permanently?" +#, python-format msgid "Delete user %(username)s and all the user's files?" -msgstr "Gebruiker %(username)s permanent verwijderen?" +msgstr "Gebruiker %(username)s en al diens bestanden verwijderen?" #: modules/users/templates/users_update.html:56 msgid "" @@ -9871,7 +9794,7 @@ msgstr "" #: modules/zoph/manifest.py:26 msgid "Photo" -msgstr "" +msgstr "Foto" #: modules/zoph/manifest.py:26 #, fuzzy @@ -9898,10 +9821,9 @@ msgid "Generic" msgstr "Generiek" #: operation.py:120 -#, fuzzy, python-brace-format -#| msgid "Error: {name}: {exception_message}" +#, python-brace-format msgid "Error: {name}: {exception}" -msgstr "Fout: {name}: {exception_message}" +msgstr "Fout: {name}: {exception}" #: operation.py:123 #, python-brace-format @@ -9953,22 +9875,19 @@ msgid "Updating app" msgstr "Toepassing updaten" #: setup.py:78 -#, fuzzy, python-brace-format -#| msgid "Error installing app: {error}" +#, python-brace-format msgid "Error installing app: {exception}" -msgstr "Fout bij het installeren van de toepassing: {error}" +msgstr "Fout bij het installeren van de toepassing: {exception}" #: setup.py:80 -#, fuzzy, python-brace-format -#| msgid "Error repairing app: {error}" +#, python-brace-format msgid "Error repairing app: {exception}" -msgstr "Fout bij het repareren van de toepassing: {error}" +msgstr "Fout bij het repareren van de toepassing: {exception}" #: setup.py:82 -#, fuzzy, python-brace-format -#| msgid "Error updating app: {error}" +#, python-brace-format msgid "Error updating app: {exception}" -msgstr "Fout bij het bijwerken van de toepassing: {error}" +msgstr "Fout bij het bijwerken van de toepassing: {exception}" #: setup.py:85 msgid "App installed." @@ -10357,7 +10276,7 @@ msgstr "" #: views.py:84 msgid "Here" -msgstr "" +msgstr "Hier" #: views.py:376 msgid "Setting unchanged" From 0cb9e2ef0ddcdc45c13efc38ab23e30be849a124 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Fri, 24 Jan 2025 15:18:20 -0800 Subject: [PATCH 19/49] d/control: Fix incorrect comment format Tests: - Building the package works. Signed-off-by: Sunil Mohan Adapa --- debian/control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/control b/debian/control index 668d5d22d..bd7d2e125 100644 --- a/debian/control +++ b/debian/control @@ -18,7 +18,7 @@ Build-Depends: e2fsprogs, gir1.2-nm-1.0, libjs-bootstrap5, - # Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0 +# Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0 node-popper2, pybuild-plugin-pyproject, python3-all:any, @@ -96,7 +96,7 @@ Depends: lsof, netcat-openbsd, network-manager, - # Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0 +# Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0 node-popper2, ppp, pppoe, From 585c48bf8ac98a728cfa4e4b58e8d6a87be0e373 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Fri, 24 Jan 2025 15:50:09 -0800 Subject: [PATCH 20/49] d/copyright: Fix copyright entry for GNOME app icons Signed-off-by: Sunil Mohan Adapa --- debian/copyright | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/copyright b/debian/copyright index fca404714..52c0f3fce 100644 --- a/debian/copyright +++ b/debian/copyright @@ -64,8 +64,8 @@ Files: plinth/modules/ejabberd/static/icons/ejabberd.png plinth/modules/ejabberd/static/icons/ejabberd.svg plinth/modules/email/static/icons/email.png plinth/modules/email/static/icons/email.svg - plinth/modules/email/static/icons/gnome.png - plinth/modules/email/static/icons/gnome.svg + plinth/modules/gnome/static/icons/gnome.png + plinth/modules/gnome/static/icons/gnome.svg plinth/modules/matrixsynapse/static/icons/matrixsynapse.svg plinth/modules/privoxy/static/icons/privoxy.png plinth/modules/privoxy/static/icons/privoxy.svg From 35ba8ecdd71c70e4a420919c6601f7f4de2e7e81 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 16 Jan 2025 14:12:51 -0800 Subject: [PATCH 21/49] ui: Fix tag separator not showing on some machines We were using the Unicode point "Katakana middle dot" which was not showing up on some systems. Separators may not show up the same on all machines depending on the font used. So, use an SVG image instead. Tests: - On the front page and apps page, the separators appears as expected. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/templates/card.html | 2 +- plinth/templates/index.html | 2 +- static/themes/default/css/main.css | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/plinth/templates/card.html b/plinth/templates/card.html index cbc30c8cb..13e912374 100644 --- a/plinth/templates/card.html +++ b/plinth/templates/card.html @@ -20,7 +20,7 @@
{{ item.name }}
- {% for tag in item.tags|slice:":3" %}{% trans tag %}{% if not forloop.last %}・{% endif %}{% endfor %} + {% for tag in item.tags|slice:":3" %}{% trans tag %}{% if not forloop.last %}{% endif %}{% endfor %}
diff --git a/plinth/templates/index.html b/plinth/templates/index.html index 67b0c76aa..c82ca63f4 100644 --- a/plinth/templates/index.html +++ b/plinth/templates/index.html @@ -76,7 +76,7 @@ {{ shortcut.name }}
- {% for tag in shortcut.tags|slice:":3" %}{% trans tag %}{% if not forloop.last %}・{% endif %}{% endfor %} + {% for tag in shortcut.tags|slice:":3" %}{% trans tag %}{% if not forloop.last %}{% endif %}{% endfor %}
diff --git a/static/themes/default/css/main.css b/static/themes/default/css/main.css index c100ba7f6..a6dee5f3e 100644 --- a/static/themes/default/css/main.css +++ b/static/themes/default/css/main.css @@ -660,6 +660,15 @@ footer { margin: 0.5rem 0; } +.card .tag-separator { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'>%3ccircle style='fill:%236c757d' cx='8' cy='8' r='8'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + display: inline-block; + width: 0.1875rem; + height: 0.375rem; + margin: 0 0.5rem; +} + /* System page - special card styling */ .system-page .card-list { justify-content: left; From ea134d577768943ceff7929e049185b0c63931d8 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 9 Jan 2025 19:18:10 -0800 Subject: [PATCH 22/49] email: Recommend Thunderbird Mobile instead of K-9 Mail - Thunderbird Mobile has been built on K-9 mail and is the future of the app[1]. Links: 1) https://blog.thunderbird.net/2022/06/revealed-thunderbird-on-android-plans-k9/ Tests: - Go to email app and expand the clients information. Verify the app store links for Thunderbird Mobile. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/email/manifest.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plinth/modules/email/manifest.py b/plinth/modules/email/manifest.py index 8927516fb..0a8ef49d4 100644 --- a/plinth/modules/email/manifest.py +++ b/plinth/modules/email/manifest.py @@ -34,17 +34,17 @@ clients = [ }, { 'name': - _('K-9 Mail'), + _('Thunderbird Mobile'), 'platforms': [{ 'type': 'store', 'os': 'android', 'store_name': 'f-droid', - 'url': store_url('f-droid', 'com.fsck.k9') + 'url': store_url('f-droid', 'net.thunderbird.android') }, { 'type': 'store', 'os': 'android', 'store_name': 'google-play', - 'url': store_url('google-play', 'com.fsck.k9') + 'url': store_url('google-play', 'net.thunderbird.android') }] }, { From 763b555e83e424ad68272ef57297c8dac8d711d7 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 9 Jan 2025 19:49:02 -0800 Subject: [PATCH 23/49] miniflux: Add management of postgresql daemon in a shared manner - This allows miniflux to disabled postgresql if it is not needed by any other app and enable postgresql if it is disabled and miniflux is being enabled. Tests: - When disabling miniflux and it is the last app using postgresql, it will be disabled too. - When disabling miniflux and it is not the last app using postgresql, it will not be disabled too. - When enabling miniflux if postgresql is disabled, it will be enabled too. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/miniflux/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plinth/modules/miniflux/__init__.py b/plinth/modules/miniflux/__init__.py index 223cc1d72..ab1461d53 100644 --- a/plinth/modules/miniflux/__init__.py +++ b/plinth/modules/miniflux/__init__.py @@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _ from plinth import app as app_module from plinth import frontpage, menu from plinth.config import DropinConfigs -from plinth.daemon import Daemon +from plinth.daemon import Daemon, SharedDaemon from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall @@ -74,6 +74,10 @@ class MinifluxApp(app_module.App): urls=['https://{host}/miniflux/']) self.add(webserver) + daemon = SharedDaemon('shared-daemon-miniflus-postgresql', + 'postgresql') + self.add(daemon) + daemon = Daemon('daemon-miniflux', 'miniflux', listen_ports=[(8788, 'tcp4'), (8788, 'tcp6')]) self.add(daemon) From da90ba721e626511f4bd9c45188b71563bc5a11b Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 9 Jan 2025 19:56:35 -0800 Subject: [PATCH 24/49] ttrss: Add management of postgresql daemon in a shared manner - This allows ttrss to disabled postgresql if it is not needed by any other app and enable postgresql if it is disabled and ttrss is being enabled. Tests: - When disabling ttrss and it is the last app using postgresql, it will be disabled too. - When disabling ttrss and it is not the last app using postgresql, it will not be disabled too. - When enabling ttrss if postgresql is disabled, it will be enabled too. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/ttrss/__init__.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plinth/modules/ttrss/__init__.py b/plinth/modules/ttrss/__init__.py index a5900e9cf..35850c8cd 100644 --- a/plinth/modules/ttrss/__init__.py +++ b/plinth/modules/ttrss/__init__.py @@ -7,7 +7,7 @@ from django.utils.translation import gettext_lazy as _ from plinth import app as app_module from plinth import cfg, frontpage, menu from plinth.config import DropinConfigs -from plinth.daemon import Daemon +from plinth.daemon import Daemon, SharedDaemon from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall @@ -85,8 +85,11 @@ class TTRSSApp(app_module.App): last_updated_version=5) self.add(webserver) - daemon = Daemon('daemon-ttrss', 'tt-rss') - self.add(daemon) + daemon1 = SharedDaemon('shared-daemon-ttrss-postgresql', 'postgresql') + self.add(daemon1) + + daemon2 = Daemon('daemon-ttrss', 'tt-rss') + self.add(daemon2) users_and_groups = UsersAndGroups('users-and-groups-ttrss', groups=groups) @@ -98,6 +101,7 @@ class TTRSSApp(app_module.App): def enable(self): """Enable components and API access.""" + super().enable() privileged.enable_api_access() # Try to set the domain to one of the available TLS domains @@ -107,8 +111,6 @@ class TTRSSApp(app_module.App): domain = next(names.get_available_tls_domains(), None) privileged.set_domain(domain) - super().enable() - def setup(self, old_version): """Install and configure the app.""" privileged.pre_setup() From 2beb02b496ba4b653a0d7184dd79f094615be3e1 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 9 Jan 2025 23:06:26 -0800 Subject: [PATCH 25/49] wordpress: Order daemon enable/disable correctly Tests: - Enabling/disabling app results in daemons enabling/disabling in correct order. MySQL first and timer next when enabling. Reverse when disabling. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/wordpress/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plinth/modules/wordpress/__init__.py b/plinth/modules/wordpress/__init__.py index c416abc70..481187e53 100644 --- a/plinth/modules/wordpress/__init__.py +++ b/plinth/modules/wordpress/__init__.py @@ -103,11 +103,11 @@ class WordPressApp(app_module.App): urls=['https://{host}/wordpress/']) self.add(webserver) - daemon = Daemon('daemon-wordpress', 'wordpress-freedombox.timer') - self.add(daemon) + daemon1 = SharedDaemon('shared-daemon-wordpress-mysql', 'mysql') + self.add(daemon1) - daemon = SharedDaemon('shared-daemon-wordpress-mysql', 'mysql') - self.add(daemon) + daemon2 = Daemon('daemon-wordpress', 'wordpress-freedombox.timer') + self.add(daemon2) backup_restore = WordPressBackupRestore('backup-restore-wordpress', **manifest.backup) From b99ead7aa6359675c858f15c7d44d1a54cbd013d Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 9 Jan 2025 21:50:13 -0800 Subject: [PATCH 26/49] db: Add more utilities for managing PostgreSQL databases - Add methods for creating/dropping user/database. Tests: - ttrss and miniflux functional tests work which check for backup/restore. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/{db.py => db/__init__.py} | 54 +----------- plinth/db/postgres.py | 117 ++++++++++++++++++++++++++ plinth/modules/miniflux/privileged.py | 9 +- plinth/modules/ttrss/privileged.py | 9 +- 4 files changed, 128 insertions(+), 61 deletions(-) rename plinth/{db.py => db/__init__.py} (62%) create mode 100644 plinth/db/postgres.py diff --git a/plinth/db.py b/plinth/db/__init__.py similarity index 62% rename from plinth/db.py rename to plinth/db/__init__.py index 42654d75c..28fdadcb2 100644 --- a/plinth/db.py +++ b/plinth/db/__init__.py @@ -1,10 +1,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -""" -Common utilities to help with handling a database. -""" +"""Common utilities to help with handling a database.""" -import pathlib -import subprocess import threading from typing import ClassVar @@ -85,51 +81,3 @@ class DBLock: # most of the significant cases where we have seen database lock issues. lock = DBLock() - - -# -# PostgreSQL utilites -# -def _run_as_postgres(command, stdin=None, stdout=None): - """Run a command as postgres user.""" - command = ['sudo', '--user', 'postgres'] + command - return subprocess.run(command, stdin=stdin, stdout=stdout, check=True) - - -def postgres_dump_database(backup_file: str, database_name: str, - database_user: str): - """Dump PostgreSQL database to a file. - - Overwrites file if it exists. Uses pg_dump utility from postgres package - (needs to be installed). - """ - backup_path = pathlib.Path(backup_file) - backup_path.parent.mkdir(parents=True, exist_ok=True) - with open(backup_path, 'w', encoding='utf-8') as file_handle: - process = _run_as_postgres(['pg_dumpall', '--roles-only'], - stdout=subprocess.PIPE) - file_handle.write(f'DROP ROLE IF EXISTS {database_user};\n') - for line in process.stdout.decode().splitlines(): - if database_user in line: - file_handle.write(line + '\n') - - with open(backup_path, 'a', encoding='utf-8') as file_handle: - _run_as_postgres( - ['pg_dump', '--create', '--clean', '--if-exists', database_name], - stdout=file_handle) - - -def postgres_restore_database(backup_file: str, database_name): - """Restore PostgreSQL database from a file. - - Drops database and recreates it. Uses pg_dump utility from postgres package - (needs to be installed). - """ - # This is needed for old backups only. New backups include 'DROP DATABASE - # IF EXISTS' and 'CREATE DATABASE' statements. - _run_as_postgres(['dropdb', database_name]) - _run_as_postgres(['createdb', database_name]) - - with open(backup_file, 'r', encoding='utf-8') as file_handle: - _run_as_postgres(['psql', '--dbname', database_name], - stdin=file_handle) diff --git a/plinth/db/postgres.py b/plinth/db/postgres.py new file mode 100644 index 000000000..1170c4608 --- /dev/null +++ b/plinth/db/postgres.py @@ -0,0 +1,117 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Utilities to help with PostgreSQL databases. + +Uses utilities from 'postgres' package such as 'psql' and 'pg_dump'. +""" + +import os +import pathlib +import subprocess + +from plinth import action_utils + + +def _run_as(command, **kwargs): + """Run a command as 'postgres' user.""" + command = ['sudo', '--user', 'postgres'] + command + return subprocess.run(command, check=True, **kwargs) + + +def run_query(query): + """Run a database query as 'postgres' user. + + Does not ensure that database server is running. + """ + env = os.environ.copy() + env['ON_ERROR_EXIT'] = '1' + return _run_as(['psql', '--echo-errors'], env=env, + input=query.encode('utf-8')) + + +def _create_user(database_user: str, database_password: str): + """Create a new user account with given credentials. + + Ignore errors if user already exists. Set password on the account either + way. Passwords must be alphanumeric. + """ + query = f''' +DO $$ +BEGIN + CREATE ROLE {database_user} WITH + PASSWORD '{database_password}' + NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION + NOBYPASSRLS; +EXCEPTION WHEN duplicate_object THEN + ALTER ROLE {database_user} WITH + PASSWORD '{database_password}'; +END +$$;''' + run_query(query) + + +def _drop_user(database_user: str): + """Remove a user account with given username.""" + run_query(f'DROP ROLE {database_user};') + + +def create_database(database_name: str, database_user: str, + database_password: str): + """Create a new database and a user account to access it. + + Database server is temporarily started if it is not running. + """ + query = f''' +CREATE EXTENSION IF NOT EXISTS dblink; +DO $$ +BEGIN + PERFORM dblink_exec('', + 'CREATE DATABASE {database_name} WITH OWNER {database_user}'); +EXCEPTION WHEN duplicate_database THEN + ALTER DATABASE {database_name} + OWNER TO {database_user}; +END +$$;''' + with action_utils.service_ensure_running('postgresql'): + _create_user(database_user, database_password) + run_query(query) + + +def drop_database(database_name: str, database_user: str): + """Delete the database and the user account owning it. + + Database server is temporarily started if it is not running. + """ + query = f'DROP DATABASE {database_name};' + with action_utils.service_ensure_running('postgresql'): + run_query(query) + _drop_user(database_user) + + +def dump_database(backup_file: str | pathlib.Path, database_name: str): + """Dump PostgreSQL database to a file. + + Database server is temporarily started if it is not running. Overwrite + file if it exists. + """ + backup_path = pathlib.Path(backup_file) + backup_path.parent.mkdir(parents=True, exist_ok=True) + with action_utils.service_ensure_running('postgresql'): + with open(backup_path, 'w', encoding='utf-8') as file_handle: + _run_as([ + 'pg_dump', '--create', '--clean', '--if-exists', database_name + ], stdout=file_handle) + + +def restore_database(backup_file: str | pathlib.Path, database_name: str, + database_user: str, database_password: str): + """Restore database from a file. + + Database server is temporarily started if it is not running. User account + is removed and recreated if it already exists. Drop database and recreate + if it already exists. + """ + with action_utils.service_ensure_running('postgresql'): + drop_database(database_name, database_user) + create_database(database_name, database_user, database_password) + with open(backup_file, 'r', encoding='utf-8') as file_handle: + _run_as(['psql', '--dbname', database_name], stdin=file_handle) diff --git a/plinth/modules/miniflux/privileged.py b/plinth/modules/miniflux/privileged.py index 09ad35cab..1018e53f4 100644 --- a/plinth/modules/miniflux/privileged.py +++ b/plinth/modules/miniflux/privileged.py @@ -10,8 +10,9 @@ from urllib.parse import urlparse import pexpect -from plinth import action_utils, db +from plinth import action_utils from plinth.actions import privileged, secret_str +from plinth.db import postgres from plinth.utils import is_non_empty_file STATIC_SETTINGS = { @@ -142,12 +143,12 @@ def _get_database_config(): def dump_database(): """Dump database to file.""" config = _get_database_config() - db.postgres_dump_database(DB_BACKUP_FILE, config['database'], - config['user']) + postgres.dump_database(DB_BACKUP_FILE, config['database']) @privileged def restore_database(): """Restore database from file.""" config = _get_database_config() - db.postgres_restore_database(DB_BACKUP_FILE, config['database']) + postgres.restore_database(DB_BACKUP_FILE, config['database'], + config['user'], config['password']) diff --git a/plinth/modules/ttrss/privileged.py b/plinth/modules/ttrss/privileged.py index d184327e2..42434fd3f 100644 --- a/plinth/modules/ttrss/privileged.py +++ b/plinth/modules/ttrss/privileged.py @@ -3,8 +3,9 @@ import augeas -from plinth import action_utils, db +from plinth import action_utils from plinth.actions import privileged +from plinth.db import postgres CONFIG_FILE = '/etc/tt-rss/config.php' DEFAULT_FILE = '/etc/default/tt-rss' @@ -121,15 +122,15 @@ def enable_api_access(): def dump_database(): """Dump database to file.""" config = _get_database_config() - db.postgres_dump_database(DB_BACKUP_FILE, config['database'], - config['user']) + postgres.dump_database(DB_BACKUP_FILE, config['database']) @privileged def restore_database(): """Restore database from file.""" config = _get_database_config() - db.postgres_restore_database(DB_BACKUP_FILE, config['database']) + postgres.restore_database(DB_BACKUP_FILE, config['database'], + config['user'], config['password']) def load_augeas(): From 9aa32037336c8d8a6583207e9cc2af52337205e0 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 9 Jan 2025 22:48:29 -0800 Subject: [PATCH 27/49] ttrss: Fix issue with installing after an uninstalling Tests: - Without the patch, uninstall and reinstall will fail. With patch it passes. - Rerunning setup does not destroy the contents of the database. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/ttrss/__init__.py | 2 +- plinth/modules/ttrss/privileged.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/plinth/modules/ttrss/__init__.py b/plinth/modules/ttrss/__init__.py index 35850c8cd..ad5a9b13e 100644 --- a/plinth/modules/ttrss/__init__.py +++ b/plinth/modules/ttrss/__init__.py @@ -38,7 +38,7 @@ class TTRSSApp(app_module.App): app_id = 'ttrss' - _version = 6 + _version = 7 def __init__(self) -> None: """Create components for the app.""" diff --git a/plinth/modules/ttrss/privileged.py b/plinth/modules/ttrss/privileged.py index 42434fd3f..4c5d60c12 100644 --- a/plinth/modules/ttrss/privileged.py +++ b/plinth/modules/ttrss/privileged.py @@ -77,6 +77,12 @@ def setup(): aug.save() + config = _get_database_config() + # dbconfig may not always setup the database and user account correctly. + # Following, operation to create database/user is an idempotent operation. + postgres.create_database(config['database'], config['user'], + config['password']) + if action_utils.service_is_enabled('tt-rss'): action_utils.service_restart('tt-rss') From e8f97830572e031f1a1ac280dfb49c28b8077223 Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Fri, 10 Jan 2025 14:50:30 -0800 Subject: [PATCH 28/49] nextcloud: Drop some dead code It does not seem to be used anywhere now. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/nextcloud/__init__.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/plinth/modules/nextcloud/__init__.py b/plinth/modules/nextcloud/__init__.py index 97d4a4bad..7acaa68fd 100644 --- a/plinth/modules/nextcloud/__init__.py +++ b/plinth/modules/nextcloud/__init__.py @@ -21,15 +21,6 @@ from plinth.utils import format_lazy from . import manifest, privileged -_alert = ''' - -''' _description = [ _('Nextcloud is a self-hosted productivity platform which provides ' 'private and secure functions for file sharing, collaborative work, ' From 74e908ea8236501e6801154d425701cd0b152a2b Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Fri, 10 Jan 2025 14:07:43 -0800 Subject: [PATCH 29/49] apache: Enable expires module by default - Can be used to set the 'Expires:' header to cache static files for a long time. Tests: - Without the patch 'a2query -m expires' shows that the module is not installed. Applying the patches and restarting services shows that Apache app's setup is run and 'a2query -m expires' shows that module is enabled. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/apache/__init__.py | 2 +- plinth/modules/apache/privileged.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/plinth/modules/apache/__init__.py b/plinth/modules/apache/__init__.py index 14bde4e3a..3e2ccd7d2 100644 --- a/plinth/modules/apache/__init__.py +++ b/plinth/modules/apache/__init__.py @@ -22,7 +22,7 @@ class ApacheApp(app_module.App): app_id = 'apache' - _version = 13 + _version = 14 def __init__(self) -> None: """Create components for the app.""" diff --git a/plinth/modules/apache/privileged.py b/plinth/modules/apache/privileged.py index b3e07b761..2612c1ee8 100644 --- a/plinth/modules/apache/privileged.py +++ b/plinth/modules/apache/privileged.py @@ -88,6 +88,7 @@ def setup(old_version: int): webserver.enable('proxy_html', kind='module') webserver.enable('rewrite', kind='module') webserver.enable('macro', kind='module') + webserver.enable('expires', kind='module') # Disable logging into files, use FreedomBox configured systemd logging webserver.disable('other-vhosts-access-log', kind='config') From 6887c960fea21b8e597f324dd7fc046109f45928 Mon Sep 17 00:00:00 2001 From: Benedek Nagy Date: Fri, 27 Dec 2024 21:49:35 +0100 Subject: [PATCH 30/49] sogo: Add a new app for SOGo groupware MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SOGo is an open source webmail client and groupware available in Debian. Make a new FreedomBox app for it to be used with the local Postfix/Dovecot email server. SOGo requires a database to store events/tasks as well as user settings. Memcached is also required for caching. Users log in with their username (as opposed to username + domain on Roundcube). The host header seen from the first login will be associated with the user profile. So, if a user logs into SOGo from freedombox.local and later configures the email server to use example.com, they will manually have to edit their account(s) to show the updated domain. Authentication is done via openldap. It is possible to authenticate with apache, however it is limited to http basic auth, so mod_auth_tkt cannot be used. See: https://github.com/Alinto/sogo/blob/b40d777a86104d08dbd8168b8e12c198a3d4321a/SoObjects/SOGo/SOGoProxyAuthenticator.m#L137 Configuring http basic auth in my opinion wouldn't add much to the user experience. It would actually take away the usage of SOGO's built in TOTP feature. SOGo only accepts configurations from /etc/sogo/sogo.conf, other configs from sogo.d don't get recognised. Use the sogo icon from upstream source. Update sogo.png and sogo.svg to be the same image (but resized) that is provided in the upstream source. The previous image was download from Wikimedia Commons. Update smtp settings so that messages can be sent Test result for mail deliverability sent with SOGo: https://www.mail-tester.com/test-pdf2yzy6n The result shows that the message is not DKIM signed. This seems to be an issue not specific to SOGo. Mails sent from Thunderbird don't get signed either. Tests: - Install app and log in with a FreedomBox user. Create a new event titled "Lunch with 🍕 and fries". Confirm the pizza character displays properly. - Backup the app and uninstall it. - Restore from the backup, log in and confirm the event gets restored. To-do: - test ActiveSync - create a fail2ban jail - include the icons in the copyright file - test sending email in a production setup - test sieve filters - write tests https://salsa.debian.org/freedombox-team/freedombox/-/issues/56 [Sunil] - App: - Update icons to be uniform size as all other apps and copyright information. - Since SOGo is not configured to trust the authentication from Apache, it does not require FirewallLocalProtection. Remove it. - Expand app description. Talk about Email Server app. - Update to match recent tags related changes. - Make memcached a shared daemon as other processes might use it. - Added shared daemon for PostgreSQL. - Don't start services when rerunning setup if the app is currently disabled. - Don't restart memcached during a restore operation. - Security: - Add system security restrictions to the daemon. - Don't use fail2ban jail. SOGo has a mechanism to lock users for a few minutes. Use that instead. - Apache: - Make /.well-known URLs work by moving their definitions to global section. - Remove old (<2.4) Apache authorization keywords. - Simplify, indentation, new line at EOF. - Manifest: - Add more tags. - Add SOGo connector, DAVx5, and GNOME Calendar to list of clients. - Add 'sogo' to list of service to bring down during backup/restore. - Privileged: - Switch from MySQL to PostgreSQL as it is recommended by SOGo. - Use existing utility to generate database password. - Use plget and plmerge utilities from gnustep-common package to parse/edit the configuration instead of augeas which don't have a dedicated lens. - Don't reset the domain when rerunning setup. - Ensure that the configuration file has proper ownership and permissions even when it did not exist previously. - Add typing information for most methods. - Remove configuration file after uninstall. - Configuration: - Define database URLs for all seven database tables. - Set calendar default roles as suggested in the installation guide. - Refresh view automatically every minute to check for new mail. - Use the mechanism to lock account after failed login attempts. - Add folder name for Junk folder too explicitly. - Tests: Add basic functional tests. Tests: - Functional tests work. - Rerunning setup does not change the domain back to the primary domain of the email server. - Login works. Sending mail and reading mail works. Creating calendar events and contact works. - Changing the domain sets the domain value properly in the configuration file. Configured domain is shown properly on the form. - Backup and restore work as expected. - When configuration file is removed and setup is re-run, then the file is created with proper ownership and permissions. - 'systemd-analyze security sogo.service' shows a good score. Signed-off-by: Benedek Nagy Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- debian/copyright | 6 + plinth/modules/sogo/__init__.py | 121 +++++++++++++ .../system/sogo.service.d/freedombox.conf | 28 +++ .../conf-available/sogo-freedombox.conf | 36 ++++ .../usr/share/freedombox/modules-enabled/sogo | 1 + plinth/modules/sogo/forms.py | 23 +++ plinth/modules/sogo/manifest.py | 77 +++++++++ plinth/modules/sogo/privileged.py | 161 ++++++++++++++++++ plinth/modules/sogo/static/icons/sogo.png | Bin 0 -> 11932 bytes plinth/modules/sogo/static/icons/sogo.svg | 46 +++++ plinth/modules/sogo/tests/__init__.py | 0 plinth/modules/sogo/tests/test_functional.py | 42 +++++ plinth/modules/sogo/urls.py | 10 ++ plinth/modules/sogo/views.py | 34 ++++ plinth/tests/functional/__init__.py | 1 + 15 files changed, 586 insertions(+) create mode 100644 plinth/modules/sogo/__init__.py create mode 100644 plinth/modules/sogo/data/usr/lib/systemd/system/sogo.service.d/freedombox.conf create mode 100644 plinth/modules/sogo/data/usr/share/freedombox/etc/apache2/conf-available/sogo-freedombox.conf create mode 100644 plinth/modules/sogo/data/usr/share/freedombox/modules-enabled/sogo create mode 100644 plinth/modules/sogo/forms.py create mode 100644 plinth/modules/sogo/manifest.py create mode 100644 plinth/modules/sogo/privileged.py create mode 100644 plinth/modules/sogo/static/icons/sogo.png create mode 100644 plinth/modules/sogo/static/icons/sogo.svg create mode 100644 plinth/modules/sogo/tests/__init__.py create mode 100644 plinth/modules/sogo/tests/test_functional.py create mode 100644 plinth/modules/sogo/urls.py create mode 100644 plinth/modules/sogo/views.py diff --git a/debian/copyright b/debian/copyright index 52c0f3fce..06eea8862 100644 --- a/debian/copyright +++ b/debian/copyright @@ -275,6 +275,12 @@ Copyright: Interface (https://www.shareicon.net/author/interface) Comment: https://www.shareicon.net/universal-interface-interface-sharing-share-697502 License: CC-BY-3.0 +Files: plinth/modules/sogo/static/icons/sogo.png + plinth/modules/sogo/static/icons/sogo.svg +Copyright: 2024 Inverse inc./Alinto +Comment: https://github.com/Alinto/sogo/blob/master/COPYING.GPL +License: GPL-2 + Files: plinth/modules/syncthing/static/icons/syncthing.png Copyright: 2015 Jack Palevich 2014 The Syncthing Authors diff --git a/plinth/modules/sogo/__init__.py b/plinth/modules/sogo/__init__.py new file mode 100644 index 000000000..5ac09821f --- /dev/null +++ b/plinth/modules/sogo/__init__.py @@ -0,0 +1,121 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""FreedomBox app to configure SOGo.""" + +from django.urls import reverse_lazy +from django.utils.translation import gettext_lazy as _ + +from plinth import app as app_module +from plinth import cfg, frontpage, menu +from plinth.config import DropinConfigs +from plinth.daemon import Daemon, SharedDaemon +from plinth.modules.apache.components import Webserver +from plinth.modules.backups.components import BackupRestore +from plinth.modules.firewall.components import Firewall +from plinth.package import Packages +from plinth.privileged import service as service_privileged +from plinth.utils import format_lazy + +from . import manifest, privileged + +_description = [ + _('SOGo is a groupware server that provides a rich web interface for ' + 'email, calendar, tasks, and contacts. Calendar, tasks, and contacts ' + 'can also be accessed with various mobile and desktop applications ' + 'using the CalDAV and CardDAV standards.'), + format_lazy( + _('Webmail works with the Postfix/Dovecot ' + 'email server app to retrieve, manage, and send email.'), + email_url=reverse_lazy('email:index')), + format_lazy( + _('All users on {box_name} can login into and use SOGo. Mails ' + 'delivered to their mailboxes by the email server app can be read ' + 'and new mail can be sent out.'), box_name=_(cfg.box_name)), +] + + +class SOGoApp(app_module.App): + """FreedomBox app for SOGo.""" + + app_id = 'sogo' + + _version = 1 + + def __init__(self) -> None: + """Create components for the app.""" + super().__init__() + + info = app_module.Info(app_id=self.app_id, version=self._version, + depends=['email'], name=_('SOGo'), + icon_filename='sogo', description=_description, + manual_page='SOGo', clients=manifest.clients, + tags=manifest.tags) + self.add(info) + + menu_item = menu.Menu('menu-sogo', info.name, info.icon_filename, + info.tags, 'sogo:index', parent_url_name='apps') + self.add(menu_item) + + shortcut = frontpage.Shortcut('shortcut-sogo', info.name, + icon=info.icon_filename, url='/SOGo/', + clients=info.clients, tags=info.tags) + self.add(shortcut) + + packages = Packages('packages-sogo', + ['sogo', 'postgresql', 'memcached']) + self.add(packages) + + dropin_configs = DropinConfigs('dropin-configs-sogo', [ + '/etc/apache2/conf-available/sogo-freedombox.conf', + ]) + self.add(dropin_configs) + + firewall = Firewall('firewall-sogo', info.name, + ports=['http', 'https'], is_external=True) + self.add(firewall) + + webserver = Webserver('webserver-sogo', 'sogo-freedombox', + urls=['https://{host}/SOGo/']) + self.add(webserver) + + daemon1 = SharedDaemon('shared-daemon-sogo-memcached', 'memcached', + listen_ports=[(11211, 'tcp4')]) + self.add(daemon1) + + daemon2 = SharedDaemon('shared-daemon-sogo-postgresql', 'postgresql') + self.add(daemon2) + + daemon3 = Daemon('daemon-sogo', 'sogo', listen_ports=[(20000, 'tcp4')]) + self.add(daemon3) + + backup_restore = SOGoBackupRestore('backup-restore-sogo', + **manifest.backup) + self.add(backup_restore) + + def setup(self, old_version): + """Install and configure the app.""" + super().setup(old_version) + privileged.setup() + service_privileged.try_restart('sogo') + service_privileged.try_restart('memcached') + + if not old_version: + self.enable() + + def uninstall(self): + """De-configure and uninstall the app.""" + super().uninstall() + privileged.uninstall() + + +class SOGoBackupRestore(BackupRestore): + """Component to backup/restore SOGo.""" + + def backup_pre(self, packet): + """Save database contents.""" + super().backup_pre(packet) + privileged.dump_database() + + def restore_post(self, packet): + """Restore database contents.""" + super().restore_post(packet) + privileged.restore_database() diff --git a/plinth/modules/sogo/data/usr/lib/systemd/system/sogo.service.d/freedombox.conf b/plinth/modules/sogo/data/usr/lib/systemd/system/sogo.service.d/freedombox.conf new file mode 100644 index 000000000..cde0401c1 --- /dev/null +++ b/plinth/modules/sogo/data/usr/lib/systemd/system/sogo.service.d/freedombox.conf @@ -0,0 +1,28 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later + +[Service] +CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SETUID CAP_SETGID CAP_SETPCAP CAP_CHOWN CAP_FSETID CAP_SETFCAP CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_IPC_OWNER CAP_NET_ADMIN CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE CAP_KILL CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_LINUX_IMMUTABLE CAP_IPC_LOCK CAP_SYS_CHROOT CAP_BLOCK_SUSPEND CAP_LEASE CAP_SYS_PACCT CAP_SYS_TTY_CONFIG CAP_SYS_BOOT CAP_MAC_ADMIN CAP_MAC_OVERRIDE CAP_SYS_NICE CAP_SYS_RESOURCE CAP_BPF +DevicePolicy=closed +LockPersonality=yes +NoNewPrivileges=yes +PrivateDevices=yes +PrivateMounts=yes +PrivateTmp=yes +ProtectControlGroups=yes +ProtectClock=yes +ProtectHome=yes +ProtectHostname=yes +ProtectKernelLogs=yes +ProtectKernelModules=yes +ProtectKernelTunables=yes +ProtectSystem=strict +ReadWritePaths=/var/spool/sogo /var/log/sogo +RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK +RestrictNamespaces=yes +RestrictSUIDSGID=yes +RestrictRealtime=yes +SystemCallArchitectures=native +SystemCallFilter=@system-service +SystemCallFilter=~@resources +SystemCallFilter=~@privileged +SystemCallErrorNumber=EPERM diff --git a/plinth/modules/sogo/data/usr/share/freedombox/etc/apache2/conf-available/sogo-freedombox.conf b/plinth/modules/sogo/data/usr/share/freedombox/etc/apache2/conf-available/sogo-freedombox.conf new file mode 100644 index 000000000..421bf8a91 --- /dev/null +++ b/plinth/modules/sogo/data/usr/share/freedombox/etc/apache2/conf-available/sogo-freedombox.conf @@ -0,0 +1,36 @@ +## +## On all sites, provide SOGo on a default path: /SOGo +## https://www.sogo.nu/support/faq/how-to-configure-apache-as-frontend.html +## + +Alias /SOGo.woa/WebServerResources/ /usr/lib/GNUstep/SOGo/WebServerResources/ +Alias /SOGo/WebServerResources/ /usr/lib/GNUstep/SOGo/WebServerResources/ + +Redirect 301 /.well-known/caldav /SOGo/dav +Redirect 301 /.well-known/carddav /SOGo/dav + + + ProxyPass http://127.0.0.1:20000/SOGo retry=0 nocanon + ProxyPreserveHost On + SetEnv proxy-nokeepalive 1 + + + RequestHeader set "x-webobjects-server-port" "443" + SetEnvIf Host (.*) HTTP_HOST=$1 + RequestHeader set "x-webobjects-server-name" "%{HTTP_HOST}e" env=HTTP_HOST + RequestHeader set "x-webobjects-server-url" "https://%{HTTP_HOST}e" env=HTTP_HOST + + + AddDefaultCharset UTF-8 + + + + Require all granted + # Explicitly allow caching of static content to avoid browser specific + # behavior. A resource's URL MUST change in order to have the client load + # the new version. + + ExpiresActive On + ExpiresDefault "access plus 1 year" + + diff --git a/plinth/modules/sogo/data/usr/share/freedombox/modules-enabled/sogo b/plinth/modules/sogo/data/usr/share/freedombox/modules-enabled/sogo new file mode 100644 index 000000000..093376882 --- /dev/null +++ b/plinth/modules/sogo/data/usr/share/freedombox/modules-enabled/sogo @@ -0,0 +1 @@ +plinth.modules.sogo diff --git a/plinth/modules/sogo/forms.py b/plinth/modules/sogo/forms.py new file mode 100644 index 000000000..dadfb4d75 --- /dev/null +++ b/plinth/modules/sogo/forms.py @@ -0,0 +1,23 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Forms for the SOGo app.""" + +from django import forms +from django.utils.translation import gettext_lazy as _ + +from plinth.modules.names.components import DomainName + + +def _get_domain_choices(): + """Double domain entries for inclusion in the choice field.""" + return ((domain.name, domain.name) for domain in DomainName.list()) + + +class DomainForm(forms.Form): + domain = forms.ChoiceField( + choices=_get_domain_choices, + label=_('Domain'), + help_text=_( + 'Mails are received for all domains configured in the system. ' + 'Among these, select the most important one.'), + required=True, + ) diff --git a/plinth/modules/sogo/manifest.py b/plinth/modules/sogo/manifest.py new file mode 100644 index 000000000..ed0cb11d1 --- /dev/null +++ b/plinth/modules/sogo/manifest.py @@ -0,0 +1,77 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later + +from django.utils.translation import gettext_lazy as _ + +from plinth.clients import store_url + +from . import privileged + +clients = [ + { + 'name': _('SOGo'), + 'platforms': [{ + 'type': 'web', + 'url': '/SOGo/' + }] + }, + { + 'name': + _('Thunderbird + SOGo connector'), + 'platforms': [{ + 'type': 'download', + 'os': 'gnu-linux', + 'url': 'https://www.sogo.nu/download.html#/frontends' + }, { + 'type': 'download', + 'os': 'macos', + 'url': 'https://www.sogo.nu/download.html#/frontends' + }, { + 'type': 'download', + 'os': 'windows', + 'url': 'https://www.sogo.nu/download.html#/frontends' + }] + }, + { + 'name': + _('DAVx5'), + 'platforms': [{ + 'type': 'store', + 'os': 'android', + 'store_name': 'f-droid', + 'url': store_url('f-droid', 'at.bitfire.davdroid'), + }, { + 'type': 'store', + 'os': 'android', + 'store_name': 'google-play', + 'url': store_url('google-play', 'at.bitfire.davdroid'), + }] + }, + { + 'name': + _('GNOME Calendar'), + 'platforms': [{ + 'type': 'package', + 'format': 'deb', + 'name': 'gnome-calendar' + }] + }, +] + +backup = { + 'data': { + 'files': [str(privileged.DB_BACKUP_FILE)], + }, + 'services': ['sogo'], + 'secrets': { + 'directories': [str(privileged.CONFIG_FILE)] + }, +} + +tags = [ + _('Webmail'), + _('Groupware'), + _('Calender'), + _('Address book'), + _('CalDAV'), + _('CardDAV') +] diff --git a/plinth/modules/sogo/privileged.py b/plinth/modules/sogo/privileged.py new file mode 100644 index 000000000..0de0f8076 --- /dev/null +++ b/plinth/modules/sogo/privileged.py @@ -0,0 +1,161 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Configure SOGo.""" + +import pathlib +import re +import shutil +import subprocess +import tempfile + +from plinth import utils +from plinth.actions import privileged +from plinth.db import postgres +from plinth.modules.email.privileged.domain import \ + get_domains as get_email_domains + +DB_HOST = 'localhost' +DB_NAME = 'sogo_fbx' +DB_USER = 'sogo_fbx' +SERVICE_NAME = 'sogo' + +DB_BACKUP_FILE = pathlib.Path('/var/lib/plinth/backups-data/sogo-database.sql') +CONFIG_FILE = pathlib.Path('/etc/sogo/sogo.conf') + + +@privileged +def setup() -> None: + """Setup SOGo database and configuration.""" + database_password = utils.generate_password(16) + postgres.create_database(DB_NAME, DB_USER, database_password) + _create_config(database_password) + + +def _create_config(db_password: str): + """Configure /etc/sogo/sogo.conf""" + try: + domain = _get_config_value('SOGoMailDomain') + if not domain: + # Try to get the domain configured for the email app + domain = get_email_domains()['primary_domain'] + except FileNotFoundError: + domain = 'localhost' + + connection = f'postgresql://{DB_USER}:{db_password}@{DB_HOST}/{DB_NAME}' + + content = f''' +{{ + /* General */ + SOGoMailDomain = "{domain}"; + SOGoLanguage = "English"; + SOGoTimeZone = "UTC"; + SOGoCalendarDefaultRoles = ("PublicViewer", "ConfidentialDAndTViewer"); + SOGoAppointmentSendEMailNotifications = YES; + SOGoRefreshViewCheck = "every_minute"; + + /* Authentication */ + SOGoMaximumFailedLoginCount = "10"; + SOGoMaximumFailedLoginInterval = "300"; + SOGoFailedLoginBlockInterval = "300"; + + /* Database */ + SOGoProfileURL = "{connection}/sogo_user_profile"; + OCSFolderInfoURL = "{connection}/sogo_folder_info"; + OCSSessionsFolderURL = "{connection}/sogo_sessions_folder"; + OCSEMailAlarmsFolderURL = "{connection}/sogo_alarms_folder"; + OCSStoreURL = "{connection}/sogo_store"; + OCSAclURL = "{connection}/sogo_acl"; + OCSCacheFolderURL = "{connection}/sogo_cache_folder"; + OCSAdminURL = "{connection}/sogo_admin"; + + /* Cache */ + SOGoMemcachedHost = "127.0.0.1"; + + /* SMTP */ + SOGoMailingMechanism = "smtp"; + SOGoSMTPServer = "smtp://127.0.0.1:587/?tls=YES&tlsVerifyMode=allowInsecureLocalhost"; + SOGoSMTPAuthenticationType = "PLAIN"; + + /* IMAP */ + SOGoDraftsFolderName = "Drafts"; + SOGoSentFolderName = "Sent"; + SOGoTrashFolderName = "Trash"; + SOGoJunkFolderName = "Junk"; + SOGoIMAPServer = "imap://127.0.0.1:143/?tls=YES&tlsVerifyMode=allowInsecureLocalhost"; + SOGoSieveServer = "sieve://127.0.0.14190/?tls=YES&tlsVerifyMode=allowInsecureLocalhost"; + + /* LDAP */ + SOGoUserSources = ({{ + type = "ldap"; + CNFieldName = "cn"; + IDFieldName = "uid"; + UIDFieldName = "uid"; + baseDN = "ou=users,dc=thisbox"; + canAuthenticate = YES; + displayName = "Shared Addresses"; + hostname = "ldap://127.0.0.1:389"; + id = "directory"; + isAddressBook = YES; + }}); +}}''' # noqa: E501 + CONFIG_FILE.touch(0o640, exist_ok=True) # In case the file does not exist + CONFIG_FILE.chmod(0o640) # In case the file pre-existed + shutil.chown(CONFIG_FILE, 'root', 'sogo') + CONFIG_FILE.write_text(content, encoding='utf-8') + + +@privileged +def dump_database() -> None: + """Dump database to file.""" + postgres.dump_database(DB_BACKUP_FILE, DB_NAME) + + +@privileged +def restore_database() -> None: + """Restore database from file.""" + password = _read_db_password() + postgres.restore_database(DB_BACKUP_FILE, DB_NAME, DB_USER, password) + + +def _read_db_password() -> str: + """Extract the database password from /etc/sogo/sogo.conf using regex""" + pattern = r'postgresql://[^:]+:([^@]+)@localhost' + match = re.search(pattern, _get_config_value('SOGoProfileURL')) + if not match: + raise ValueError('Could not extract password') + + return match.group(1) + + +@privileged +def get_domain() -> str: + """Get the value of SOGoMailDomain from /etc/sogo/sogo.conf""" + return _get_config_value('SOGoMailDomain') + + +@privileged +def set_domain(domain: str): + """Set the value of SOGoMailDomain in /etc/sogo/sogo.conf""" + _set_config_value('SOGoMailDomain', domain) + + +def _get_config_value(key: str) -> str: + """Return the value of a property from the configuration file.""" + process = subprocess.run(['plget', key], input=CONFIG_FILE.read_bytes(), + stdout=subprocess.PIPE, check=True) + return process.stdout.decode().strip() + + +def _set_config_value(key: str, value: str): + """Set the value of a property in the configuration file.""" + with tempfile.NamedTemporaryFile(delete=False) as temp_file: + temp_file.write(f'{{\n{key} = "{value}";\n}}'.encode('utf-8')) + temp_file.close() + subprocess.run(['plmerge', CONFIG_FILE, temp_file.name], check=True) + pathlib.Path(temp_file.name).unlink() + + +@privileged +def uninstall() -> None: + """Uninstall SOGo: drop database and configuration files.""" + postgres.drop_database(DB_NAME, DB_USER) + CONFIG_FILE.unlink(missing_ok=True) diff --git a/plinth/modules/sogo/static/icons/sogo.png b/plinth/modules/sogo/static/icons/sogo.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe36365f91b8ec682b3fdb4ec2a91c5ce5e3461 GIT binary patch literal 11932 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

8XqAc7HDrD%t z>mp0l@3}u1FHvKjfwN$<=$`41=r_5KZoB%Fn7qxH(=?n#T(5CxX`OYFnW=9Pi%^13 z%XS1^>-bhF5f@m9C7}Y2qVSzdV)onqLiX{pGS`ei6(Rtjq@!jHw3A>7Ky3X`AyZ>^ z=YYY1llE&)-{1MnC=XrW3X*1}-!&I&Rk0%ak2Y8VwzOl5HrJK6aqX9ZeXL>t@R6V% z-Q4reoA`umfVNd2u(6iq?h)M}#4t|pV(-O>GcR$ofmk>yXje3h9sBeqDy!zAIg{1R z-)U?$G8p26JvH~G!*_jOTm%y^ZjZ#CeWn(C=Q-vb7pm^RH-bHHw-9H&t1*?Xazl-S zLkOTgDDK$E6!m=!kCycFKj&wKXh11eF(F?=8}Tg#7HA%Pyk49P1ir1nj`)%-;Q1eE zC(s!-#-~u@{*HzTKqDNBWdsziejA^gA(Ic;EdMb3Nrk|`0XF%6D{!yInI{y5caZ)h zrqn0Ayd0+@vZEQ_UqD1fIX`h&hfb6mpMPa5Tqq7!VJJ~Ks{z^2^!r{pA!N<0Xy1p5AvVKi^=r+E;8J|g1WDQJ*L=_Z-4IO( z4@gFo$)*2BfCI2rqhBoR4pA@N46p*o6HO?)Wb0s{)&z)33)xO7`d7~QGN8h;K8*JK z-H&nm~#|107;E-W_0RRZTsN!ub&av%J&UNem(bAV6uhl$-Wa4{S-Qym)P>=(9 z4POU^?3yD#Sg|3TwRSC_Mu#|G73&%uXp2CTRTFVKl~LjVKAbDmyo;B#-a;%gAB{{3 zBd9eC{^QVD@Wayp`-PkkR5p+2rb^fjR%Vk2?`gmr zNrNrtdE8O59#yQH_p(Qi^34ghw2BkB^eX$a810wF)j~R2Ib2u#bZ|!CJ(<<+D#T6#B z^zNYeH?J|H)+jviPHpGPVDG})Tui;mXB0$v$#t?T!?`n`c8~CJ-`;|P*rUK}qE> + + + + + + + diff --git a/plinth/modules/sogo/tests/__init__.py b/plinth/modules/sogo/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/plinth/modules/sogo/tests/test_functional.py b/plinth/modules/sogo/tests/test_functional.py new file mode 100644 index 000000000..03fdd3436 --- /dev/null +++ b/plinth/modules/sogo/tests/test_functional.py @@ -0,0 +1,42 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Functional, browser based tests for SOGo app.""" + +import time + +import pytest + +from plinth.tests import functional + +pytestmark = [pytest.mark.apps, pytest.mark.sogo] + + +class TestSOGoApp(functional.BaseAppTests): + """Basic tests for the SOGo app.""" + app_name = 'sogo' + has_service = True + disable_after_tests = False + + def test_login(self, session_browser): + """Test that login to SOGo interface works.""" + _login(session_browser) + assert functional.eventually(_is_logged_in, [session_browser]) + + +def _login(browser) -> None: + """Login to SOGo web interface.""" + functional.visit(browser, '/SOGo/') + username = functional.config['DEFAULT']['username'] + password = functional.config['DEFAULT']['password'] + functional.eventually(browser.find_by_id, ['input_1']) + time.sleep(1) # For some reason, waiting does not work + browser.find_by_id('input_1').fill(username) + browser.find_by_id('passwordField').fill(password) + submit = browser.find_by_css( + 'form[name=loginForm] button[type=submit]').first + functional.submit(browser, element=submit) + + +def _is_logged_in(browser) -> bool: + """Return whether SOGo login was successful.""" + logout = browser.find_by_css('a[href="../logoff"]') + return bool(logout) diff --git a/plinth/modules/sogo/urls.py b/plinth/modules/sogo/urls.py new file mode 100644 index 000000000..a5152fe7f --- /dev/null +++ b/plinth/modules/sogo/urls.py @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""URLs for the SOGo module.""" + +from django.urls import re_path + +from . import views + +urlpatterns = [ + re_path(r'^apps/sogo/$', views.SOGoAppView.as_view(), name='index') +] diff --git a/plinth/modules/sogo/views.py b/plinth/modules/sogo/views.py new file mode 100644 index 000000000..34feb45fa --- /dev/null +++ b/plinth/modules/sogo/views.py @@ -0,0 +1,34 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Views for the SOGo app.""" + +from django.contrib import messages +from django.utils.translation import gettext_lazy as _ + +from plinth.privileged import service as service_privileged +from plinth.views import AppView + +from . import forms, privileged + + +class SOGoAppView(AppView): + """Server configuration page.""" + app_id = 'sogo' + form_class = forms.DomainForm + + def get_initial(self): + """Return the initial values to populate in the form.""" + initial = super().get_initial() + initial['domain'] = privileged.get_domain() + return initial + + def form_valid(self, form): + """Update the settings for changed domain values.""" + old_data = form.initial + new_data = form.cleaned_data + if old_data['domain'] != new_data['domain']: + privileged.set_domain(new_data['domain']) + service_privileged.try_restart('sogo') + service_privileged.try_restart('memcached') + messages.success(self.request, _('Configuration updated')) + + return super().form_valid(form) diff --git a/plinth/tests/functional/__init__.py b/plinth/tests/functional/__init__.py index 578d7593a..dc7cec711 100644 --- a/plinth/tests/functional/__init__.py +++ b/plinth/tests/functional/__init__.py @@ -53,6 +53,7 @@ _site_url = { 'syncthing': '/syncthing/', 'rssbridge': '/rss-bridge/', 'ttrss': '/tt-rss/', + 'sogo': '/SOGo/', } _sys_modules = [ From 24a1f3defedf4d22ff86258a55d47bb86de24402 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 27 Jan 2025 20:26:21 -0500 Subject: [PATCH 31/49] locale: Update translation strings Signed-off-by: James Valleroy --- plinth/locale/ar/LC_MESSAGES/django.po | 166 ++++++++++++---- plinth/locale/ar_SA/LC_MESSAGES/django.po | 166 ++++++++++++---- plinth/locale/be/LC_MESSAGES/django.po | 166 ++++++++++++---- plinth/locale/bg/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/bn/LC_MESSAGES/django.po | 166 ++++++++++++---- plinth/locale/cs/LC_MESSAGES/django.po | 200 ++++++++++++++----- plinth/locale/da/LC_MESSAGES/django.po | 183 ++++++++++++++---- plinth/locale/de/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/django.pot | 166 ++++++++++++---- plinth/locale/el/LC_MESSAGES/django.po | 180 ++++++++++++++---- plinth/locale/es/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/fa/LC_MESSAGES/django.po | 170 +++++++++++++---- plinth/locale/fake/LC_MESSAGES/django.po | 174 +++++++++++++---- plinth/locale/fr/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/gl/LC_MESSAGES/django.po | 166 ++++++++++++---- plinth/locale/gu/LC_MESSAGES/django.po | 168 ++++++++++++---- plinth/locale/hi/LC_MESSAGES/django.po | 180 ++++++++++++++---- plinth/locale/hu/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/id/LC_MESSAGES/django.po | 176 +++++++++++++---- plinth/locale/it/LC_MESSAGES/django.po | 179 +++++++++++++---- plinth/locale/ja/LC_MESSAGES/django.po | 166 ++++++++++++---- plinth/locale/kn/LC_MESSAGES/django.po | 166 ++++++++++++---- plinth/locale/lt/LC_MESSAGES/django.po | 175 +++++++++++++---- plinth/locale/lv/LC_MESSAGES/django.po | 175 +++++++++++++---- plinth/locale/nb/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/nl/LC_MESSAGES/django.po | 189 ++++++++++++++---- plinth/locale/pl/LC_MESSAGES/django.po | 183 ++++++++++++++---- plinth/locale/pt/LC_MESSAGES/django.po | 179 +++++++++++++---- plinth/locale/ru/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/si/LC_MESSAGES/django.po | 166 ++++++++++++---- plinth/locale/sl/LC_MESSAGES/django.po | 177 +++++++++++++---- plinth/locale/sq/LC_MESSAGES/django.po | 201 +++++++++++++++----- plinth/locale/sr/LC_MESSAGES/django.po | 177 +++++++++++++---- plinth/locale/sv/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/ta/LC_MESSAGES/django.po | 183 ++++++++++++++---- plinth/locale/te/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/tr/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/uk/LC_MESSAGES/django.po | 185 ++++++++++++++---- plinth/locale/vi/LC_MESSAGES/django.po | 168 ++++++++++++---- plinth/locale/zh_Hans/LC_MESSAGES/django.po | 176 +++++++++++++---- plinth/locale/zh_Hant/LC_MESSAGES/django.po | 177 +++++++++++++---- 41 files changed, 5810 insertions(+), 1489 deletions(-) diff --git a/plinth/locale/ar/LC_MESSAGES/django.po b/plinth/locale/ar/LC_MESSAGES/django.po index 0046ed0fa..d9efc4942 100644 --- a/plinth/locale/ar/LC_MESSAGES/django.po +++ b/plinth/locale/ar/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2023-10-19 06:18+0000\n" "Last-Translator: Shaik \n" "Language-Team: Arabic restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2798,7 +2855,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3257,7 +3314,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4725,7 +4782,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5416,7 +5473,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5425,11 +5482,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5438,7 +5495,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5488,7 +5545,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5785,8 +5842,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -5996,7 +6053,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6007,7 +6064,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6037,11 +6094,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6902,6 +6959,49 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8709,35 +8809,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8757,10 +8857,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/ar_SA/LC_MESSAGES/django.po b/plinth/locale/ar_SA/LC_MESSAGES/django.po index abd731337..337d7ecda 100644 --- a/plinth/locale/ar_SA/LC_MESSAGES/django.po +++ b/plinth/locale/ar_SA/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2020-06-10 15:41+0000\n" "Last-Translator: aiman an \n" "Language-Team: Arabic (Saudi Arabia) restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2811,7 +2868,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3270,7 +3327,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4748,7 +4805,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5439,7 +5496,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5448,11 +5505,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5461,7 +5518,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5511,7 +5568,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5808,8 +5865,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6021,7 +6078,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6032,7 +6089,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6062,11 +6119,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6929,6 +6986,49 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8736,35 +8836,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8784,10 +8884,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/be/LC_MESSAGES/django.po b/plinth/locale/be/LC_MESSAGES/django.po index 86bdc6bc2..dadc5cabc 100644 --- a/plinth/locale/be/LC_MESSAGES/django.po +++ b/plinth/locale/be/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -94,15 +94,15 @@ msgstr "" msgid "Use the language preference set in the browser" msgstr "" -#: menu.py:116 templates/base.html:121 +#: menu.py:116 templates/base.html:120 msgid "Home" msgstr "" -#: menu.py:117 templates/base.html:130 +#: menu.py:117 templates/base.html:129 msgid "Apps" msgstr "" -#: menu.py:119 menu.py:126 templates/base.html:139 +#: menu.py:119 menu.py:126 templates/base.html:138 msgid "System" msgstr "" @@ -1064,8 +1064,9 @@ msgstr "" #: modules/privacy/views.py:55 modules/quassel/views.py:29 #: modules/roundcube/views.py:32 modules/rssbridge/views.py:31 #: modules/shadowsocks/views.py:52 modules/shadowsocksserver/views.py:48 -#: modules/ssh/views.py:62 modules/transmission/views.py:43 -#: modules/ttrss/views.py:31 modules/wordpress/views.py:31 +#: modules/sogo/views.py:32 modules/ssh/views.py:62 +#: modules/transmission/views.py:43 modules/ttrss/views.py:31 +#: modules/wordpress/views.py:31 msgid "Configuration updated" msgstr "" @@ -1804,7 +1805,7 @@ msgstr "" #: modules/dynamicdns/templates/dynamicdns.html:23 #: modules/email/templates/email-dns.html:22 #: modules/letsencrypt/templates/letsencrypt.html:24 -#: modules/mediawiki/forms.py:64 +#: modules/mediawiki/forms.py:64 modules/sogo/forms.py:18 msgid "Domain" msgstr "" @@ -2066,7 +2067,7 @@ msgstr "" msgid "Primary domain" msgstr "" -#: modules/email/forms.py:27 +#: modules/email/forms.py:27 modules/sogo/forms.py:20 msgid "" "Mails are received for all domains configured in the system. Among these, " "select the most important one." @@ -2102,7 +2103,7 @@ msgid "Thunderbird" msgstr "" #: modules/email/manifest.py:37 -msgid "K-9 Mail" +msgid "Thunderbird Mobile" msgstr "" #: modules/email/manifest.py:52 @@ -2762,6 +2763,62 @@ msgstr "" msgid "Edit repository" msgstr "" +#: modules/gnome/__init__.py:18 +msgid "" +"GNOME is a desktop environment that focuses on simplicity and ease of use." +msgstr "" + +#: modules/gnome/__init__.py:21 +#, python-brace-format +msgid "" +"This app turns your {box_name} into a desktop computer if you physically " +"connect a monitor, a keyboard, and a mouse to it. A browser, an office " +"suite, and other basic utilities are available. You may install further " +"graphical applications using the software center provided within." +msgstr "" + +#: modules/gnome/__init__.py:26 +msgid "" +"This app is not suitable for low-end hardware. It requires at least 4GiB of " +"RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." +msgstr "" + +#: modules/gnome/__init__.py:30 +#, python-brace-format +msgid "" +"After installing, enabling, disabling, or uninstalling the app, you will " +"need to restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2791,7 +2848,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3248,7 +3305,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4706,7 +4763,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5397,7 +5454,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5406,11 +5463,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5419,7 +5476,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5469,7 +5526,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5764,8 +5821,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -5975,7 +6032,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -5986,7 +6043,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6016,11 +6073,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6879,6 +6936,49 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8673,35 +8773,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8721,10 +8821,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index d75fe938c..a958ff623 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-16 11:00+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 \n" "Language: bg\n" @@ -103,15 +103,15 @@ msgstr "Език на интерфейса" msgid "Use the language preference set in the browser" msgstr "Използване на предпочитания от четеца език" -#: menu.py:116 templates/base.html:121 +#: menu.py:116 templates/base.html:120 msgid "Home" msgstr "Начало" -#: menu.py:117 templates/base.html:130 +#: menu.py:117 templates/base.html:129 msgid "Apps" msgstr "Приложения" -#: menu.py:119 menu.py:126 templates/base.html:139 +#: menu.py:119 menu.py:126 templates/base.html:138 msgid "System" msgstr "Системни" @@ -1138,8 +1138,9 @@ msgstr "" #: modules/privacy/views.py:55 modules/quassel/views.py:29 #: modules/roundcube/views.py:32 modules/rssbridge/views.py:31 #: modules/shadowsocks/views.py:52 modules/shadowsocksserver/views.py:48 -#: modules/ssh/views.py:62 modules/transmission/views.py:43 -#: modules/ttrss/views.py:31 modules/wordpress/views.py:31 +#: modules/sogo/views.py:32 modules/ssh/views.py:62 +#: modules/transmission/views.py:43 modules/ttrss/views.py:31 +#: modules/wordpress/views.py:31 msgid "Configuration updated" msgstr "Настройките са променени" @@ -1904,7 +1905,7 @@ msgstr "" #: modules/dynamicdns/templates/dynamicdns.html:23 #: modules/email/templates/email-dns.html:22 #: modules/letsencrypt/templates/letsencrypt.html:24 -#: modules/mediawiki/forms.py:64 +#: modules/mediawiki/forms.py:64 modules/sogo/forms.py:18 msgid "Domain" msgstr "Домейн" @@ -2171,7 +2172,7 @@ msgstr "" msgid "Primary domain" msgstr "" -#: modules/email/forms.py:27 +#: modules/email/forms.py:27 modules/sogo/forms.py:20 msgid "" "Mails are received for all domains configured in the system. Among these, " "select the most important one." @@ -2207,8 +2208,10 @@ msgid "Thunderbird" msgstr "Thunderbird" #: modules/email/manifest.py:37 -msgid "K-9 Mail" -msgstr "K-9 Mail" +#, fuzzy +#| msgid "Thunderbird" +msgid "Thunderbird Mobile" +msgstr "Thunderbird" #: modules/email/manifest.py:52 msgid "FairEmail" @@ -2881,6 +2884,66 @@ msgstr "Хранилището е променено." msgid "Edit repository" msgstr "Промяна на хранилище" +#: modules/gnome/__init__.py:18 +msgid "" +"GNOME is a desktop environment that focuses on simplicity and ease of use." +msgstr "" + +#: modules/gnome/__init__.py:21 +#, python-brace-format +msgid "" +"This app turns your {box_name} into a desktop computer if you physically " +"connect a monitor, a keyboard, and a mouse to it. A browser, an office " +"suite, and other basic utilities are available. You may install further " +"graphical applications using the software center provided within." +msgstr "" + +#: modules/gnome/__init__.py:26 +msgid "" +"This app is not suitable for low-end hardware. It requires at least 4GiB of " +"RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." +msgstr "" + +#: modules/gnome/__init__.py:30 +#, python-brace-format +msgid "" +"After installing, enabling, disabling, or uninstalling the app, you will " +"need to restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Настолни устройства" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Четецът Тор" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Обновяване на софтуера" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2910,7 +2973,7 @@ msgstr "Обратна връзка" msgid "Contribute" msgstr "Допринасяне" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3375,7 +3438,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4965,7 +5028,7 @@ msgstr "Редактиране на връзката" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Редактиране" @@ -5656,7 +5719,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5665,11 +5728,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5678,7 +5741,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -5731,7 +5794,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -6032,8 +6095,8 @@ msgstr "Рестартиране" msgid "Shutdown" msgstr "Изключване" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Рестартиране" @@ -6259,7 +6322,7 @@ msgstr "" msgid "Access rights" msgstr "Права за достъп" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6270,7 +6333,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6300,11 +6363,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7193,6 +7256,53 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "Email" +msgid "Webmail" +msgstr "Адрес на ел. поща" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Адрес" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9148,35 +9258,35 @@ msgstr "" "данни. Това е безплатен софтуер, който ви позволява да инсталирате и " "управлявате сървърни приложения с лекота." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Начало" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Приложения" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Системни" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Промяна на парола" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Изключване" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Изход" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Избор на език" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Вход" @@ -9196,10 +9306,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Настолни устройства" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -9398,6 +9504,9 @@ msgstr "преди премахване на {app_id}" msgid "Gujarati" msgstr "Гуджарати" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "24-часов формат." diff --git a/plinth/locale/bn/LC_MESSAGES/django.po b/plinth/locale/bn/LC_MESSAGES/django.po index 9b7c9808d..852de70bd 100644 --- a/plinth/locale/bn/LC_MESSAGES/django.po +++ b/plinth/locale/bn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2021-06-16 07:33+0000\n" "Last-Translator: Oymate \n" "Language-Team: Bengali restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2831,7 +2888,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3288,7 +3345,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4758,7 +4815,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5449,7 +5506,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5458,11 +5515,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5471,7 +5528,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5523,7 +5580,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5818,8 +5875,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6029,7 +6086,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6040,7 +6097,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6070,11 +6127,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6937,6 +6994,49 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8738,35 +8838,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8786,10 +8886,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po index 563cfcf79..a628f104f 100644 --- a/plinth/locale/cs/LC_MESSAGES/django.po +++ b/plinth/locale/cs/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-15 04:00+0000\n" "Last-Translator: Jiří Podhorecký \n" "Language-Team: Czech Reverzní vyhledávání DNS. Není to povinné, nicméně to výrazně zlepšuje " -"doručitelnost e-mailů. Reverzní DNS se nekonfiguruje tam, kde je váš běžný " -"DNS. Měli byste jej hledat v nastavení svého VPS/ISP. Někteří poskytovatelé " -"za vás předkonfigurují část s IP adresou a vy musíte nastavit pouze část s " -"doménou. Reverzní vyhledávání DNS může být nakonfigurováno pouze u jedné z " -"vašich domén, pokud nemáte více veřejných IP adres." +"nakonfigurovat Reverzní vyhledávání DNS. Není to povinné, nicméně " +"to výrazně zlepšuje doručitelnost e-mailů. Reverzní DNS se nekonfiguruje " +"tam, kde je váš běžný DNS. Měli byste jej hledat v nastavení svého VPS/ISP. " +"Někteří poskytovatelé za vás předkonfigurují část s IP adresou a vy musíte " +"nastavit pouze část s doménou. Reverzní vyhledávání DNS může být " +"nakonfigurováno pouze u jedné z vašich domén, pokud nemáte více veřejných IP " +"adres." #: modules/email/templates/email-dns.html:66 msgid "" @@ -3038,6 +3042,68 @@ msgstr "Repozitář upraven." msgid "Edit repository" msgstr "Upravit repozitář" +#: modules/gnome/__init__.py:18 +msgid "" +"GNOME is a desktop environment that focuses on simplicity and ease of use." +msgstr "" + +#: modules/gnome/__init__.py:21 +#, python-brace-format +msgid "" +"This app turns your {box_name} into a desktop computer if you physically " +"connect a monitor, a keyboard, and a mouse to it. A browser, an office " +"suite, and other basic utilities are available. You may install further " +"graphical applications using the software center provided within." +msgstr "" + +#: modules/gnome/__init__.py:26 +msgid "" +"This app is not suitable for low-end hardware. It requires at least 4GiB of " +"RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." +msgstr "" + +#: modules/gnome/__init__.py:30 +#, python-brace-format +msgid "" +"After installing, enabling, disabling, or uninstalling the app, you will " +"need to restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "GNOME soubory" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Desktop" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Tor prohlížeč" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Aktualizace software" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3067,7 +3133,7 @@ msgstr "Odeslat zpětnou vazbu" msgid "Contribute" msgstr "Zapojit se" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3611,7 +3677,7 @@ msgid "Web conference" msgstr "Webové konference" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Licenční informace o JavaScriptu" @@ -5320,7 +5386,7 @@ msgstr "Upravit připojení" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Upravit" @@ -6063,7 +6129,7 @@ msgstr "Připojení {name} smazáno." msgid "Failed to delete connection: Connection not found." msgstr "Smazání připojení se nezdařilo: Připojení nenalezeno." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6077,13 +6143,13 @@ msgstr "" "počítače a mobilní klienty. Server Nextcloud poskytuje dobře integrované " "webové rozhraní." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "Nextcloud mohou používat všichni uživatelé služby FreedomBox. Chcete-li " "provést správu " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6096,7 +6162,7 @@ msgstr "" "právní kontrolu provádí projekt upstream, nikoli Debian/{box_name}. " "Aktualizace jsou prováděny podle nezávislého cyklu." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -6154,7 +6220,7 @@ msgstr "Synchronizace souborů" msgid "Sharing" msgstr "Sdílení" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "Groupware" @@ -6491,8 +6557,8 @@ msgstr "Restart" msgid "Shutdown" msgstr "Vypnout" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Restartovat" @@ -6757,7 +6823,7 @@ msgstr "" msgid "Access rights" msgstr "Přístupová práva" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6771,7 +6837,7 @@ msgstr "" "adresa>) a své uživatelské jméno. DAVx5 zobrazí všechny existující " "kalendáře a adresáře a vy můžete vytvořit nové." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "Kalendář GNOME" @@ -6807,11 +6873,11 @@ msgstr "Kalendář" msgid "Contacts" msgstr "Kontakty" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "CalDAV" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "CardDAV" @@ -7798,6 +7864,55 @@ msgstr "Pro dokončení obnovy ze zálohy je třeba systém restartovat." msgid "Rollback to Snapshot" msgstr "Vrátit do podoby zachyceného stavu" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "Email" +msgid "Webmail" +msgstr "E-mail" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "Calendar" +msgid "Calender" +msgstr "Kalendář" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Adresa" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9837,35 +9952,35 @@ msgstr "" "Jedná se o bezplatný software, který umožňuje snadnou instalaci a správu " "serverových aplikací." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Domů" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Aplikace" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Systém" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Změnit heslo" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Vypnout" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Odhlásit" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Vyberte jazyk" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Přihlásit" @@ -9885,10 +10000,6 @@ msgstr "Web" msgid "Launch" msgstr "Spustit" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Desktop" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10103,6 +10214,9 @@ msgstr "před odinstalací {app_id}" msgid "Gujarati" msgstr "gudžarátština" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "Ve 24hodinovém formátu." diff --git a/plinth/locale/da/LC_MESSAGES/django.po b/plinth/locale/da/LC_MESSAGES/django.po index 14725d010..42032e4be 100644 --- a/plinth/locale/da/LC_MESSAGES/django.po +++ b/plinth/locale/da/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Danish restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +#, fuzzy +#| msgid "IRC Client (Quassel)" +msgid "Desktop" +msgstr "IRC-klient (Quassel)" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Upgrades" +msgid "Software store" +msgstr "Softwareopdateringer" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3217,7 +3280,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3741,7 +3804,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -5441,7 +5504,7 @@ msgstr "Rediger Forbindelse" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Rediger" @@ -6205,7 +6268,7 @@ msgstr "Slettede forbindelse {name}." msgid "Failed to delete connection: Connection not found." msgstr "Kunne ikke slette forbindelse: Forbindelse ikke fundet." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6214,11 +6277,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6227,7 +6290,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 #, fuzzy #| msgid "Next" @@ -6291,7 +6354,7 @@ msgstr "System" msgid "Sharing" msgstr "Aktiver Shaarli" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Add Service" msgid "Groupware" @@ -6676,8 +6739,8 @@ msgstr "" msgid "Shutdown" msgstr "Sluk Nu" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 #, fuzzy #| msgid "Restart Now" msgid "Restart" @@ -6943,7 +7006,7 @@ msgstr "" msgid "Access rights" msgstr "Adgang" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6954,7 +7017,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6984,11 +7047,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7999,6 +8062,53 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "FairEmail" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Adresse" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10086,39 +10196,39 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Apps" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " System" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Ændr kodeord" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 #, fuzzy #| msgid "Shut Down Now" msgid "Shut down" msgstr "Sluk Nu" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Log ud" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "Sprog" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Log ind" @@ -10140,12 +10250,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -#, fuzzy -#| msgid "IRC Client (Quassel)" -msgid "Desktop" -msgstr "IRC-klient (Quassel)" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" @@ -10362,6 +10466,9 @@ msgstr "" msgid "Gujarati" msgstr "" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #, fuzzy, python-brace-format #~| msgid "" #~| "Optional Value. If your {box_name} is not connected directly to the " diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index a6b7e4548..ce8998e23 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-15 04:00+0000\n" "Last-Translator: Dietmar \n" "Language-Team: German restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "GNOME-Dateinen" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Desktop" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Tor Browser" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Software-Aktualisierung" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3124,7 +3189,7 @@ msgstr "Feedback geben" msgid "Contribute" msgstr "Mitwirken" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3681,7 +3746,7 @@ msgid "Web conference" msgstr "Web-Konferenz" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "JavaScript-Lizenzinformation" @@ -5430,7 +5495,7 @@ msgstr "Verbindung bearbeiten" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Bearbeiten" @@ -6178,7 +6243,7 @@ msgstr "Verbindung {name} gelöscht." msgid "Failed to delete connection: Connection not found." msgstr "Konnte Verbindung nicht löschen: Verbindung nicht gefunden." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 #, fuzzy msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " @@ -6193,13 +6258,13 @@ msgstr "" "Computer und mobile Clients. Der Nextcloud Server bietet eine gut " "integrierte Web-Schnittstelle." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "Alle Nutzer von FreedomBox können Nextcloud nutzen. Zur Durchführung von " "administrativen " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6213,7 +6278,7 @@ msgstr "" "Projekt und nicht von Debian/{box_name} durchgeführt. Aktualisierungen " "werden in einem unabhängigen Zyklus durchgeführt." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -6273,7 +6338,7 @@ msgstr "Dateisynchronisierung" msgid "Sharing" msgstr "Sharing" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "Groupware" @@ -6617,8 +6682,8 @@ msgstr "Neustart" msgid "Shutdown" msgstr "Herunterfahren" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Neu starten" @@ -6886,7 +6951,7 @@ msgstr "" msgid "Access rights" msgstr "Zugriffsrechte" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6900,7 +6965,7 @@ msgstr "" "adresse>) und ihren Benutzernamen. DAVx5 wird Ihre gesamten vorhandenen " "Kalender und Adressbücher anzeigen, und Sie können neue anlegen." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "GNOME Kalender" @@ -6936,11 +7001,11 @@ msgstr "Kalender" msgid "Contacts" msgstr "Kontakte" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "CalDAV" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "CardDAV" @@ -7945,6 +8010,55 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "Zurücksetzen auf Speicherauszug" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "Email" +msgid "Webmail" +msgstr "E-Mail" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "Calendar" +msgid "Calender" +msgstr "Kalender" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Adresse" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10046,35 +10160,35 @@ msgstr "" "und Datenschutz entwickelt wurde. Es ist freie Software, mit der Sie Server-" "Apps einfach installieren und verwalten können." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Startseite" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Apps" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " System" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Passwort ändern" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Herunterfahren" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Abmelden" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Sprache wählen" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Anmelden" @@ -10094,10 +10208,6 @@ msgstr "Web" msgid "Launch" msgstr "Starten" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Desktop" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10311,6 +10421,9 @@ msgstr "vor der Deinstallation von {app_id}" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "Im 24-Stunden-Format." diff --git a/plinth/locale/django.pot b/plinth/locale/django.pot index 0a25c89f1..91e7f1d09 100644 --- a/plinth/locale/django.pot +++ b/plinth/locale/django.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -95,15 +95,15 @@ msgstr "" msgid "Use the language preference set in the browser" msgstr "" -#: menu.py:116 templates/base.html:121 +#: menu.py:116 templates/base.html:120 msgid "Home" msgstr "" -#: menu.py:117 templates/base.html:130 +#: menu.py:117 templates/base.html:129 msgid "Apps" msgstr "" -#: menu.py:119 menu.py:126 templates/base.html:139 +#: menu.py:119 menu.py:126 templates/base.html:138 msgid "System" msgstr "" @@ -1065,8 +1065,9 @@ msgstr "" #: modules/privacy/views.py:55 modules/quassel/views.py:29 #: modules/roundcube/views.py:32 modules/rssbridge/views.py:31 #: modules/shadowsocks/views.py:52 modules/shadowsocksserver/views.py:48 -#: modules/ssh/views.py:62 modules/transmission/views.py:43 -#: modules/ttrss/views.py:31 modules/wordpress/views.py:31 +#: modules/sogo/views.py:32 modules/ssh/views.py:62 +#: modules/transmission/views.py:43 modules/ttrss/views.py:31 +#: modules/wordpress/views.py:31 msgid "Configuration updated" msgstr "" @@ -1805,7 +1806,7 @@ msgstr "" #: modules/dynamicdns/templates/dynamicdns.html:23 #: modules/email/templates/email-dns.html:22 #: modules/letsencrypt/templates/letsencrypt.html:24 -#: modules/mediawiki/forms.py:64 +#: modules/mediawiki/forms.py:64 modules/sogo/forms.py:18 msgid "Domain" msgstr "" @@ -2067,7 +2068,7 @@ msgstr "" msgid "Primary domain" msgstr "" -#: modules/email/forms.py:27 +#: modules/email/forms.py:27 modules/sogo/forms.py:20 msgid "" "Mails are received for all domains configured in the system. Among these, " "select the most important one." @@ -2103,7 +2104,7 @@ msgid "Thunderbird" msgstr "" #: modules/email/manifest.py:37 -msgid "K-9 Mail" +msgid "Thunderbird Mobile" msgstr "" #: modules/email/manifest.py:52 @@ -2763,6 +2764,62 @@ msgstr "" msgid "Edit repository" msgstr "" +#: modules/gnome/__init__.py:18 +msgid "" +"GNOME is a desktop environment that focuses on simplicity and ease of use." +msgstr "" + +#: modules/gnome/__init__.py:21 +#, python-brace-format +msgid "" +"This app turns your {box_name} into a desktop computer if you physically " +"connect a monitor, a keyboard, and a mouse to it. A browser, an office " +"suite, and other basic utilities are available. You may install further " +"graphical applications using the software center provided within." +msgstr "" + +#: modules/gnome/__init__.py:26 +msgid "" +"This app is not suitable for low-end hardware. It requires at least 4GiB of " +"RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." +msgstr "" + +#: modules/gnome/__init__.py:30 +#, python-brace-format +msgid "" +"After installing, enabling, disabling, or uninstalling the app, you will " +"need to restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2792,7 +2849,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3249,7 +3306,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4707,7 +4764,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5398,7 +5455,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5407,11 +5464,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5420,7 +5477,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5470,7 +5527,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5765,8 +5822,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -5976,7 +6033,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -5987,7 +6044,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6017,11 +6074,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6880,6 +6937,49 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8674,35 +8774,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8722,10 +8822,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/el/LC_MESSAGES/django.po b/plinth/locale/el/LC_MESSAGES/django.po index 9d81dd894..e4984ffa7 100644 --- a/plinth/locale/el/LC_MESSAGES/django.po +++ b/plinth/locale/el/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Greek restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Calendar" +msgid "GNOME" +msgstr "GNOME Calendar" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Επιφάνειας εργασίας" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Tor πρόγραμμα περιήγησης" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Share deleted." +msgid "Software store" +msgstr "Το μέρισμα διαγράφηκε." + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3237,7 +3302,7 @@ msgstr "Υποβάλετε σχόλια" msgid "Contribute" msgstr "Συνεισφέρετε" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3812,7 +3877,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Πληροφορίες άδειας χρήσης JavaScript" @@ -5562,7 +5627,7 @@ msgstr "Επεξεργασία σύνδεσης" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Επεξεργασία" @@ -6335,7 +6400,7 @@ msgstr "Η σύνδεση {name} διαγράφηκε." msgid "Failed to delete connection: Connection not found." msgstr "Απέτυχε η διαγραφή της σύνδεσης: η σύνδεση δεν βρέθηκε." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6344,11 +6409,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6357,7 +6422,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 #, fuzzy #| msgid "Next" @@ -6424,7 +6489,7 @@ msgstr "" msgid "Sharing" msgstr "Κοινή χρήση" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Group Share" msgid "Groupware" @@ -6795,8 +6860,8 @@ msgstr "" msgid "Shutdown" msgstr "ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣ" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Κάνετε επανεκκίνηση" @@ -7076,7 +7141,7 @@ msgstr "" msgid "Access rights" msgstr "Σημείο πρόσβασης" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -7091,7 +7156,7 @@ msgstr "" "υπάρχοντα ημερολόγια και βιβλία διευθύνσεων και μπορείτε να δημιουργήσετε " "νέα." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "GNOME Calendar" @@ -7131,11 +7196,11 @@ msgstr "GNOME Calendar" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -8215,6 +8280,53 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "Επαναφορά σε στιγμιότυπο" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +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" +msgid "Address book" +msgstr "Διεύθυνση" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10367,35 +10479,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Κεντρική σελίδα" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Εφαρμογές" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Σύστημα" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Αλλαγή κωδικού πρόσβασης" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣ" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Αποσύνδεση" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Επιλογή γλώσσας" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Σύνδεση" @@ -10415,10 +10527,6 @@ msgstr "Ιστός" msgid "Launch" msgstr "Έναρξη" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Επιφάνειας εργασίας" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" diff --git a/plinth/locale/es/LC_MESSAGES/django.po b/plinth/locale/es/LC_MESSAGES/django.po index 8c9dacb00..589be2d2c 100644 --- a/plinth/locale/es/LC_MESSAGES/django.po +++ b/plinth/locale/es/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2024-11-01 17:00+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Spanish restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "GNOME Archivos" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Escritorio" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Navegador Tor" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Actualización de software (Update)" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3131,7 +3196,7 @@ msgstr "Enviar Comentarios" msgid "Contribute" msgstr "Contribuír" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3690,7 +3755,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Información de licencia de JavaScript" @@ -5453,7 +5518,7 @@ msgstr "Editar conexión" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Editar" @@ -6198,7 +6263,7 @@ msgstr "Conexión {name} eliminada." msgid "Failed to delete connection: Connection not found." msgstr "Ha fallado la eliminación de la conexión: no se encontró." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6212,13 +6277,13 @@ msgstr "" "aplicaciones cliente para ordenadores de sobremesa y clientes móviles. El " "servidor Nextcloud proporciona una interfaz web bien integrada." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "Todos los usuarios de FreedomBox pueden utilizar Nextcloud. Para realizar " "tareas administrativas " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6232,7 +6297,7 @@ msgstr "" "{box_name} . Las actualizaciones se realizan siguiendo un ciclo " "independiente." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -6294,7 +6359,7 @@ msgstr "Sistema de archivos" msgid "Sharing" msgstr "Compartir" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Group Share" msgid "Groupware" @@ -6647,8 +6712,8 @@ msgstr "" msgid "Shutdown" msgstr "Apagar" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Reiniciar" @@ -6923,7 +6988,7 @@ msgstr "" msgid "Access rights" msgstr "Permisos de acceso" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6938,7 +7003,7 @@ msgstr "" "y agendas disponibles y podrá crear otros nuevos.</tu.direccion." "freedombox>." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "Calendario GNOME" @@ -6976,11 +7041,11 @@ msgstr "Calendario GNOME" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -8008,6 +8073,55 @@ msgstr "Debe reiniciar el sistema para completar la restauración." msgid "Rollback to Snapshot" msgstr "Restaurar a instantánea" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +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" +msgid "Address book" +msgstr "Dirección" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10108,35 +10222,35 @@ msgstr "" "propiedad de los datos. Es un software gratuito que te permite instalar y " "gestionar aplicaciones de un servidor con facilidad." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Inicio" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Aplicaciones" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Sistema" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Cambiar clave de acceso" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Apagar" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Cerrar sesión" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Seleccionar idioma" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Iniciar sesión" @@ -10156,10 +10270,6 @@ msgstr "Web" msgid "Launch" msgstr "Lanzar" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Escritorio" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10372,6 +10482,9 @@ msgstr "antes de desinstalar {app_id}" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "En formato 24 horas." diff --git a/plinth/locale/fa/LC_MESSAGES/django.po b/plinth/locale/fa/LC_MESSAGES/django.po index d292fd9db..bcb97728f 100644 --- a/plinth/locale/fa/LC_MESSAGES/django.po +++ b/plinth/locale/fa/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Persian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "{name} deleted." +msgid "Software store" +msgstr "{name} پاک شد." + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 #, fuzzy @@ -3132,7 +3191,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3642,7 +3701,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -5286,7 +5345,7 @@ msgstr "ویرایش اتصال" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "ویرایش" @@ -6045,7 +6104,7 @@ msgstr "اتصال {name} پاک شد." msgid "Failed to delete connection: Connection not found." msgstr "پاک‌کردن اتصال شکست خورد: اتصال پیدا نشد." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6054,11 +6113,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6067,7 +6126,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -6127,7 +6186,7 @@ msgstr "" msgid "Sharing" msgstr "مشترک" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Shared" msgid "Groupware" @@ -6434,8 +6493,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6655,7 +6714,7 @@ msgstr "" msgid "Access rights" msgstr "نقطهٔ دسترسی" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6666,7 +6725,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6696,11 +6755,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7652,6 +7711,51 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "نشانی" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9606,38 +9710,38 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 #, fuzzy msgid " Apps" msgstr "برنامه‌ها" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "زبان" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -9657,10 +9761,6 @@ msgstr "وب" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "گنو/لینوکس" diff --git a/plinth/locale/fake/LC_MESSAGES/django.po b/plinth/locale/fake/LC_MESSAGES/django.po index 8a77baf2a..d03d119c2 100644 --- a/plinth/locale/fake/LC_MESSAGES/django.po +++ b/plinth/locale/fake/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Plinth 0.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2016-01-31 22:24+0530\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Plinth Developers restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +#, fuzzy +#| msgid "IRC Client (Quassel)" +msgid "Desktop" +msgstr "IRC CLIENT (QUASSEL)" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Upgrades" +msgid "Software store" +msgstr "SOFTWARE UPGRADES" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3285,7 +3346,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3799,7 +3860,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -5478,7 +5539,7 @@ msgstr "EDIT CONNECTION" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "EDIT" @@ -6240,7 +6301,7 @@ msgstr "CONNECTION {name} DELETED." msgid "Failed to delete connection: Connection not found." msgstr "FAILED TO DELETE CONNECTION: CONNECTION NOT FOUND." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6249,11 +6310,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6262,7 +6323,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 #, fuzzy #| msgid "Next" @@ -6326,7 +6387,7 @@ msgstr "SYSTEM" msgid "Sharing" msgstr "ENABLE SHAARLI" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Add Service" msgid "Groupware" @@ -6721,8 +6782,8 @@ msgstr "" msgid "Shutdown" msgstr "SHUT DOWN NOW" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 #, fuzzy #| msgid "Restart Now" msgid "Restart" @@ -6984,7 +7045,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6995,7 +7056,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -7025,11 +7086,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -8047,6 +8108,51 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "ADDRESS" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10134,43 +10240,43 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 #, fuzzy #| msgid "Apps" msgid " Apps" msgstr "APPS" -#: templates/base.html:135 +#: templates/base.html:134 #, fuzzy #| msgid "System" msgid " System" msgstr "SYSTEM" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "CHANGE PASSWORD" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 #, fuzzy #| msgid "Shut Down Now" msgid "Shut down" msgstr "SHUT DOWN NOW" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "LOG OUT" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "LANGUAGE" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "LOG IN" @@ -10192,12 +10298,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -#, fuzzy -#| msgid "IRC Client (Quassel)" -msgid "Desktop" -msgstr "IRC CLIENT (QUASSEL)" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/fr/LC_MESSAGES/django.po b/plinth/locale/fr/LC_MESSAGES/django.po index 43c42548b..1f1bd8d95 100644 --- a/plinth/locale/fr/LC_MESSAGES/django.po +++ b/plinth/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-05 16:52+0000\n" "Last-Translator: Coucouf \n" "Language-Team: French restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "Fichiers GNOME" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Bureau" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Navigateur Tor" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Mise à jour du système" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3122,7 +3187,7 @@ msgstr "Partager vos impressions" msgid "Contribute" msgstr "Participer" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3687,7 +3752,7 @@ msgid "Web conference" msgstr "Conférence Web" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Information de licence JavaScript" @@ -5442,7 +5507,7 @@ msgstr "Modifier la connexion" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Modifier" @@ -6195,7 +6260,7 @@ msgstr "Connexion {name} supprimée." msgid "Failed to delete connection: Connection not found." msgstr "Échec de suppression de la connexion : connexion introuvable." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6209,13 +6274,13 @@ msgstr "" "des applications clientes pour les ordinateurs de bureau et des clients " "mobiles. Le serveur Nextcloud fournit une interface web bien intégrée." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "Tous les utilisateurs de FreedomBox peuvent utiliser Nextcloud. Pour " "effectuer des opérations administratives " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6229,7 +6294,7 @@ msgstr "" "en amont et pas par Debian/{box_name}. Les mises à jour sont effectuées en " "fonction d'un cycle indépendant." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -6288,7 +6353,7 @@ msgstr "Synchronisation de fichiers" msgid "Sharing" msgstr "Partages" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "Logiciel de groupe" @@ -6634,8 +6699,8 @@ msgstr "Redémarrer" msgid "Shutdown" msgstr "Éteindre" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Redémarrer" @@ -6908,7 +6973,7 @@ msgstr "" msgid "Access rights" msgstr "Droits d’accès" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6922,7 +6987,7 @@ msgstr "" "votre.freedombox>) et votre nom d’utilisateur. DAVx5 vous affichera tous vos " "agendas et carnets d’adresses existants et vous pourrez en créer de nouveaux." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "Agenda GNOME" @@ -6959,11 +7024,11 @@ msgstr "Calendrier" msgid "Contacts" msgstr "Contacts" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "CalDAV" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "CardDAV" @@ -7978,6 +8043,55 @@ msgstr "Le système doit être redémarré pour terminer le retour en arrière." msgid "Rollback to Snapshot" msgstr "Revenir à l’instantané" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "Email" +msgid "Webmail" +msgstr "Courriel" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "Calendar" +msgid "Calender" +msgstr "Calendrier" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Adresse" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10084,35 +10198,35 @@ msgstr "" "et de la maîtrise de vos données. C’est un logiciel libre qui vous laisse " "installer et gérer facilement des applis de serveur." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Accueil" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Applis" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Système" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Changer le mot de passe" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Éteindre" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Se déconnecter" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Choisir la langue" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "S’identifier" @@ -10132,10 +10246,6 @@ msgstr "Web" msgid "Launch" msgstr "Lancer" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Bureau" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10353,6 +10463,9 @@ msgstr "avant la désinstallation de {app_id}" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "Au format 24 heures." diff --git a/plinth/locale/gl/LC_MESSAGES/django.po b/plinth/locale/gl/LC_MESSAGES/django.po index 3811d26d2..28fb31421 100644 --- a/plinth/locale/gl/LC_MESSAGES/django.po +++ b/plinth/locale/gl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-12-30 10:51+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Galician restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2810,7 +2867,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3269,7 +3326,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4741,7 +4798,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5434,7 +5491,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5443,11 +5500,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5456,7 +5513,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5508,7 +5565,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5805,8 +5862,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6018,7 +6075,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6029,7 +6086,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6059,11 +6116,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6930,6 +6987,49 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8748,35 +8848,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8796,10 +8896,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/gu/LC_MESSAGES/django.po b/plinth/locale/gu/LC_MESSAGES/django.po index 4b9304416..984f754ef 100644 --- a/plinth/locale/gu/LC_MESSAGES/django.po +++ b/plinth/locale/gu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2021-01-18 12:32+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Gujarati restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3053,7 +3110,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3512,7 +3569,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -5058,7 +5115,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5766,7 +5823,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5775,11 +5832,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5788,7 +5845,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5844,7 +5901,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -6145,8 +6202,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6360,7 +6417,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6371,7 +6428,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6401,11 +6458,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7282,6 +7339,51 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "GnuDIP Server Address" +msgid "Address book" +msgstr "GnuDIP સર્વર સરનામું" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9176,39 +9278,39 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 #, fuzzy #| msgid "BitTorrent Web Client" msgid " Apps" msgstr "બીટ ટોરેન્ટ વેબ ક્લાયન્ટ" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "ભાષા" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -9230,10 +9332,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/hi/LC_MESSAGES/django.po b/plinth/locale/hi/LC_MESSAGES/django.po index 514af7407..a6b722e34 100644 --- a/plinth/locale/hi/LC_MESSAGES/django.po +++ b/plinth/locale/hi/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2023-10-19 06:30+0000\n" "Last-Translator: Shaik \n" "Language-Team: Hindi restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Calendar" +msgid "GNOME" +msgstr "गनोम कैलेंडर" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "डेस्कटॉप" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "टोर ब्राउजर" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Upgrades" +msgid "Software store" +msgstr "सॉफ्टवेयर अपग्रेडस" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3240,7 +3305,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 #, fuzzy @@ -3767,7 +3832,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "जावास्क्रिप्ट लाइसेंस जानकारी" @@ -5449,7 +5514,7 @@ msgstr "कनेक्शन संपादित करें" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "संपादन" @@ -6221,7 +6286,7 @@ msgstr "कनेक्शन {name} हटाया गया." msgid "Failed to delete connection: Connection not found." msgstr "कनेक्शन हटाने में विफल: कनेक्शन नहीं मिला." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6230,11 +6295,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6243,7 +6308,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -6309,7 +6374,7 @@ msgstr "फ़ाइलसिस्टम" msgid "Sharing" msgstr "शेयरिंग" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Add Share" msgid "Groupware" @@ -6681,8 +6746,8 @@ msgstr "" msgid "Shutdown" msgstr "शट डाउन" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "रीस्टार्ट" @@ -6944,7 +7009,7 @@ msgstr "" msgid "Access rights" msgstr "अभिगम केंद्र" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6962,7 +7027,7 @@ msgstr "" "राडिकैल सर्वर का यूआरएल दर्ज करें (जैसे http://localhost:5232) और अपने यूसरनाम. " "डीएवीड्रोइड सब मौजूदा कैलेंडर और पता पुस्तिकाओं दिखाएगा और आप नया बना सकते हैं." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "गनोम कैलेंडर" @@ -7005,11 +7070,11 @@ msgstr "गनोम कैलेंडर" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -8035,6 +8100,53 @@ msgstr "रोलबैक शुरु करने के लिए सिस msgid "Rollback to Snapshot" msgstr "स्नैपशॉट को रोलबैक करें" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "GNOME Calendar" +msgid "Calender" +msgstr "गनोम कैलेंडर" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "ऍड्रेस" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10171,35 +10283,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " होम" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " ऐप्स" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " सिस्टम" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "पासवर्ड बदलें" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "शट डाउन" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "लॉग आउट" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "भाषा चुनें" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "लॉग इन" @@ -10219,10 +10331,6 @@ msgstr "वेब" msgid "Launch" msgstr "लॉन्च" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "डेस्कटॉप" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "जीएनयू / लिनक्स" diff --git a/plinth/locale/hu/LC_MESSAGES/django.po b/plinth/locale/hu/LC_MESSAGES/django.po index 6da187fbf..5e94e9b79 100644 --- a/plinth/locale/hu/LC_MESSAGES/django.po +++ b/plinth/locale/hu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-10-24 18:39+0000\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Hungarian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "GNOME Fájlok" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Asztali" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Tor böngésző" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Szoftverfrissítések" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3191,7 +3256,7 @@ msgstr "Visszajelzés küldése" msgid "Contribute" msgstr "Hozzájárulás" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3754,7 +3819,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "JavaScript licencinformáció" @@ -5558,7 +5623,7 @@ msgstr "Kapcsolat szerkesztése" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Szerkesztés" @@ -6317,7 +6382,7 @@ msgstr "Kapcsolat törölve: {name}." msgid "Failed to delete connection: Connection not found." msgstr "A kapcsolat törlése sikertelen, mivel nem található." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6326,11 +6391,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6339,7 +6404,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 #, fuzzy #| msgid "Next" @@ -6419,7 +6484,7 @@ msgstr "Fájlrendszer" msgid "Sharing" msgstr "Megosztás" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Group Share" msgid "Groupware" @@ -6785,8 +6850,8 @@ msgstr "" msgid "Shutdown" msgstr "Leállítás" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Újraindítás" @@ -7058,7 +7123,7 @@ msgstr "" msgid "Access rights" msgstr "Hozzáférési jogok" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -7072,7 +7137,7 @@ msgstr "" "cimed>) és a felhasználónevet. A DAVx5 meg fogja mutatni az összes " "elérhető naptárt és címjegyzéket, majd később újakat is létrehozhatsz." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "GNOME Calendar" @@ -7110,11 +7175,11 @@ msgstr "GNOME Calendar" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -8148,6 +8213,55 @@ msgstr "A visszaállítás befejezéséhez a rendszert újra kell indítani." msgid "Rollback to Snapshot" msgstr "Visszaállítás pillanatképre" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +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" +msgid "Address book" +msgstr "Cím" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10272,35 +10386,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Kezdőlap" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Alkalmazások" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Rendszer" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Jelszómódosítás" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Leállítás" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Kijelentkezés" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Válassz nyelvet" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Bejelentkezés" @@ -10320,10 +10434,6 @@ msgstr "Webes" msgid "Launch" msgstr "Indítás" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Asztali" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10546,6 +10656,9 @@ msgstr "" msgid "Gujarati" msgstr "Gudzsaráti" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "24 órás formátumban." diff --git a/plinth/locale/id/LC_MESSAGES/django.po b/plinth/locale/id/LC_MESSAGES/django.po index 676644dd3..47acc735c 100644 --- a/plinth/locale/id/LC_MESSAGES/django.po +++ b/plinth/locale/id/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Indonesian (FreedomBox)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Indonesian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Desktop" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Server URL updated" +msgid "Software store" +msgstr "URL Server diperbarui" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3168,7 +3229,7 @@ msgstr "Berikan umpan balik" msgid "Contribute" msgstr "Kontribusi" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3716,7 +3777,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Informasi Lisensi JavaScript" @@ -5319,7 +5380,7 @@ msgstr "Sunting Koneksi" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Sunting" @@ -6016,7 +6077,7 @@ msgstr "Koneksi {name} dihapus." msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6025,11 +6086,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6038,7 +6099,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -6094,7 +6155,7 @@ msgstr "" msgid "Sharing" msgstr "Berbagi" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Add Service" msgid "Groupware" @@ -6405,8 +6466,8 @@ msgstr "" msgid "Shutdown" msgstr "Matikan" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Mulai ulang" @@ -6624,7 +6685,7 @@ msgstr "" msgid "Access rights" msgstr "Hak akses" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6635,7 +6696,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "Kalender GNOME" @@ -6667,11 +6728,11 @@ msgstr "Kalender GNOME" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7599,6 +7660,53 @@ msgstr "Sistem harus dimulai ulang untuk menyelesaikan rollback." msgid "Rollback to Snapshot" msgstr "Rollback ke Snapshot" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +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" +msgid "Address book" +msgstr "Address" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9525,35 +9633,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Beranda" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Aplikasi" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " sistem" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Ganti kata sandi" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Matikan" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Keluar" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Pilih bahasa" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Masuk" @@ -9573,10 +9681,6 @@ msgstr "Laman" msgid "Launch" msgstr "Luncurkan" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Desktop" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po index 65cb637d2..b54efbe06 100644 --- a/plinth/locale/it/LC_MESSAGES/django.po +++ b/plinth/locale/it/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Italian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Aggiornamento software" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3123,7 +3184,7 @@ msgstr "Invia feedback" msgid "Contribute" msgstr "Contribuire" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3681,7 +3742,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Informazioni sulla licenza JavaScript" @@ -5370,7 +5431,7 @@ msgstr "Modifica Connessione" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Modifica" @@ -6081,7 +6142,7 @@ msgstr "Connessione {name} cancellata." msgid "Failed to delete connection: Connection not found." msgstr "Cancellazione connessione fallita: connessione non trovata." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6090,11 +6151,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6103,7 +6164,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -6166,7 +6227,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -6517,8 +6578,8 @@ msgstr "" msgid "Shutdown" msgstr "Spegni Ora" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6784,7 +6845,7 @@ msgstr "" msgid "Access rights" msgstr "Diritti di accesso" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6798,7 +6859,7 @@ msgstr "" "indirizzo>) e il tuo nome utente. DAVx5 mostrerà tutti i calendari e le " "rubriche esistenti, e potrai crearne di nuovi." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6828,11 +6889,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7723,6 +7784,53 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "FairEmail" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Indirizzo" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9593,35 +9701,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -9641,10 +9749,6 @@ msgstr "" msgid "Launch" msgstr "Avvia" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -9847,6 +9951,9 @@ msgstr "" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #, python-brace-format #~ msgid "" #~ "Optional Value. If your {box_name} is not connected directly to the " diff --git a/plinth/locale/ja/LC_MESSAGES/django.po b/plinth/locale/ja/LC_MESSAGES/django.po index a7162efa9..9c83e01e3 100644 --- a/plinth/locale/ja/LC_MESSAGES/django.po +++ b/plinth/locale/ja/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2023-05-07 23:50+0000\n" "Last-Translator: Nobuhiro Iwamatsu \n" "Language-Team: Japanese restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2796,7 +2853,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3253,7 +3310,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4711,7 +4768,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5402,7 +5459,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5411,11 +5468,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5424,7 +5481,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5474,7 +5531,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5769,8 +5826,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -5980,7 +6037,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -5991,7 +6048,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6021,11 +6078,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6884,6 +6941,49 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8678,35 +8778,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8726,10 +8826,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/kn/LC_MESSAGES/django.po b/plinth/locale/kn/LC_MESSAGES/django.po index 1fcb6b51c..faaa5e304 100644 --- a/plinth/locale/kn/LC_MESSAGES/django.po +++ b/plinth/locale/kn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2020-07-16 16:41+0000\n" "Last-Translator: Yogesh \n" "Language-Team: Kannada restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2794,7 +2851,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3251,7 +3308,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4709,7 +4766,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5400,7 +5457,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5409,11 +5466,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5422,7 +5479,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5472,7 +5529,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5767,8 +5824,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -5978,7 +6035,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -5989,7 +6046,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6019,11 +6076,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6884,6 +6941,49 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8678,35 +8778,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8726,10 +8826,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/lt/LC_MESSAGES/django.po b/plinth/locale/lt/LC_MESSAGES/django.po index 3aeced1ef..b60bb6f4e 100644 --- a/plinth/locale/lt/LC_MESSAGES/django.po +++ b/plinth/locale/lt/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Lithuanian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2804,7 +2863,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3261,7 +3320,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4727,7 +4786,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5418,7 +5477,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5427,11 +5486,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5440,7 +5499,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5490,7 +5549,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5785,8 +5844,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -5996,7 +6055,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6007,7 +6066,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6037,11 +6096,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6902,6 +6961,51 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "FairEmail" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8698,35 +8802,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8746,10 +8850,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" @@ -8943,6 +9043,9 @@ msgstr "" msgid "Gujarati" msgstr "" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "I2P" #~ msgstr "I2P" diff --git a/plinth/locale/lv/LC_MESSAGES/django.po b/plinth/locale/lv/LC_MESSAGES/django.po index a6481e894..16b4c6b45 100644 --- a/plinth/locale/lv/LC_MESSAGES/django.po +++ b/plinth/locale/lv/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Latvian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2803,7 +2862,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3260,7 +3319,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4726,7 +4785,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5417,7 +5476,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5426,11 +5485,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5439,7 +5498,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5489,7 +5548,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5784,8 +5843,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -5995,7 +6054,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6006,7 +6065,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6036,11 +6095,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6901,6 +6960,51 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "FairEmail" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8697,35 +8801,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8745,10 +8849,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" @@ -8942,6 +9042,9 @@ msgstr "" msgid "Gujarati" msgstr "" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "I2P" #~ msgstr "I2P" diff --git a/plinth/locale/nb/LC_MESSAGES/django.po b/plinth/locale/nb/LC_MESSAGES/django.po index 35e693f81..12b41495c 100644 --- a/plinth/locale/nb/LC_MESSAGES/django.po +++ b/plinth/locale/nb/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2024-10-27 23:30+0000\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Norwegian Bokmål restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Calendar" +msgid "GNOME" +msgstr "GNOME-kalender" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Skrivebord" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Tor-nettleseren" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Programvare-oppdatering" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3199,7 +3264,7 @@ msgstr "Send inn tilbakemeldinger" msgid "Contribute" msgstr "Bidra" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3755,7 +3820,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "JavaScript lisensinformasjon" @@ -5503,7 +5568,7 @@ msgstr "Rediger tilkobling" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Rediger" @@ -6282,7 +6347,7 @@ msgstr "Tilkobling {name} slettet." msgid "Failed to delete connection: Connection not found." msgstr "Kunne ikke slette tilkobling: Tilkobling ikke funnet." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6291,11 +6356,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6304,7 +6369,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 #, fuzzy #| msgid "Next" @@ -6372,7 +6437,7 @@ msgstr "Filsystem" msgid "Sharing" msgstr "Deling" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Add Share" msgid "Groupware" @@ -6747,8 +6812,8 @@ msgstr "" msgid "Shutdown" msgstr "Slå av" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Omstart" @@ -7019,7 +7084,7 @@ msgstr "" msgid "Access rights" msgstr "Aksesspunkt" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -7033,7 +7098,7 @@ msgstr "" "brukernavn. DAVx5 vil vise alle eksisterende kalendere og adressebøker, og " "du kan opprette nye." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "GNOME-kalender" @@ -7071,11 +7136,11 @@ msgstr "GNOME-kalender" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -8097,6 +8162,55 @@ msgstr "Systemet må startes på nytt for å fullføre tilbakerullingen." msgid "Rollback to Snapshot" msgstr "Rull tilbake til øyeblikksbilde" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +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" +msgid "Address book" +msgstr "Adresse" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10188,35 +10302,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Hjem" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Programmer" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " System" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Endre passord" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Slå av" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Logg ut" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Velg språk" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Logg inn" @@ -10236,10 +10350,6 @@ msgstr "Web" msgid "Launch" msgstr "Start" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Skrivebord" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "Linux|GNU" @@ -10459,6 +10569,9 @@ msgstr "før avinstallering av {app_id}" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "I 24-timersformat." diff --git a/plinth/locale/nl/LC_MESSAGES/django.po b/plinth/locale/nl/LC_MESSAGES/django.po index c02ac193f..38e986e12 100644 --- a/plinth/locale/nl/LC_MESSAGES/django.po +++ b/plinth/locale/nl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-24 23:26+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Dutch restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "GNOME Bestanden" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Desktop" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Tor Browser" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Software bijwerken" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3104,7 +3169,7 @@ msgstr "Feedback indienen" msgid "Contribute" msgstr "Bijdragen" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3666,7 +3731,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "JavaScript licentie-informatie" @@ -5409,7 +5474,7 @@ msgstr "Wijzig verbinding" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Wijzig" @@ -6150,7 +6215,7 @@ msgstr "Verbinding {name} verwijderd." msgid "Failed to delete connection: Connection not found." msgstr "Kan verbinding niet verwijderen: Verbinding niet gevonden." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6159,13 +6224,13 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "Alle gebruikers van {box_name} kunnen Nextcloud gebruiken. Om " "administratieve " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6174,7 +6239,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -6236,7 +6301,7 @@ msgstr "Bestandssysteem" msgid "Sharing" msgstr "Delen" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Group Share" msgid "Groupware" @@ -6589,8 +6654,8 @@ msgstr "Herstart" msgid "Shutdown" msgstr "Uitschakelen" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Herstarten" @@ -6863,7 +6928,7 @@ msgstr "" msgid "Access rights" msgstr "Toegangsrechten" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6877,7 +6942,7 @@ msgstr "" "en je gebruikersnaam in. DAVx5 toont alle bestaande kalenders en adresboeken " "en kan nieuwe maken." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "GNOME Kalender" @@ -6915,11 +6980,11 @@ msgstr "GNOME Kalender" msgid "Contacts" msgstr "Contacten" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "CalDAV" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "CardDAV" @@ -7014,8 +7079,8 @@ msgid "" "href=\"{ttrss_url}\">Tiny Tiny RSS to follow various websites. When " "adding a feed, enable authentication and use your {box_name} credentials." msgstr "" -"RSS-Bridge wordt met Miniflux of Tiny Tiny RSS gebruikt om verschillende websites te " +"RSS-Bridge wordt met Miniflux of Tiny Tiny RSS gebruikt om verschillende websites te " "volgen. Schakel bij het toevoegen van een feed authenticatie in en gebruik " "de {box_name}-inloggegevens." @@ -7936,6 +8001,55 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "Terugdraaien naar Snapshot" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "Email" +msgid "Webmail" +msgstr "Email" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "GNOME Calendar" +msgid "Calender" +msgstr "GNOME Kalender" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Adres" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10026,35 +10140,35 @@ msgstr "" "gegevenseigendom. Het is gratis software waarmee u eenvoudig server-apps " "kunt installeren en beheren." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Startpagina" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Toepassingen" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Systeem" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Wijzig wachtwoord" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Uitschakelen" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Afmelden" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Selecteer taal" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Aanmelden" @@ -10074,10 +10188,6 @@ msgstr "Web" msgid "Launch" msgstr "Starten" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Desktop" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10291,6 +10401,9 @@ msgstr "voor het verwijderen van {app_id}" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "In 24-uurs formaat." diff --git a/plinth/locale/pl/LC_MESSAGES/django.po b/plinth/locale/pl/LC_MESSAGES/django.po index 01a490f36..f603b1831 100644 --- a/plinth/locale/pl/LC_MESSAGES/django.po +++ b/plinth/locale/pl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2024-07-13 12:09+0000\n" "Last-Translator: Monika \n" "Language-Team: Polish restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +#, fuzzy +#| msgid "Chat Client" +msgid "Desktop" +msgstr "Klient czatu" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Archive deleted." +msgid "Software store" +msgstr "Archiwum zostało usunięte." + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3172,7 +3235,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3662,7 +3725,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Informacje o licencji JavaScript" @@ -5248,7 +5311,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5967,7 +6030,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5976,11 +6039,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5989,7 +6052,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -6045,7 +6108,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -6348,8 +6411,8 @@ msgstr "" msgid "Shutdown" msgstr "Wyłącz" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Uruchom ponownie" @@ -6574,7 +6637,7 @@ msgstr "" msgid "Access rights" msgstr "Dostęp" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6585,7 +6648,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6615,11 +6678,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7547,6 +7610,53 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "FairEmail" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "IP addresses" +msgid "Address book" +msgstr "Adresy IP" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9529,37 +9639,37 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Dom" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Aplikacje" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Zmień hasło" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Wyłącz" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Wyloguj się" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 #, fuzzy #| msgid "Language" msgid "Select language" msgstr "Język" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Zaloguj się" @@ -9581,12 +9691,6 @@ msgstr "" msgid "Launch" msgstr "Uruchom" -#: templates/clients.html:42 -#, fuzzy -#| msgid "Chat Client" -msgid "Desktop" -msgstr "Klient czatu" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -9804,6 +9908,9 @@ msgstr "" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #, fuzzy, python-brace-format #~| msgid "" #~| "Optional Value. If your {box_name} is not connected directly to the " diff --git a/plinth/locale/pt/LC_MESSAGES/django.po b/plinth/locale/pt/LC_MESSAGES/django.po index e80ab35cd..3d39c09c8 100644 --- a/plinth/locale/pt/LC_MESSAGES/django.po +++ b/plinth/locale/pt/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2023-05-22 15:50+0000\n" "Last-Translator: Frederico Gomes \n" "Language-Team: Portuguese restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Ambiente de trabalho" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Atualização de software" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3057,7 +3118,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3533,7 +3594,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -5118,7 +5179,7 @@ msgstr "Editar ligação" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Editar" @@ -5839,7 +5900,7 @@ msgstr "Ligação {name} eliminada." msgid "Failed to delete connection: Connection not found." msgstr "Falha ao eliminar a ligação: Ligação não encontrada." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5848,11 +5909,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5861,7 +5922,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5917,7 +5978,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -6231,8 +6292,8 @@ msgstr "" msgid "Shutdown" msgstr "Desligar" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6450,7 +6511,7 @@ msgstr "" msgid "Access rights" msgstr "Aceder" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6461,7 +6522,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6491,11 +6552,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7388,6 +7449,53 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "FairEmail" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Endereço" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9285,35 +9393,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Início" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Aplicações" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Sistema" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Alterar palavra-passe" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Desligar" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Terminar sessão" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Selecionar idioma" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Iniciar sessão" @@ -9333,10 +9441,6 @@ msgstr "Web" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Ambiente de trabalho" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -9540,6 +9644,9 @@ msgstr "" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "Em formato de 24 horas." diff --git a/plinth/locale/ru/LC_MESSAGES/django.po b/plinth/locale/ru/LC_MESSAGES/django.po index 534071464..a70c0ba11 100644 --- a/plinth/locale/ru/LC_MESSAGES/django.po +++ b/plinth/locale/ru/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-14 01:32+0000\n" "Last-Translator: gfbdrgng \n" "Language-Team: Russian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "Файлы GNOME" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Десктоп" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Tor Browser" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Обновление программного обеспечения" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3099,7 +3164,7 @@ msgstr "Отправить отзыв" msgid "Contribute" msgstr "Помощь проекту" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3646,7 +3711,7 @@ msgid "Web conference" msgstr "Веб-конференция" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Информация о лицензии JavaScript" @@ -5385,7 +5450,7 @@ msgstr "Редактирование подключения" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Редактировать" @@ -6127,7 +6192,7 @@ msgstr "Подключение {name} удалено." msgid "Failed to delete connection: Connection not found." msgstr "Не удалось удалить подключение: соединение не найдено." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6141,13 +6206,13 @@ msgstr "" "настольных компьютеров и мобильных клиентов. Сервер NextCloud предоставляет " "хорошо интегрированный веб-интерфейс." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "Все пользователи FreedomBox могут использовать Nextcloud. Для выполнения " "административных " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6160,7 +6225,7 @@ msgstr "" "качества, конфиденциальности и юридические проверки осуществляются проектом, " "а не Debian/{box_name}. Обновления выполняются по независимому циклу." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 #, fuzzy #| msgid "Next" @@ -6222,7 +6287,7 @@ msgstr "Синхронизация файлов" msgid "Sharing" msgstr "Общий доступ" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "Групповое ПО" @@ -6561,8 +6626,8 @@ msgstr "Перезагрузка" msgid "Shutdown" msgstr "Выключить" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Перезапустить" @@ -6835,7 +6900,7 @@ msgstr "" msgid "Access rights" msgstr "Права доступа" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6849,7 +6914,7 @@ msgstr "" "address) и ваше имя пользователя. DAVx5 покажет все существующие календари и " "адресные книги, и вы сможете создать новые." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "GNOME календарь" @@ -6886,12 +6951,12 @@ msgstr "Календарь" msgid "Contacts" msgstr "Контакты" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 #, fuzzy msgid "CalDAV" msgstr "CalDAV" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 #, fuzzy msgid "CardDAV" msgstr "CardDAV" @@ -7885,6 +7950,55 @@ msgstr "Необходимо перезагрузить систему для з msgid "Rollback to Snapshot" msgstr "Откат к снимку" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "Email" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "Calendar" +msgid "Calender" +msgstr "Календарь" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Адрес" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9957,35 +10071,35 @@ msgstr "" "обеспечение, позволяющее легко устанавливать серверные приложения и " "управлять ими." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Домой" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Приложения" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Система" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Изменить пароль" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Завершить работу" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Выход" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Выберите язык" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Войти" @@ -10005,10 +10119,6 @@ msgstr "Веб" msgid "Launch" msgstr "Запустить" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Десктоп" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10223,6 +10333,9 @@ msgstr "перед удалением {app_id}" msgid "Gujarati" msgstr "Гуджарати" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "В 24-часовом формате." diff --git a/plinth/locale/si/LC_MESSAGES/django.po b/plinth/locale/si/LC_MESSAGES/django.po index bdc28a0f2..51372003f 100644 --- a/plinth/locale/si/LC_MESSAGES/django.po +++ b/plinth/locale/si/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2021-04-27 13:32+0000\n" "Last-Translator: HelaBasa \n" "Language-Team: Sinhala restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2794,7 +2851,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3251,7 +3308,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4709,7 +4766,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5400,7 +5457,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5409,11 +5466,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5422,7 +5479,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5472,7 +5529,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5767,8 +5824,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -5978,7 +6035,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -5989,7 +6046,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6019,11 +6076,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -6882,6 +6939,49 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8676,35 +8776,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -8724,10 +8824,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/sl/LC_MESSAGES/django.po b/plinth/locale/sl/LC_MESSAGES/django.po index eb7953e0b..86b0af694 100644 --- a/plinth/locale/sl/LC_MESSAGES/django.po +++ b/plinth/locale/sl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Slovenian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Archive deleted." +msgid "Software store" +msgstr "Arhiv je izbrisan." + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3035,7 +3096,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3493,7 +3554,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -5017,7 +5078,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5722,7 +5783,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5731,11 +5792,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5744,7 +5805,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5798,7 +5859,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -6097,8 +6158,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6310,7 +6371,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6321,7 +6382,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6351,11 +6412,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7247,6 +7308,51 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "FairEmail" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +msgid "Address book" +msgstr "" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9142,35 +9248,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -9190,10 +9296,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" @@ -9394,6 +9496,9 @@ msgstr "" msgid "Gujarati" msgstr "" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #, fuzzy #~| msgid "Create new repository" #~ msgid "Manage Aliases for Mailbox" diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index 9fb04822a..2bfe82c30 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-15 04:00+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian kërkim Reverse DNS. Kjo s’është e detyrueshme, por, përmirëson fort shkallën e dërgimit të " -"email-eve. Reverse DNS s’është formësuar atje ku është formësuar DNS-ja juaj " -"e rregull. Duhet të kërkoni për të te rregullimet e VPS/ISP-së tuaj. Disa " -"furnizues e paraformësojnë pjesën e adresës IP për ju dhe ju duhet vetëm të " -"ujdisni pjesën e përkatësisë. Kërkim Revese DNS mund të ketë të formësuar " -"vetëm një nga përkatësitë tuaja, veç në paçi adresa të shumta publike IP." +"duhet të formësoni kërkim Reverse DNS. Kjo s’është e detyrueshme, " +"por, përmirëson fort shkallën e dërgimit të email-eve. Reverse DNS s’është " +"formësuar atje ku është formësuar DNS-ja juaj e rregull. Duhet të kërkoni " +"për të te rregullimet e VPS/ISP-së tuaj. Disa furnizues e paraformësojnë " +"pjesën e adresës IP për ju dhe ju duhet vetëm të ujdisni pjesën e " +"përkatësisë. Kërkim Revese DNS mund të ketë të formësuar vetëm një nga " +"përkatësitë tuaja, veç në paçi adresa të shumta publike IP." #: modules/email/templates/email-dns.html:66 msgid "" @@ -3066,6 +3069,68 @@ msgstr "Depoja u përpunua." msgid "Edit repository" msgstr "Përpunoni depon" +#: modules/gnome/__init__.py:18 +msgid "" +"GNOME is a desktop environment that focuses on simplicity and ease of use." +msgstr "" + +#: modules/gnome/__init__.py:21 +#, python-brace-format +msgid "" +"This app turns your {box_name} into a desktop computer if you physically " +"connect a monitor, a keyboard, and a mouse to it. A browser, an office " +"suite, and other basic utilities are available. You may install further " +"graphical applications using the software center provided within." +msgstr "" + +#: modules/gnome/__init__.py:26 +msgid "" +"This app is not suitable for low-end hardware. It requires at least 4GiB of " +"RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." +msgstr "" + +#: modules/gnome/__init__.py:30 +#, python-brace-format +msgid "" +"After installing, enabling, disabling, or uninstalling the app, you will " +"need to restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "Kartela GNOME" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Desktop" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Shfletuesi Tor" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Përditësim Software-i" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3095,7 +3160,7 @@ msgstr "Parashtroni Përshtypjet" msgid "Contribute" msgstr "Jepni Ndihmesë" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3650,7 +3715,7 @@ msgid "Web conference" msgstr "Konferencë Web" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Hollësi licence JavaScript" @@ -5379,7 +5444,7 @@ msgstr "Përpunoni lidhjen" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Përpunoni" @@ -6121,7 +6186,7 @@ msgstr "Lidhja {name} u fshi." msgid "Failed to delete connection: Connection not found." msgstr "S’u arrit të fshihet lidhje: S’u gjet lidhje." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6135,13 +6200,13 @@ msgstr "" "klient për kompjutera desktop dhe klientë celulari. Shërbyesi Nextcloud " "furnizon një ndërfaqe web të integruar paq." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "Nextcloud-in mund ta përdorin krejt përdoruesit e FreedomBox-it. Për të " "kryer veprime administrative " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6154,7 +6219,7 @@ msgstr "" "dhe shqyrtimet ligjore bëhen nga projekti përkatës dhe jo nga Debian/" "{box_name}. Përditësimet kryhen duke ndjekur një cikël të pavarur." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -6214,7 +6279,7 @@ msgstr "Njëkohësim kartelash" msgid "Sharing" msgstr "Dhënie" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -6556,8 +6621,8 @@ msgstr "Rinisu" msgid "Shutdown" msgstr "Fike" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Rinise" @@ -6828,7 +6893,7 @@ msgstr "" msgid "Access rights" msgstr "Të drejta hyrjeje" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6842,7 +6907,7 @@ msgstr "" "it.tuaj>) dhe emrin tuaj si përdorues. DAVx5 do të shfaqë krejt " "kalendarët ekzistues dhe librat e adresave dhe mund të krijoni të rinj." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "Kalendar Gnome" @@ -6878,11 +6943,11 @@ msgstr "Kalendar" msgid "Contacts" msgstr "Kontakte" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "CalDAV" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "CardDAV" @@ -7879,6 +7944,55 @@ msgstr "Që të plotësohet prapakthimi, duhet rinisur sistemi." msgid "Rollback to Snapshot" msgstr "Prapaktheje te Fotografim" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "Email" +msgid "Webmail" +msgstr "Email" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "Calendar" +msgid "Calender" +msgstr "Kalendar" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Adresë" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9951,35 +10065,35 @@ msgstr "" "pronësi të dhënash. Është software i lirë, që ju lejon të instaloni dhe " "administroni kollaj aplikacione shërbyesi." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Kreu" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Aplikacione" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Sistem" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Ndryshoni fjalëkalimin" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Fike" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Dil" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Përzgjidhni gjuhën" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Hyni" @@ -9999,10 +10113,6 @@ msgstr "Web" msgid "Launch" msgstr "Nise" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Desktop" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10216,6 +10326,9 @@ msgstr "para çinstalimit të {app_id}" msgid "Gujarati" msgstr "Gujaratase" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "Në format 24 orësh." diff --git a/plinth/locale/sr/LC_MESSAGES/django.po b/plinth/locale/sr/LC_MESSAGES/django.po index 38a986a16..ed934243f 100644 --- a/plinth/locale/sr/LC_MESSAGES/django.po +++ b/plinth/locale/sr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Serbian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2939,7 +2998,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3400,7 +3459,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4912,7 +4971,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5613,7 +5672,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5622,11 +5681,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5635,7 +5694,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5689,7 +5748,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -5986,8 +6045,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6201,7 +6260,7 @@ msgstr "" msgid "Access rights" msgstr "Pristup" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6212,7 +6271,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6242,11 +6301,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7130,6 +7189,53 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "FairEmail" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "IP addresses" +msgid "Address book" +msgstr "IP adrese" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8959,35 +9065,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -9007,10 +9113,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" @@ -9210,6 +9312,9 @@ msgstr "" msgid "Gujarati" msgstr "" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "Domain Name Server" #~ msgstr "Domain Name Server" diff --git a/plinth/locale/sv/LC_MESSAGES/django.po b/plinth/locale/sv/LC_MESSAGES/django.po index d6cc13a3a..a3925bd2b 100644 --- a/plinth/locale/sv/LC_MESSAGES/django.po +++ b/plinth/locale/sv/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2024-07-30 01:31+0000\n" "Last-Translator: bittin1ddc447d824349b2 \n" "Language-Team: Swedish restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "GNOME Filer" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Skrivbord" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "TOR Browser" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Mjukvaruuppdatering" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3144,7 +3209,7 @@ msgstr "Skicka feedback" msgid "Contribute" msgstr "Bidrar" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3703,7 +3768,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "JavaScript-licensinformation" @@ -5497,7 +5562,7 @@ msgstr "Redigera anslutning" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Redigera" @@ -6251,7 +6316,7 @@ msgstr "Anslutning {name} borttagen." msgid "Failed to delete connection: Connection not found." msgstr "Det gick inte att ta bort anslutning: Anslutning hittades inte." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6265,13 +6330,13 @@ msgstr "" "datorer och mobila klienter. Nextcloud-servern tillhandahåller ett väl " "integrerat webbgränssnitt." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "Alla användare av FreedomBox kan använda Nextcloud. För att utföra " "administrativa " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6284,7 +6349,7 @@ msgstr "" "juridiska granskningar görs av uppströmsprojektet och inte av Debian/" "{box_name}. Uppdateringar utförs enligt en oberoende cykel." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -6343,7 +6408,7 @@ msgstr "" msgid "Sharing" msgstr "Sharing" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Group Share" msgid "Groupware" @@ -6701,8 +6766,8 @@ msgstr "" msgid "Shutdown" msgstr "Stänga ner" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Starta om" @@ -6972,7 +7037,7 @@ msgstr "" msgid "Access rights" msgstr "Tillträdesrätt" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6986,7 +7051,7 @@ msgstr "" "address>) och ditt användarnamn. DAVx5 kommer att visa alla befintliga " "kalendrar och adressböcker och du kan skapa nya." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "GNOME-kalender" @@ -7024,11 +7089,11 @@ msgstr "GNOME-kalender" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -8041,6 +8106,55 @@ msgstr "Systemet måste startas om för att slutföra återställningen." msgid "Rollback to Snapshot" msgstr "Återställning till ögonblicksbild" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +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" +msgid "Address book" +msgstr "Adress" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10120,35 +10234,35 @@ msgstr "" "Det är gratis programvara som låter dig enkelt installera och hantera " "serverappar." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Hem" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Appar" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " System" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Ändra lösenord" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Stänga ner" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Logga ut" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Välj språk" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Logga in" @@ -10168,10 +10282,6 @@ msgstr "Webb" msgid "Launch" msgstr "Starta" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Skrivbord" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10387,6 +10497,9 @@ msgstr "innan du avinstallerar {app_id}" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "I 24-timmarsformat." diff --git a/plinth/locale/ta/LC_MESSAGES/django.po b/plinth/locale/ta/LC_MESSAGES/django.po index 005bef880..4193e14d9 100644 --- a/plinth/locale/ta/LC_MESSAGES/django.po +++ b/plinth/locale/ta/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2024-12-27 01:03+0000\n" "Last-Translator: James Valleroy \n" "Language-Team: Tamil restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "சினோம் கோப்புகள்" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "டெச்க்டாப்" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "டோர் உலாவி" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "மென்பொருள் புதுப்பிப்பு" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3082,7 +3147,7 @@ msgstr "கருத்துக்களை சமர்ப்பிக்க msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3622,7 +3687,7 @@ msgid "Web conference" msgstr "வலை மாநாடு" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "சாவாச்கிரிப்ட் உரிம செய்தி" @@ -5319,7 +5384,7 @@ msgstr "இணைப்பைத் திருத்து" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "தொகு" @@ -6053,7 +6118,7 @@ msgstr "இணைப்பு {name} நீக்கப்பட்டது." msgid "Failed to delete connection: Connection not found." msgstr "இணைப்பை நீக்குவதில் தோல்வி: இணைப்பு கிடைக்கவில்லை." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6067,12 +6132,12 @@ msgstr "" "பயன்பாடுகள் மற்றும் மொபைல் கிளையண்டுகள் ஆகியவை அடங்கும். நெக்ச்ட் முகில் சேவையகம் நன்கு " "ஒருங்கிணைந்த வலை இடைமுகத்தை வழங்குகிறது." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "ஃப்ரீடோம்பாக்சின் அனைத்து பயனர்களும் நெக்ச்ட் கிளவுட்டைப் பயன்படுத்தலாம். நிர்வாகம் செய்ய " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6085,7 +6150,7 @@ msgstr "" "திட்டத்தால் செய்யப்படுகின்றன, ஆனால் டெபியன்/{box_name} ஆல் அல்ல. சுயாதீன சுழற்சியைத் " "தொடர்ந்து புதுப்பிப்புகள் செய்யப்படுகின்றன." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "அடுத்த முகில்" @@ -6145,7 +6210,7 @@ msgstr "கோப்பு ஒத்திசைவு" msgid "Sharing" msgstr "பகிர்வு" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "குழுக்கள்" @@ -6485,8 +6550,8 @@ msgstr "" msgid "Shutdown" msgstr "மூடு" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "மறுதொடக்கம்" @@ -6749,7 +6814,7 @@ msgstr "" msgid "Access rights" msgstr "அணுகல் உரிமைகள்" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "டேவ்எக்ச் 5" @@ -6762,7 +6827,7 @@ msgstr "" "ரேடிகல் சேவையகத்தின் முகவரி ஐ உள்ளிடவும் (எ.கா. DAVX5 தற்போதுள்ள அனைத்து " "காலெண்டர்களையும் முகவரி புத்தகங்களையும் காண்பிக்கும், மேலும் நீங்கள் புதியதாக உருவாக்கலாம்." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "க்னோம் காலண்டர்" @@ -6797,11 +6862,11 @@ msgstr "நாட்காட்டி" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "கால்டாவ்" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "கார்டாவ்" @@ -7784,6 +7849,53 @@ msgstr "ரோல்பேக்கை முடிக்க கணினி ம msgid "Rollback to Snapshot" msgstr "ச்னாப்சாட்டுக்கு ரோல்பேக்" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "Calendar" +msgid "Calender" +msgstr "நாட்காட்டி" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "முகவரி" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9834,35 +9946,35 @@ msgstr "" "சேவையகமாகும். இது இலவச மென்பொருளாகும், இது சேவையக பயன்பாடுகளை எளிதாக நிறுவவும் " "நிர்வகிக்கவும் உங்களை அனுமதிக்கிறது." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " வீடு" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " பயன்பாடுகள்" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " அமைப்பு" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "கடவுச்சொல்லை மாற்றவும்" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "மூடு" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "விடுபதிகை" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "மொழியைத் தேர்ந்தெடுக்கவும்" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "புகுபதிகை" @@ -9882,10 +9994,6 @@ msgstr "விரலிடைத் தோல்" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "டெச்க்டாப்" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "குனு/லினக்ச்" @@ -10096,6 +10204,9 @@ msgstr "{app_id} ஐ நிறுவல் நீக்குவதற்கு msgid "Gujarati" msgstr "குசராத்தி" +#~ msgid "K-9 Mail" +#~ msgstr "கே -9 மே மாதம்" + #~ msgid "In 24 hour format." #~ msgstr "24 மணி நேர வடிவத்தில்." diff --git a/plinth/locale/te/LC_MESSAGES/django.po b/plinth/locale/te/LC_MESSAGES/django.po index 2b5fa2450..cf70338f2 100644 --- a/plinth/locale/te/LC_MESSAGES/django.po +++ b/plinth/locale/te/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2024-12-26 01:00+0000\n" "Last-Translator: Joseph Nuthalapati \n" "Language-Team: Telugu restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "GNOME దస్త్రం" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "రంగస్థలం" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "టార్ బ్రౌజర్" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "సాఫ్ట్‌వేర్ నవీకరణ" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3089,7 +3154,7 @@ msgstr "అభిప్రాయాన్ని సమర్పించండ msgid "Contribute" msgstr "దోహదం చేయండి" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3632,7 +3697,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "జావాస్క్రిప్ట్ లైసెన్స్ సమాచరం" @@ -5352,7 +5417,7 @@ msgstr "అనుసంధానాన్ని సవరించు" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "సవరించు" @@ -6092,7 +6157,7 @@ msgstr "{name} అనుసంధానం తొలగించబడింద msgid "Failed to delete connection: Connection not found." msgstr "అనుసంధానం తొలగించడం విఫలమైంది: అనుసంధానం దొరకలేదు." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6101,11 +6166,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6114,7 +6179,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 #, fuzzy #| msgid "Next" @@ -6191,7 +6256,7 @@ msgstr "వ్యవస్థ" msgid "Sharing" msgstr "భాగస్వామ్యం" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Group Share" msgid "Groupware" @@ -6535,8 +6600,8 @@ msgstr "" msgid "Shutdown" msgstr "మూసివేయి" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "పునఃప్రారంభించండి" @@ -6803,7 +6868,7 @@ msgstr "" msgid "Access rights" msgstr "సాంగత్యం హక్కులు" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6817,7 +6882,7 @@ msgstr "" "పేరును నమోదు చేయండి. DAVx5 ఇప్పటికే ఉన్న అన్ని క్యాలెండర్‌లు మరియు చిరునామా పుస్తకాలను చూపుతుంది " "మరియు మీరు కొత్తదాన్ని సృష్టించవచ్చు ." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "కేలండర్" @@ -6855,11 +6920,11 @@ msgstr "కేలండర్" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7862,6 +7927,55 @@ msgstr "రొల్ల్బచ్క్ ని పూర్తి చేయడ msgid "Rollback to Snapshot" msgstr "చాయాచిత్రం కు రొల్ల్బచ్క్ చేయండి" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "ఫెయిర్ఇమెయిల్" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "GNOME Calendar" +msgid "Calender" +msgstr "కేలండర్" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "చిరునామా" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9908,35 +10022,35 @@ msgstr "" "FreedomBox అనేది గోప్యత మరియు డేటా యాజమాన్యం కోసం రూపొందించబడిన వ్యక్తిగత సర్వర్. ఇది సర్వర్ యాప్‌లను " "సులభంగా ఇన్‌స్టాల్ చేయడానికి మరియు నిర్వహించడానికి మిమ్మల్ని అనుమతించే ఉచిత సాఫ్ట్‌వేర్." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " నివాసం" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " కార్యక్షేత్రం" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " కార్యవ్యవస్థ" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "రహస్యపదాన్ని మార్చు" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "మూసివేయి" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "నిష్క్రమించు" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "బాషను ఎంచుకోండి" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "లోనికి ప్రవేశించండి" @@ -9956,10 +10070,6 @@ msgstr "వెబ్" msgid "Launch" msgstr "ప్రారంభించు" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "రంగస్థలం" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "గ్నూ/లినక్స్" @@ -10176,6 +10286,9 @@ msgstr "{app_id} ని అన్ఇన్‌స్టాల్ చేయడా msgid "Gujarati" msgstr "గుజరాతీ" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 మెయిల్" + #~ msgid "In 24 hour format." #~ msgstr "24 గంటల ఆకృతిలో." diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index 9be2476c7..09adfc4fa 100644 --- a/plinth/locale/tr/LC_MESSAGES/django.po +++ b/plinth/locale/tr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-15 04:00+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "GNOME Dosyaları" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Masaüstü" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Tor Tarayıcı" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Yazılım Güncellemesi" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3079,7 +3144,7 @@ msgstr "Geri Bildirim Gönder" msgid "Contribute" msgstr "Katkıda Bulun" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3626,7 +3691,7 @@ msgid "Web conference" msgstr "Web görüşme" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "JavaScript lisans bilgileri" @@ -5347,7 +5412,7 @@ msgstr "Bağlantıyı düzenle" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Düzenle" @@ -6085,7 +6150,7 @@ msgstr "{name} bağlantısı silindi." msgid "Failed to delete connection: Connection not found." msgstr "Bağlantının silinmesi başarısız oldu: Bağlantı bulunamadı." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6099,13 +6164,13 @@ msgstr "" "istemci uygulamalarını ve mobil istemcileri içerir. Nextcloud sunucusu iyi " "bütünleştirilmiş bir web arayüzü sağlar." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "FreedomBox'ın tüm kullanıcıları Nextcloud'u kullanabilir. Yönetimsel " "işlemleri gerçekleştirmek için " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6119,7 +6184,7 @@ msgstr "" "yöndeki proje tarafından yapılır. Güncellemeler bağımsız bir döngünün " "ardından gerçekleştirilir." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -6179,7 +6244,7 @@ msgstr "Dosya eşitleme" msgid "Sharing" msgstr "Paylaşım" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "Grup yazılımı" @@ -6516,8 +6581,8 @@ msgstr "Baştan başlat" msgid "Shutdown" msgstr "Kapat" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Yeniden başlat" @@ -6786,7 +6851,7 @@ msgstr "" msgid "Access rights" msgstr "Erişim hakları" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6800,7 +6865,7 @@ msgstr "" "kullanıcı adınızı girin. DAVx5, varolan tüm takvimleri ve adres defterlerini " "gösterecek ve yenilerini oluşturabilirsiniz." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "GNOME Takvim" @@ -6836,11 +6901,11 @@ msgstr "Takvim" msgid "Contacts" msgstr "Kişiler" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "CalDAV" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "CardDAV" @@ -7832,6 +7897,55 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "Anlık Görüntüye Geri Al" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "Email" +msgid "Webmail" +msgstr "E-posta" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "Calendar" +msgid "Calender" +msgstr "Takvim" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Adres" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9892,35 +10006,35 @@ msgstr "" "sunucudur. Sunucu uygulamalarını kolaylıkla yüklemenizi ve yönetmenizi " "sağlayan özgür bir yazılımdır." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Giriş" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Uygulamalar" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Sistem" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Parolayı değiştir" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Kapat" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Oturumu kapat" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Dil seçin" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Oturum aç" @@ -9940,10 +10054,6 @@ msgstr "Web" msgid "Launch" msgstr "Başlat" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Masaüstü" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10156,6 +10266,9 @@ msgstr "{app_id} kaldırılmadan önce" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "24 saat biçiminde." diff --git a/plinth/locale/uk/LC_MESSAGES/django.po b/plinth/locale/uk/LC_MESSAGES/django.po index 1e2c56546..1d2c6e88f 100644 --- a/plinth/locale/uk/LC_MESSAGES/django.po +++ b/plinth/locale/uk/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2024-10-21 23:16+0000\n" "Last-Translator: Ihor Hordiichuk \n" "Language-Team: Ukrainian restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +#, fuzzy +#| msgid "GNOME Files" +msgid "GNOME" +msgstr "Файли GNOME" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "Стільниця" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "Tor Browser" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "Оновлення ПЗ" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3139,7 +3204,7 @@ msgstr "Надіслати відгук" msgid "Contribute" msgstr "Співпрацювати" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3700,7 +3765,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "Інформація про ліцензію JavaScript" @@ -5482,7 +5547,7 @@ msgstr "Змінити зʼєднання" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "Зміни" @@ -6234,7 +6299,7 @@ msgstr "Зʼєднання {name} видалено." msgid "Failed to delete connection: Connection not found." msgstr "Не вдалося видалити зʼєднання: Зʼєднання не знайдено." -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -6248,13 +6313,13 @@ msgstr "" "настільних комп'ютерів та мобільні клієнти. Сервер Nextcloud має добре " "інтегрований вебінтерфейс." -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" "Усі користувачі FreedomBox можуть використовувати Nextcloud. Для виконання " "адміністративних " -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -6267,7 +6332,7 @@ msgstr "" "перевірки здійснюються проєктом, а не Debian/{box_name}. Оновлення " "виконуються за незалежним циклом." -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "Nextcloud" @@ -6326,7 +6391,7 @@ msgstr "" msgid "Sharing" msgstr "Обмін" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 #, fuzzy #| msgid "Group Share" msgid "Groupware" @@ -6680,8 +6745,8 @@ msgstr "" msgid "Shutdown" msgstr "Вимкнути" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "Перезапустити" @@ -6951,7 +7016,7 @@ msgstr "" msgid "Access rights" msgstr "Права доступу" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "DAVx5" @@ -6965,7 +7030,7 @@ msgstr "" "скринька>) та своє ім'я користувача. DAVx5 покаже всі наявні календарі та " "адресні книги, і ви зможете створити нові." -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "Календар GNOME" @@ -7003,11 +7068,11 @@ msgstr "Календар GNOME" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -8026,6 +8091,55 @@ msgstr "Систему потрібно перезапустити, щоб за msgid "Rollback to Snapshot" msgstr "Повернутися до знімка" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "FairEmail" + +#: modules/sogo/manifest.py:73 +#, fuzzy +#| msgid "GNOME Calendar" +msgid "Calender" +msgstr "Календар GNOME" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "Адреса" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -10096,35 +10210,35 @@ msgstr "" "конфіденційності та володіння даними. Це безплатне програмне забезпечення, " "яке дозволяє легко встановлювати та керувати серверними програмами." -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " Домівка" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " Застосунки" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " Система" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "Змінити пароль" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "Вимкнути" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "Вийти" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "Вибрати мову" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "Увійти" @@ -10144,10 +10258,6 @@ msgstr "Веб" msgid "Launch" msgstr "Запустити" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "Стільниця" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" @@ -10361,6 +10471,9 @@ msgstr "перед видаленням {app_id}" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 Mail" + #~ msgid "In 24 hour format." #~ msgstr "У форматі 24-години." diff --git a/plinth/locale/vi/LC_MESSAGES/django.po b/plinth/locale/vi/LC_MESSAGES/django.po index 240c066d3..94f72715f 100644 --- a/plinth/locale/vi/LC_MESSAGES/django.po +++ b/plinth/locale/vi/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2021-07-28 08:34+0000\n" "Last-Translator: bruh \n" "Language-Team: Vietnamese restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -3077,7 +3134,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3538,7 +3595,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -5068,7 +5125,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5761,7 +5818,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5770,11 +5827,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5783,7 +5840,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5839,7 +5896,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -6136,8 +6193,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6351,7 +6408,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6362,7 +6419,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6392,11 +6449,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7272,6 +7329,51 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "IP addresses" +msgid "Address book" +msgstr "Địa chỉ IP" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -9106,35 +9208,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -9154,10 +9256,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po index 52f2a9328..cea2289a8 100644 --- a/plinth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hans/LC_MESSAGES/django.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: Plinth\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-15 04:00+0000\n" -"Last-Translator: 大王叫我来巡山 " -"\n" +"Last-Translator: 大王叫我来巡山 \n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans\n" @@ -98,15 +98,15 @@ msgstr "此 web 管理界面的语言" msgid "Use the language preference set in the browser" msgstr "使用浏览器中设置的语言首选项" -#: menu.py:116 templates/base.html:121 +#: menu.py:116 templates/base.html:120 msgid "Home" msgstr "主页" -#: menu.py:117 templates/base.html:130 +#: menu.py:117 templates/base.html:129 msgid "Apps" msgstr "应用程序" -#: menu.py:119 menu.py:126 templates/base.html:139 +#: menu.py:119 menu.py:126 templates/base.html:138 msgid "System" msgstr "系统" @@ -1105,8 +1105,9 @@ msgstr "刷新 IP 地址和域" #: modules/privacy/views.py:55 modules/quassel/views.py:29 #: modules/roundcube/views.py:32 modules/rssbridge/views.py:31 #: modules/shadowsocks/views.py:52 modules/shadowsocksserver/views.py:48 -#: modules/ssh/views.py:62 modules/transmission/views.py:43 -#: modules/ttrss/views.py:31 modules/wordpress/views.py:31 +#: modules/sogo/views.py:32 modules/ssh/views.py:62 +#: modules/transmission/views.py:43 modules/ttrss/views.py:31 +#: modules/wordpress/views.py:31 msgid "Configuration updated" msgstr "配置已更新" @@ -1887,7 +1888,7 @@ msgstr "" #: modules/dynamicdns/templates/dynamicdns.html:23 #: modules/email/templates/email-dns.html:22 #: modules/letsencrypt/templates/letsencrypt.html:24 -#: modules/mediawiki/forms.py:64 +#: modules/mediawiki/forms.py:64 modules/sogo/forms.py:18 msgid "Domain" msgstr "域名" @@ -2167,7 +2168,7 @@ msgstr "我的邮箱别名" msgid "Primary domain" msgstr "主域名" -#: modules/email/forms.py:27 +#: modules/email/forms.py:27 modules/sogo/forms.py:20 msgid "" "Mails are received for all domains configured in the system. Among these, " "select the most important one." @@ -2203,7 +2204,7 @@ msgid "Thunderbird" msgstr "" #: modules/email/manifest.py:37 -msgid "K-9 Mail" +msgid "Thunderbird Mobile" msgstr "" #: modules/email/manifest.py:52 @@ -2867,6 +2868,66 @@ msgstr "已编辑储存库。" msgid "Edit repository" msgstr "编辑存储库" +#: modules/gnome/__init__.py:18 +msgid "" +"GNOME is a desktop environment that focuses on simplicity and ease of use." +msgstr "" + +#: modules/gnome/__init__.py:21 +#, python-brace-format +msgid "" +"This app turns your {box_name} into a desktop computer if you physically " +"connect a monitor, a keyboard, and a mouse to it. A browser, an office " +"suite, and other basic utilities are available. You may install further " +"graphical applications using the software center provided within." +msgstr "" + +#: modules/gnome/__init__.py:26 +msgid "" +"This app is not suitable for low-end hardware. It requires at least 4GiB of " +"RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." +msgstr "" + +#: modules/gnome/__init__.py:30 +#, python-brace-format +msgid "" +"After installing, enabling, disabling, or uninstalling the app, you will " +"need to restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "桌面端" + +#: modules/gnome/manifest.py:10 +#, fuzzy +#| msgid "Tor Browser" +msgid "Browser" +msgstr "洋葱浏览器" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +#, fuzzy +#| msgid "Software Update" +msgid "Software store" +msgstr "软件更新" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2896,7 +2957,7 @@ msgstr "" msgid "Contribute" msgstr "贡献" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3382,7 +3443,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4872,7 +4933,7 @@ msgstr "编辑连接" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "編輯" @@ -5567,7 +5628,7 @@ msgstr "连接 {name} 已删除。" msgid "Failed to delete connection: Connection not found." msgstr "删除连接失败: 找不到连接。" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5576,11 +5637,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5589,7 +5650,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5639,7 +5700,7 @@ msgstr "文件同步" msgid "Sharing" msgstr "共享" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "群组软件" @@ -5953,8 +6014,8 @@ msgstr "" msgid "Shutdown" msgstr "关闭" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "重新启动" @@ -6184,7 +6245,7 @@ msgstr "任何有 {box_name} 登录的用户都可以查看和修改任何日历 msgid "Access rights" msgstr "访问权" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6195,7 +6256,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6225,11 +6286,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7104,6 +7165,51 @@ msgstr "系统需要重启以完成完全回滚。" msgid "Rollback to Snapshot" msgstr "回滚到快照" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +msgid "Webmail" +msgstr "" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "Address" +msgid "Address book" +msgstr "地址" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8936,35 +9042,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr " 主页" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr " 应用程序" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr " 系统" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "更改密码" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "关闭" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "登出" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "选择语言" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "登录" @@ -8984,10 +9090,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "桌面端" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "GNU/Linux" diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po index b8357c266..b9fea2e7a 100644 --- a/plinth/locale/zh_Hant/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hant/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-13 20:33-0500\n" +"POT-Creation-Date: 2025-01-27 20:25-0500\n" "PO-Revision-Date: 2025-01-24 03:38+0000\n" "Last-Translator: pesder \n" "Language-Team: Chinese (Traditional Han script) restart the machine for changes to take " +"effect." +msgstr "" + +#: modules/gnome/__init__.py:48 +msgid "GNOME" +msgstr "" + +#: modules/gnome/manifest.py:9 templates/clients.html:42 +msgid "Desktop" +msgstr "" + +#: modules/gnome/manifest.py:10 +msgid "Browser" +msgstr "" + +#: modules/gnome/manifest.py:11 +msgid "Office suite" +msgstr "" + +#: modules/gnome/manifest.py:12 +msgid "Software store" +msgstr "" + +#: modules/gnome/manifest.py:13 +msgid "GUI" +msgstr "" + +#: modules/gnome/manifest.py:14 +msgid "Graphical apps" +msgstr "" + #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 msgid "Help" @@ -2973,7 +3032,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: modules/help/__init__.py:53 templates/base.html:217 templates/base.html:220 +#: modules/help/__init__.py:53 templates/base.html:216 templates/base.html:219 #: templates/help-menu.html:46 templates/help-menu.html:47 #: templates/index.html:96 msgid "About" @@ -3434,7 +3493,7 @@ msgid "Web conference" msgstr "" #: modules/janus/templates/janus_video_room.html:205 -#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:273 +#: modules/jsxc/templates/jsxc_launch.html:117 templates/base.html:272 msgid "JavaScript license information" msgstr "" @@ -4961,7 +5020,7 @@ msgstr "" #: modules/networks/templates/connection_show.html:40 #: modules/wireguard/templates/wireguard_show_client.html:72 #: modules/wireguard/templates/wireguard_show_server.html:73 -#: templates/base.html:167 templates/base.html:168 +#: templates/base.html:166 templates/base.html:167 msgid "Edit" msgstr "" @@ -5654,7 +5713,7 @@ msgstr "" msgid "Failed to delete connection: Connection not found." msgstr "" -#: modules/nextcloud/__init__.py:34 +#: modules/nextcloud/__init__.py:25 msgid "" "Nextcloud is a self-hosted productivity platform which provides private and " "secure functions for file sharing, collaborative work, and more. Nextcloud " @@ -5663,11 +5722,11 @@ msgid "" "interface." msgstr "" -#: modules/nextcloud/__init__.py:39 +#: modules/nextcloud/__init__.py:30 msgid "All users of FreedomBox can use Nextcloud. To perform administrative " msgstr "" -#: modules/nextcloud/__init__.py:43 +#: modules/nextcloud/__init__.py:34 #, python-brace-format msgid "" "Please note that Nextcloud is installed and run inside a container provided " @@ -5676,7 +5735,7 @@ msgid "" "performed following an independent cycle." msgstr "" -#: modules/nextcloud/__init__.py:65 modules/nextcloud/manifest.py:11 +#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/manifest.py:18 msgid "Nextcloud" msgstr "" @@ -5732,7 +5791,7 @@ msgstr "" msgid "Sharing" msgstr "" -#: modules/nextcloud/manifest.py:56 +#: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" msgstr "" @@ -6029,8 +6088,8 @@ msgstr "" msgid "Shutdown" msgstr "" -#: modules/power/templates/power.html:15 templates/base.html:182 -#: templates/base.html:183 +#: modules/power/templates/power.html:15 templates/base.html:181 +#: templates/base.html:182 msgid "Restart" msgstr "" @@ -6244,7 +6303,7 @@ msgstr "" msgid "Access rights" msgstr "" -#: modules/radicale/manifest.py:9 +#: modules/radicale/manifest.py:9 modules/sogo/manifest.py:36 msgid "DAVx5" msgstr "" @@ -6255,7 +6314,7 @@ msgid "" "address books and you can create new." msgstr "" -#: modules/radicale/manifest.py:28 +#: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" msgstr "" @@ -6285,11 +6344,11 @@ msgstr "" msgid "Contacts" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" msgstr "" -#: modules/radicale/manifest.py:91 +#: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" msgstr "" @@ -7165,6 +7224,53 @@ msgstr "" msgid "Rollback to Snapshot" msgstr "" +#: modules/sogo/__init__.py:21 +msgid "" +"SOGo is a groupware server that provides a rich web interface for email, " +"calendar, tasks, and contacts. Calendar, tasks, and contacts can also be " +"accessed with various mobile and desktop applications using the CalDAV and " +"CardDAV standards." +msgstr "" + +#: modules/sogo/__init__.py:26 +#, python-brace-format +msgid "" +"Webmail works with the Postfix/Dovecot email " +"server app to retrieve, manage, and send email." +msgstr "" + +#: modules/sogo/__init__.py:30 +#, python-brace-format +msgid "" +"All users on {box_name} can login into and use SOGo. Mails delivered to " +"their mailboxes by the email server app can be read and new mail can be sent " +"out." +msgstr "" + +#: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +msgid "SOGo" +msgstr "" + +#: modules/sogo/manifest.py:19 +msgid "Thunderbird + SOGo connector" +msgstr "" + +#: modules/sogo/manifest.py:71 +#, fuzzy +#| msgid "FairEmail" +msgid "Webmail" +msgstr "公平電子郵件" + +#: modules/sogo/manifest.py:73 +msgid "Calender" +msgstr "" + +#: modules/sogo/manifest.py:74 +#, fuzzy +#| msgid "IP addresses" +msgid "Address book" +msgstr "IP 地址" + #: modules/ssh/__init__.py:22 msgid "" "A Secure Shell server uses the secure shell protocol to accept connections " @@ -8998,35 +9104,35 @@ msgid "" "is free software that lets you install and manage server apps with ease." msgstr "" -#: templates/base.html:118 +#: templates/base.html:117 msgid " Home" msgstr "" -#: templates/base.html:126 +#: templates/base.html:125 msgid " Apps" msgstr "" -#: templates/base.html:135 +#: templates/base.html:134 msgid " System" msgstr "" -#: templates/base.html:174 templates/base.html:175 +#: templates/base.html:173 templates/base.html:174 msgid "Change password" msgstr "" -#: templates/base.html:188 templates/base.html:189 +#: templates/base.html:187 templates/base.html:188 msgid "Shut down" msgstr "" -#: templates/base.html:199 templates/base.html:237 +#: templates/base.html:198 templates/base.html:236 msgid "Log out" msgstr "" -#: templates/base.html:208 templates/base.html:211 +#: templates/base.html:207 templates/base.html:210 msgid "Select language" msgstr "" -#: templates/base.html:226 templates/base.html:228 +#: templates/base.html:225 templates/base.html:227 msgid "Log in" msgstr "" @@ -9046,10 +9152,6 @@ msgstr "" msgid "Launch" msgstr "" -#: templates/clients.html:42 -msgid "Desktop" -msgstr "" - #: templates/clients.html:53 msgid "GNU/Linux" msgstr "" @@ -9249,6 +9351,9 @@ msgstr "" msgid "Gujarati" msgstr "" +#~ msgid "K-9 Mail" +#~ msgstr "K-9 郵件" + #~ msgid "In 24 hour format." #~ msgstr "使用 24 小時格式。" From 4d535294d34416b9cb9256bd2a567c76502f43a0 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 27 Jan 2025 21:06:49 -0500 Subject: [PATCH 32/49] doc: Fetch latest manual Signed-off-by: James Valleroy --- doc/manual/en/Customization.raw.wiki | 6 ++ doc/manual/en/ReleaseNotes.raw.wiki | 30 ++++++ doc/manual/es/Customization.raw.wiki | 95 ++++++++++++++++++ doc/manual/es/ReleaseNotes.raw.wiki | 30 ++++++ doc/manual/es/freedombox-manual.raw.wiki | 4 + .../es/images/android-app-custom-shortcut.jpg | Bin 0 -> 26982 bytes .../es/images/customization_styling.png | Bin 0 -> 37926 bytes .../images/nextcloud-frontpage-shortcut.png | Bin 0 -> 62725 bytes 8 files changed, 165 insertions(+) create mode 100644 doc/manual/es/Customization.raw.wiki create mode 100644 doc/manual/es/images/android-app-custom-shortcut.jpg create mode 100644 doc/manual/es/images/customization_styling.png create mode 100644 doc/manual/es/images/nextcloud-frontpage-shortcut.png diff --git a/doc/manual/en/Customization.raw.wiki b/doc/manual/en/Customization.raw.wiki index be72f0199..e96a06ca8 100644 --- a/doc/manual/en/Customization.raw.wiki +++ b/doc/manual/en/Customization.raw.wiki @@ -1,3 +1,9 @@ +#language en + +##TAG:TRANSLATION-HEADER-START +~- [[FreedomBox/Customization|English]] - [[es/FreedomBox/Customization|Español]] - [[DebianWiki/EditorGuide#translation|(+)]] -~ +##TAG:TRANSLATION-HEADER-END + == FreedomBox Customization == <> diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 4543c759e..7f9c7e4c1 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,36 @@ 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.2 (2025-01-27) == + +=== Highlights === + + * gnome: Add app to provide a graphical desktop environment + * sogo: Add a new app for SOGo groupware + +=== Other Changes === + + * action_utils: Implement methods to get/set the systemd boot target + * apache: Enable expires module by default + * d/control: Fix incorrect comment format + * d/copyright: Fix copyright entry for GNOME app icons + * db: Add more utilities for managing PostgreSQL databases + * email: Make rspamd learn spam/ham when the user marks mails as junk or not junk. + * email: Recommend Thunderbird Mobile instead of K-9 Mail + * firewall, networks, storage: Drop polkit pkla files + * gnome: Add changes missing from branch merge + * locale: Updated translations for Albanian, Bulgarian, Chinese (Simplified Han script), Chinese (Traditional Han script), Czech, Dutch, German, Turkish + * miniflux: Add management of postgresql daemon in a shared manner + * nextcloud: Drop some dead code + * nextcloud: tests: functional: Fix test for modified structure of UI + * nextcloud: tests: functional: Set override domain testing on VM + * ttrss: Add management of postgresql daemon in a shared manner + * ttrss: Fix issue with installing after uninstalling + * ui: Drop the temporary fix for missing popper.js 2.0 + * ui: Fix missing arrow on dropdown form fields + * ui: Fix tag separator not showing on some machines + * wordpress: Order daemon enable/disable correctly + == FreedomBox 25.1 (2025-01-13) == === Highlights === diff --git a/doc/manual/es/Customization.raw.wiki b/doc/manual/es/Customization.raw.wiki new file mode 100644 index 000000000..06642f708 --- /dev/null +++ b/doc/manual/es/Customization.raw.wiki @@ -0,0 +1,95 @@ +#language es + +<> + +== Personalización de FreedomBox == + +<> + +## BEGIN_INCLUDE +Pese a que la filosofía de !FreedomBox es minimizar las decisiones del usuario, se han habilitado unas pocas para facilitar algunos casos de uso avanzados. + + +=== Cambio de la App por omisión === + +'''Disponible desde''': versión 0.36.0 + +'''Dificultad:''' Básica + +'''Caso de Uso''': Una !FreedomBox que expone al público una única aplicación cuya app está configurada como página principal al acceder desde internet. + +Por ej: Una universidad que use !MediaWiki sobre !FreedomBox como wiki de un curso y quiera que al teclear sus estudiantes el nombre de dominio en sus navegadores accedan directamente al wiki sin pasar por la página principal de la !FreedomBox. + +'''Configuración:''' + +Cambiar la [[es/FreedomBox/Manual/Configure#Página_Principal_(home)_del_Servidor Web|App por omisión]] en la página de Configuración a la app que quieras servir por omisión. + + +=== Accesos directos personalizados === + +'''Disponible desde''': versión 0.40.0 + +'''Dificultad:''' Avanzada + +'''Caso de Uso''': El administrador de una !FreedomBox comunitaria instala manualmente algunas aplicaciones no soportadas en la !FreedomBox y quiere que sus usuarios puedan acceder del modo habitual. + +''Nota:'' Esta funcionalidad es para uso con aplicaciones de interacción con el usuario final (que tengan cliente web o móvil). + +'''Configuración:''' + +Crea un fichero llamado `custom-shortcuts.json` en el directorio de configuración de Plinth `/etc/plinth` y añade accesos directos en formato JSON siguiendo el esquema publicado en https:///plinth/api/1/shortcuts. + +Un ejemplo de fichero añadiendo un acceso directo a [[https://nextcloud.com|NextCloud]]. + +{{{#!highlight json +{ + "shortcuts": [{ + "name": "NextCloud", + "description": ["Nextcloud es un conjunto de software cliente-servidor para crear y usar servicios de alojamiento de archivos."], + "icon_url": "/plinth/custom/static/icons/nextcloud.png", + "clients": [{ + "name": "nextcloud", + "platforms": [{ + "type": "web", + "url": "/nextcloud" + }] + }], + "tags" : ["Groupware", "File sync"] + }] +} +}}} + +Los iconos correspondientes a los accesos directos listados en el fichero anterior deben estar en el directorio `/var/www/plinth/custom/static/icons/` con los nombres declarados en `/etc/plinth/custom-shortcuts.json`. + +Tras añadir a !NextCloud en `custom-shortcuts.json` y su icono, reinicia el interfaz web de !FreedomBox. Puedes hacerlo desde el propio interfaz o con la orden {{{ systemctl restart plinth }}}. + +Tras el reinicio, la página principal de !FreedomBox ofrecerá el acceso directo nuevo a !NextCloud como se muestra aquí: + +{{attachment:FreedomBox/Customization/nextcloud-frontpage-shortcut.png|Acceso directo a NextCloud en la página principal}} + +El mismo acceso directo se mostrará también en cualquier app cliente de !FreedomBox para Android conectada a esta !FreedomBox. + +{{attachment:FreedomBox/Customization/android-app-custom-shortcut.jpg|Acceso directo a NextCloud en la app para Android}} + +=== Estilos === + +'''Disponible desde''': versión 24.25 + +'''Dificultad:''' Avanzada + +'''Caso de Uso''': El administrador de una !FreedomBox quiere personalizar el estilo visual que muestra la !FreedomBox. + + +'''Configuración:''' +Crea un fichero en `/var/www/plinth/custom/static/css/user.css` y escribe las reglas de estilo en [[https://developer.mozilla.org/en-US/docs/Web/CSS|CSS]]. +Este fichero tendrá máxima prioridad en las [[https://developer.mozilla.org/en-US/docs/Web/CSS/Cascade|reglas en cascada]]. +Usa la consola para desarrollo del navegador web para comprender qué reglas sobreescribir así como cuanta [[https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity|especificidad]] se necesita. + +{{attachment:FreedomBox/Customization/customization_styling.png|Página principal con estilo personalizado}} + +## END_INCLUDE + +<> + +---- +CategoryFreedomBox diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index 4543c759e..7f9c7e4c1 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,36 @@ 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.2 (2025-01-27) == + +=== Highlights === + + * gnome: Add app to provide a graphical desktop environment + * sogo: Add a new app for SOGo groupware + +=== Other Changes === + + * action_utils: Implement methods to get/set the systemd boot target + * apache: Enable expires module by default + * d/control: Fix incorrect comment format + * d/copyright: Fix copyright entry for GNOME app icons + * db: Add more utilities for managing PostgreSQL databases + * email: Make rspamd learn spam/ham when the user marks mails as junk or not junk. + * email: Recommend Thunderbird Mobile instead of K-9 Mail + * firewall, networks, storage: Drop polkit pkla files + * gnome: Add changes missing from branch merge + * locale: Updated translations for Albanian, Bulgarian, Chinese (Simplified Han script), Chinese (Traditional Han script), Czech, Dutch, German, Turkish + * miniflux: Add management of postgresql daemon in a shared manner + * nextcloud: Drop some dead code + * nextcloud: tests: functional: Fix test for modified structure of UI + * nextcloud: tests: functional: Set override domain testing on VM + * ttrss: Add management of postgresql daemon in a shared manner + * ttrss: Fix issue with installing after uninstalling + * ui: Drop the temporary fix for missing popper.js 2.0 + * ui: Fix missing arrow on dropdown form fields + * ui: Fix tag separator not showing on some machines + * wordpress: Order daemon enable/disable correctly + == FreedomBox 25.1 (2025-01-13) == === Highlights === diff --git a/doc/manual/es/freedombox-manual.raw.wiki b/doc/manual/es/freedombox-manual.raw.wiki index 5c27f1e05..a4855fea7 100644 --- a/doc/manual/es/freedombox-manual.raw.wiki +++ b/doc/manual/es/freedombox-manual.raw.wiki @@ -104,6 +104,10 @@ <> += Personalizar = + +<> + = Contribuir = <> diff --git a/doc/manual/es/images/android-app-custom-shortcut.jpg b/doc/manual/es/images/android-app-custom-shortcut.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d570fc9f4dcb3e12f0608f0ec8cd0881589e0a1 GIT binary patch literal 26982 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

Jz*3CQlez` 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 bcl846iFC@gtNg+y0=^XG)MQJf&0qXKI_p3D literal 0 HcmV?d00001 From 23d6096d37b7e8ef2e6fb9bf4f0661413f31867e Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 27 Jan 2025 21:07:43 -0500 Subject: [PATCH 33/49] Release v25.2 to unstable Signed-off-by: James Valleroy --- debian/changelog | 59 ++++++++++++++++++++++++++++++++++++++++++++++ plinth/__init__.py | 2 +- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 9b99769c9..3b5cd8e70 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,62 @@ +freedombox (25.2) unstable; urgency=medium + + [ Dietmar ] + * Translated using Weblate (German) + + [ Burak Yavuz ] + * Translated using Weblate (Turkish) + + [ 大王叫我来巡山 ] + * Translated using Weblate (Chinese (Simplified Han script)) + + [ Jiří Podhorecký ] + * Translated using Weblate (Czech) + + [ 109247019824 ] + * Translated using Weblate (Bulgarian) + * Translated using Weblate (Bulgarian) + + [ Besnik Bleta ] + * Translated using Weblate (Albanian) + + [ Sunil Mohan Adapa ] + * action_utils: Implement methods to get/set the systemd boot target + * gnome: Add app to provide a graphical desktop environment + * gnome: Add changes missing from branch merge + * ui: Fix missing arrow on dropdown form fields + * nextcloud: tests: functional: Set override domain testing on VM + * nextcloud: tests: functional: Fix test for modified structure of UI + * ui: Drop the temporary fix for missing popper.js 2.0 + * firewall, networks, storage: Drop polkit pkla files + * d/control: Fix incorrect comment format + * d/copyright: Fix copyright entry for GNOME app icons + * ui: Fix tag separator not showing on some machines + * email: Recommend Thunderbird Mobile instead of K-9 Mail + * miniflux: Add management of postgresql daemon in a shared manner + * ttrss: Add management of postgresql daemon in a shared manner + * wordpress: Order daemon enable/disable correctly + * db: Add more utilities for managing PostgreSQL databases + * ttrss: Fix issue with installing after uninstalling + * nextcloud: Drop some dead code + * apache: Enable expires module by default + + [ Benedek Nagy ] + * email: Make rspamd learn spam/ham when the user marks mails as junk or + not junk + * sogo: Add a new app for SOGo groupware + + [ pesder ] + * Translated using Weblate (Chinese (Traditional Han script)) + + [ ikmaak ] + * Translated using Weblate (Dutch) + + [ James Valleroy ] + * locale: Update translation strings + * doc: Fetch latest manual + + -- James Valleroy Mon, 27 Jan 2025 21:07:10 -0500 + freedombox (25.1) unstable; urgency=medium [ gfbdrgng ] diff --git a/plinth/__init__.py b/plinth/__init__.py index 995bf7965..28f77b7ff 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '25.1' +__version__ = '25.2' From aaa630253f32ddce5dd66b36ae7ebabe30d0ea2e Mon Sep 17 00:00:00 2001 From: Burak Yavuz Date: Tue, 28 Jan 2025 04:06:51 +0000 Subject: [PATCH 34/49] Translated using Weblate (Turkish) Currently translated at 100.0% (1816 of 1816 strings) --- plinth/locale/tr/LC_MESSAGES/django.po | 58 ++++++++++++++------------ 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index 09adfc4fa..b21d613bc 100644 --- a/plinth/locale/tr/LC_MESSAGES/django.po +++ b/plinth/locale/tr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-15 04:00+0000\n" +"PO-Revision-Date: 2025-01-29 04:01+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish \n" @@ -2319,10 +2319,8 @@ msgid "Thunderbird" msgstr "Thunderbird" #: modules/email/manifest.py:37 -#, fuzzy -#| msgid "Thunderbird" msgid "Thunderbird Mobile" -msgstr "Thunderbird" +msgstr "Thunderbird Mobil" #: modules/email/manifest.py:52 msgid "FairEmail" @@ -3057,6 +3055,7 @@ msgstr "Depoyu düzenle" msgid "" "GNOME is a desktop environment that focuses on simplicity and ease of use." msgstr "" +"GNOME, basitlik ve kullanım kolaylığına odaklanan bir masaüstü ortamıdır." #: modules/gnome/__init__.py:21 #, python-brace-format @@ -3066,12 +3065,19 @@ msgid "" "suite, and other basic utilities are available. You may install further " "graphical applications using the software center provided within." msgstr "" +"Bu uygulama, bir monitör, bir klavye ve bir fareyi fiziksel olarak " +"bağlarsanız, {box_name} 'ınızı bir masaüstü bilgisayara dönüştürür. Bir " +"tarayıcı, bir ofis paketi ve diğer temel yardımcı programlar mevcuttur. " +"İçeride sağlanan yazılım merkezini kullanarak daha fazla grafik uygulaması " +"yükleyebilirsiniz." #: modules/gnome/__init__.py:26 msgid "" "This app is not suitable for low-end hardware. It requires at least 4GiB of " "RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." msgstr "" +"Bu uygulama düşük seviyeli donanım için uygun değildir. En az 4GiB RAM, 4GiB " +"disk alanı ve temel 3D hızlandırma yeteneğine sahip bir GPU gerektirir." #: modules/gnome/__init__.py:30 #, python-brace-format @@ -3080,40 +3086,37 @@ msgid "" "need to restart the machine for changes to take " "effect." msgstr "" +"Uygulamayı yükledikten, etkinleştirdikten, etkisizleştirdikten veya " +"kaldırdıktan sonra, değişikliklerin etkili olması için makineye yeniden başlatmanız gerekir." #: modules/gnome/__init__.py:48 -#, fuzzy -#| msgid "GNOME Files" msgid "GNOME" -msgstr "GNOME Dosyaları" +msgstr "GNOME" #: modules/gnome/manifest.py:9 templates/clients.html:42 msgid "Desktop" msgstr "Masaüstü" #: modules/gnome/manifest.py:10 -#, fuzzy -#| msgid "Tor Browser" msgid "Browser" -msgstr "Tor Tarayıcı" +msgstr "Tarayıcı" #: modules/gnome/manifest.py:11 msgid "Office suite" -msgstr "" +msgstr "Office paketi" #: modules/gnome/manifest.py:12 -#, fuzzy -#| msgid "Software Update" msgid "Software store" -msgstr "Yazılım Güncellemesi" +msgstr "Yazılım mağazası" #: modules/gnome/manifest.py:13 msgid "GUI" -msgstr "" +msgstr "GKA" #: modules/gnome/manifest.py:14 msgid "Graphical apps" -msgstr "" +msgstr "Grafik uygulamaları" #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 @@ -7904,6 +7907,10 @@ msgid "" "accessed with various mobile and desktop applications using the CalDAV and " "CardDAV standards." msgstr "" +"SOGo, e -posta, takvim, görevler ve kişiler için zengin bir web arayüzü " +"sağlayan bir grup yazılım sunucusudur. Takvim, görevler ve kişilere, Caldav " +"ve Carddav standartlarını kullanan çeşitli mobil ve masaüstü uygulamalarıyla " +"da erişilebilir." #: modules/sogo/__init__.py:26 #, python-brace-format @@ -7911,6 +7918,8 @@ msgid "" "Webmail works with the Postfix/Dovecot email " "server app to retrieve, manage, and send email." msgstr "" +"Web posta, e -posta almak, yönetmek ve göndermek için Postfix/Dovecot e-posta sunucusu uygulamasıyla çalışır." #: modules/sogo/__init__.py:30 #, python-brace-format @@ -7919,32 +7928,29 @@ msgid "" "their mailboxes by the email server app can be read and new mail can be sent " "out." msgstr "" +"{box_name} üzerindeki tüm kullanıcılar SOGo'ya oturum açabilir ve " +"kullanabilir. Posta kutularına e -posta sunucusu uygulaması tarafından " +"teslim edilen postalar okunabilir ve yeni posta gönderilebilir." #: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 msgid "SOGo" -msgstr "" +msgstr "SOGo" #: modules/sogo/manifest.py:19 msgid "Thunderbird + SOGo connector" -msgstr "" +msgstr "Thunderbird + SOGo bağlayıcı" #: modules/sogo/manifest.py:71 -#, fuzzy -#| msgid "Email" msgid "Webmail" -msgstr "E-posta" +msgstr "Web posta" #: modules/sogo/manifest.py:73 -#, fuzzy -#| msgid "Calendar" msgid "Calender" msgstr "Takvim" #: modules/sogo/manifest.py:74 -#, fuzzy -#| msgid "Address" msgid "Address book" -msgstr "Adres" +msgstr "Adres defteri" #: modules/ssh/__init__.py:22 msgid "" From 098b4a5db3d9fe17896d4e75d2ea53a7ab00178c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=8E=8B=E5=8F=AB=E6=88=91=E6=9D=A5=E5=B7=A1?= =?UTF-8?q?=E5=B1=B1?= Date: Tue, 28 Jan 2025 05:35:28 +0000 Subject: [PATCH 35/49] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 62.6% (1137 of 1816 strings) --- plinth/locale/zh_Hans/LC_MESSAGES/django.po | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po index cea2289a8..6ce5ad623 100644 --- a/plinth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hans/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: Plinth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-15 04:00+0000\n" -"Last-Translator: 大王叫我来巡山 \n" +"PO-Revision-Date: 2025-01-29 04:02+0000\n" +"Last-Translator: 大王叫我来巡山 " +"\n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans\n" @@ -2905,20 +2905,16 @@ msgid "Desktop" msgstr "桌面端" #: modules/gnome/manifest.py:10 -#, fuzzy -#| msgid "Tor Browser" msgid "Browser" -msgstr "洋葱浏览器" +msgstr "浏览器" #: modules/gnome/manifest.py:11 msgid "Office suite" msgstr "" #: modules/gnome/manifest.py:12 -#, fuzzy -#| msgid "Software Update" msgid "Software store" -msgstr "软件更新" +msgstr "软件商店" #: modules/gnome/manifest.py:13 msgid "GUI" @@ -7205,10 +7201,8 @@ msgid "Calender" msgstr "" #: modules/sogo/manifest.py:74 -#, fuzzy -#| msgid "Address" msgid "Address book" -msgstr "地址" +msgstr "地址簿" #: modules/ssh/__init__.py:22 msgid "" From 1970b42210ae85c9b8a49be15f7c56466cdf3ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Podhoreck=C3=BD?= Date: Wed, 29 Jan 2025 00:14:27 +0000 Subject: [PATCH 36/49] Translated using Weblate (Czech) Currently translated at 100.0% (1816 of 1816 strings) --- plinth/locale/cs/LC_MESSAGES/django.po | 57 ++++++++++++++------------ 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po index a628f104f..cfab536f1 100644 --- a/plinth/locale/cs/LC_MESSAGES/django.po +++ b/plinth/locale/cs/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-15 04:00+0000\n" +"PO-Revision-Date: 2025-01-29 04:02+0000\n" "Last-Translator: Jiří Podhorecký \n" "Language-Team: Czech \n" @@ -2312,10 +2312,8 @@ msgid "Thunderbird" msgstr "Thunderbird" #: modules/email/manifest.py:37 -#, fuzzy -#| msgid "Thunderbird" msgid "Thunderbird Mobile" -msgstr "Thunderbird" +msgstr "Thunderbird Mobile" #: modules/email/manifest.py:52 msgid "FairEmail" @@ -3046,6 +3044,7 @@ msgstr "Upravit repozitář" msgid "" "GNOME is a desktop environment that focuses on simplicity and ease of use." msgstr "" +"GNOME je prostředí, které se zaměřuje na jednoduchost a snadné používání." #: modules/gnome/__init__.py:21 #, python-brace-format @@ -3055,12 +3054,19 @@ msgid "" "suite, and other basic utilities are available. You may install further " "graphical applications using the software center provided within." msgstr "" +"Tato aplikace promění vaši {box_name} ve stolní počítač, pokud k němu " +"fyzicky připojíte monitor, klávesnici a myš. K dispozici je prohlížeč, " +"kancelářský balík a další základní nástroje. Další grafické aplikace můžete " +"nainstalovat pomocí centra softwaru, které je k dispozici uvnitř." #: modules/gnome/__init__.py:26 msgid "" "This app is not suitable for low-end hardware. It requires at least 4GiB of " "RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." msgstr "" +"Tato aplikace není vhodná pro hardware nižší třídy. Vyžaduje alespoň 4 GB " +"paměti RAM, 4 GB místa na disku a grafický procesor schopný základní 3D " +"akcelerace." #: modules/gnome/__init__.py:30 #, python-brace-format @@ -3069,40 +3075,36 @@ msgid "" "need to restart the machine for changes to take " "effect." msgstr "" +"Po instalaci, povolení, zakázání nebo odinstalování aplikace je třeba restartovat počítač, aby se změny projevily." #: modules/gnome/__init__.py:48 -#, fuzzy -#| msgid "GNOME Files" msgid "GNOME" -msgstr "GNOME soubory" +msgstr "GNOME" #: modules/gnome/manifest.py:9 templates/clients.html:42 msgid "Desktop" msgstr "Desktop" #: modules/gnome/manifest.py:10 -#, fuzzy -#| msgid "Tor Browser" msgid "Browser" -msgstr "Tor prohlížeč" +msgstr "Prohlížeč" #: modules/gnome/manifest.py:11 msgid "Office suite" -msgstr "" +msgstr "Kancelářský balík" #: modules/gnome/manifest.py:12 -#, fuzzy -#| msgid "Software Update" msgid "Software store" -msgstr "Aktualizace software" +msgstr "Obchod se softwarem" #: modules/gnome/manifest.py:13 msgid "GUI" -msgstr "" +msgstr "GUI" #: modules/gnome/manifest.py:14 msgid "Graphical apps" -msgstr "" +msgstr "Grafické aplikace" #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 @@ -7871,6 +7873,10 @@ msgid "" "accessed with various mobile and desktop applications using the CalDAV and " "CardDAV standards." msgstr "" +"SOGo je groupwarový server, který poskytuje bohaté webové rozhraní pro e-" +"mail, kalendář, úkoly a kontakty. Ke kalendáři, úkolům a kontaktům lze " +"přistupovat také pomocí různých mobilních a desktopových aplikací " +"využívajících standardy CalDAV a CardDAV." #: modules/sogo/__init__.py:26 #, python-brace-format @@ -7878,6 +7884,8 @@ msgid "" "Webmail works with the Postfix/Dovecot email " "server app to retrieve, manage, and send email." msgstr "" +"Webmail spolupracuje s aplikací Postfix/Dovecot " +"e-mailového serveru pro načítání, správu a odesílání e-mailů." #: modules/sogo/__init__.py:30 #, python-brace-format @@ -7886,32 +7894,29 @@ msgid "" "their mailboxes by the email server app can be read and new mail can be sent " "out." msgstr "" +"Všichni uživatelé na {box_name} se mohou přihlásit a používat SOGo. Poštu " +"doručenou do jejich schránek aplikací e-mailového serveru lze číst a novou " +"poštu odesílat." #: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 msgid "SOGo" -msgstr "" +msgstr "SOGo" #: modules/sogo/manifest.py:19 msgid "Thunderbird + SOGo connector" -msgstr "" +msgstr "Thunderbird + SOGo konektor" #: modules/sogo/manifest.py:71 -#, fuzzy -#| msgid "Email" msgid "Webmail" -msgstr "E-mail" +msgstr "Webmail" #: modules/sogo/manifest.py:73 -#, fuzzy -#| msgid "Calendar" msgid "Calender" msgstr "Kalendář" #: modules/sogo/manifest.py:74 -#, fuzzy -#| msgid "Address" msgid "Address book" -msgstr "Adresa" +msgstr "Záznamník adres" #: modules/ssh/__init__.py:22 msgid "" From e1a20cd2c5d041ebd5c2218bc3b8ca2f5a851d3f Mon Sep 17 00:00:00 2001 From: 109247019824 <109247019824@users.noreply.hosted.weblate.org> Date: Tue, 28 Jan 2025 04:24:24 +0000 Subject: [PATCH 37/49] Translated using Weblate (Bulgarian) Currently translated at 55.2% (1003 of 1816 strings) --- plinth/locale/bg/LC_MESSAGES/django.po | 40 ++++++++++++-------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index a958ff623..64ba3f18e 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-16 11:00+0000\n" -"Last-Translator: 109247019824 <109247019824@users.noreply.hosted.weblate." -"org>\n" +"PO-Revision-Date: 2025-01-29 04:02+0000\n" +"Last-Translator: 109247019824 <109247019824@users.noreply.hosted.weblate.org>" +"\n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -2177,6 +2177,8 @@ msgid "" "Mails are received for all domains configured in the system. Among these, " "select the most important one." msgstr "" +"Поща се получава от всички настроени домейни в системата. От тях изберете " +"най-важните." #: modules/email/forms.py:35 msgid "New alias (without @domain)" @@ -2914,35 +2916,31 @@ msgstr "" #: modules/gnome/__init__.py:48 msgid "GNOME" -msgstr "" +msgstr "GNOME" #: modules/gnome/manifest.py:9 templates/clients.html:42 msgid "Desktop" msgstr "Настолни устройства" #: modules/gnome/manifest.py:10 -#, fuzzy -#| msgid "Tor Browser" msgid "Browser" -msgstr "Четецът Тор" +msgstr "Мрежов четец" #: modules/gnome/manifest.py:11 msgid "Office suite" -msgstr "" +msgstr "Офиспакет" #: modules/gnome/manifest.py:12 -#, fuzzy -#| msgid "Software Update" msgid "Software store" -msgstr "Обновяване на софтуера" +msgstr "Магазин за софтуер" #: modules/gnome/manifest.py:13 msgid "GUI" -msgstr "" +msgstr "ПГИ" #: modules/gnome/manifest.py:14 msgid "Graphical apps" -msgstr "" +msgstr "Приложения с графичен интерфейс" #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 @@ -5796,7 +5794,7 @@ msgstr "" #: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 msgid "Groupware" -msgstr "" +msgstr "Групов софтуер" #: modules/nextcloud/views.py:53 msgid "Password update failed. Please choose a stronger password." @@ -6335,7 +6333,7 @@ msgstr "" #: modules/radicale/manifest.py:28 modules/sogo/manifest.py:51 msgid "GNOME Calendar" -msgstr "" +msgstr "GNOME календар" #: modules/radicale/manifest.py:56 msgid "Evolution" @@ -6365,11 +6363,11 @@ msgstr "" #: modules/radicale/manifest.py:91 modules/sogo/manifest.py:75 msgid "CalDAV" -msgstr "" +msgstr "CalDAV" #: modules/radicale/manifest.py:91 modules/sogo/manifest.py:76 msgid "CardDAV" -msgstr "" +msgstr "CardDAV" #: modules/radicale/views.py:32 msgid "Access rights configuration updated" @@ -7281,7 +7279,7 @@ msgstr "" #: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 msgid "SOGo" -msgstr "" +msgstr "SOGo" #: modules/sogo/manifest.py:19 msgid "Thunderbird + SOGo connector" @@ -7295,13 +7293,11 @@ msgstr "Адрес на ел. поща" #: modules/sogo/manifest.py:73 msgid "Calender" -msgstr "" +msgstr "Календар" #: modules/sogo/manifest.py:74 -#, fuzzy -#| msgid "Address" msgid "Address book" -msgstr "Адрес" +msgstr "Адресна книга" #: modules/ssh/__init__.py:22 msgid "" From d7d45d9e2f6930fee95c1567a4521f5ef4561266 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 28 Jan 2025 09:15:27 +0000 Subject: [PATCH 38/49] Translated using Weblate (Albanian) Currently translated at 99.4% (1806 of 1816 strings) --- plinth/locale/sq/LC_MESSAGES/django.po | 61 +++++++++++++++----------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index 2bfe82c30..371c4e4fa 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-15 04:00+0000\n" +"PO-Revision-Date: 2025-01-29 04:02+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" @@ -2338,10 +2338,8 @@ msgid "Thunderbird" msgstr "Thunderbird" #: modules/email/manifest.py:37 -#, fuzzy -#| msgid "Thunderbird" msgid "Thunderbird Mobile" -msgstr "Thunderbird" +msgstr "Thunderbird Mobile" #: modules/email/manifest.py:52 msgid "FairEmail" @@ -3073,6 +3071,8 @@ msgstr "Përpunoni depon" msgid "" "GNOME is a desktop environment that focuses on simplicity and ease of use." msgstr "" +"GNOME është një mjedis desktop që përqendrohet te thjeshtësia dhe lehtësia " +"në përdorim." #: modules/gnome/__init__.py:21 #, python-brace-format @@ -3082,12 +3082,20 @@ msgid "" "suite, and other basic utilities are available. You may install further " "graphical applications using the software center provided within." msgstr "" +"Ky aplikacion e shndërron {box_name} tuaj në një kompjuter desktop, nëse " +"lidhni fizikisht me të një monitor, një tastierë dhe një mi. Me të mund të " +"përdoren një shfletues, një suitë zyrash dhe të tjera mjete elementare. Mund " +"të instaloni aplikacione të mëtejshme grafike, duke përdorur qendrën e " +"software-it që përmbahet në të." #: modules/gnome/__init__.py:26 msgid "" "This app is not suitable for low-end hardware. It requires at least 4GiB of " "RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." msgstr "" +"Ky aplikacion s’është i përshtatshëm për hardware të pafuqishëm. Lyp të " +"paktën 4GiB RAM, 4GiB hapësirë disku dhe një GPU të aftë për përshpejtim " +"elementar 3D." #: modules/gnome/__init__.py:30 #, python-brace-format @@ -3096,40 +3104,37 @@ msgid "" "need to restart the machine for changes to take " "effect." msgstr "" +"Pas instalimit, aktivizimit, çaktivizimit, apo instalimit të aplikacionit, " +"do t’ju duhet të rinisni makinën, që të hyjnë në " +"fuqi ndryshimet." #: modules/gnome/__init__.py:48 -#, fuzzy -#| msgid "GNOME Files" msgid "GNOME" -msgstr "Kartela GNOME" +msgstr "GNOME" #: modules/gnome/manifest.py:9 templates/clients.html:42 msgid "Desktop" msgstr "Desktop" #: modules/gnome/manifest.py:10 -#, fuzzy -#| msgid "Tor Browser" msgid "Browser" -msgstr "Shfletuesi Tor" +msgstr "Shfletues" #: modules/gnome/manifest.py:11 msgid "Office suite" -msgstr "" +msgstr "Suitë zyrash" #: modules/gnome/manifest.py:12 -#, fuzzy -#| msgid "Software Update" msgid "Software store" -msgstr "Përditësim Software-i" +msgstr "Shitore software-i" #: modules/gnome/manifest.py:13 msgid "GUI" -msgstr "" +msgstr "GUI" #: modules/gnome/manifest.py:14 msgid "Graphical apps" -msgstr "" +msgstr "Aplikacione grafike" #: modules/help/__init__.py:33 modules/help/templates/help_index.html:14 #: templates/help-menu.html:8 templates/help-menu.html:14 @@ -7951,6 +7956,10 @@ msgid "" "accessed with various mobile and desktop applications using the CalDAV and " "CardDAV standards." msgstr "" +"SOGo është një shërbyes groupware që jep një ndërfaqe të pasur web për " +"email, kalendar, punë dhe kontakte. Kalendari, punët dhe kontaktet mund të " +"përdoren edhe me aplikacione të ndryshëm për celularë dhe desktop, përmes " +"përdorimit të standardeve CalDAV dhe CardDAV." #: modules/sogo/__init__.py:26 #, python-brace-format @@ -7958,6 +7967,8 @@ msgid "" "Webmail works with the Postfix/Dovecot email " "server app to retrieve, manage, and send email." msgstr "" +"Webmail funksionon me shërbyesin Postfix/Dovecot " +"të email-eve për të marrë, administruar dhe dërguar email-e." #: modules/sogo/__init__.py:30 #, python-brace-format @@ -7966,32 +7977,32 @@ msgid "" "their mailboxes by the email server app can be read and new mail can be sent " "out." msgstr "" +"Krejt përdoruesit te {box_name} mund të bëjnë hyrjen dhe të përdorin SOGo-n. " +"Mund të lexohet postë e dërguar te kutitë e tyre postare nga aplikacioni " +"shërbyes email dhe mund të dërgohet postë e re." #: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 +#, fuzzy msgid "SOGo" -msgstr "" +msgstr "SOGo" #: modules/sogo/manifest.py:19 msgid "Thunderbird + SOGo connector" -msgstr "" +msgstr "Lidhës Thunderbird + SOGo" #: modules/sogo/manifest.py:71 #, fuzzy #| msgid "Email" msgid "Webmail" -msgstr "Email" +msgstr "Webmail" #: modules/sogo/manifest.py:73 -#, fuzzy -#| msgid "Calendar" msgid "Calender" -msgstr "Kalendar" +msgstr "" #: modules/sogo/manifest.py:74 -#, fuzzy -#| msgid "Address" msgid "Address book" -msgstr "Adresë" +msgstr "Libër adresash" #: modules/ssh/__init__.py:22 msgid "" From ec3671eb85c7b81368986bc5811c1b7c65e7c5bd Mon Sep 17 00:00:00 2001 From: Dietmar Date: Wed, 29 Jan 2025 10:30:05 +0000 Subject: [PATCH 39/49] Translated using Weblate (German) Currently translated at 98.4% (1788 of 1816 strings) --- plinth/locale/de/LC_MESSAGES/django.po | 67 +++++++++++++++++++------- 1 file changed, 49 insertions(+), 18 deletions(-) diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index ce8998e23..96c3ec1ce 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-15 04:00+0000\n" +"PO-Revision-Date: 2025-01-30 05:01+0000\n" "Last-Translator: Dietmar \n" "Language-Team: German \n" @@ -2366,10 +2366,8 @@ msgid "Thunderbird" msgstr "Thunderbird" #: modules/email/manifest.py:37 -#, fuzzy -#| msgid "Thunderbird" msgid "Thunderbird Mobile" -msgstr "Thunderbird" +msgstr "Thunderbird Mobile" #: modules/email/manifest.py:52 msgid "FairEmail" @@ -2459,12 +2457,25 @@ msgid "" "part. Only one of your domains can have Revese DNS lookup configured unless " "you have multiple public IP addresses." msgstr "" +"Wenn Ihr %(box_name)s auf einer Cloud-Service-Infrastruktur läuft, sollten " +"Sie Reverse DNS " +"konfigurieren. Dies ist nicht zwingend erforderlich, verbessert aber die " +"Zustellbarkeit von E-Mails erheblich. Reverse DNS ist nicht dort " +"konfiguriert, wo Ihr regulärer DNS ist. Sie sollten es in den Einstellungen " +"Ihres VPS/ISP suchen. Bei einigen Providern ist der IP-Adressen-Teil für Sie " +"vorkonfiguriert, und Sie müssen nur den Domain-Teil einstellen. Nur für eine " +"Ihrer Domains kann Revese DNS lookup konfiguriert werden, es sei denn, Sie " +"haben mehrere öffentliche IP-Adressen." #: modules/email/templates/email-dns.html:66 +#, fuzzy msgid "" "An external service is used to lookup public IP address to show in the " "following section. This can be configured in the privacy app." msgstr "" +"Ein externer Dienst wird für die Suche nach der öffentlichen IP-Adresse " +"verwendet, die im folgenden Abschnitt angezeigt wird. Dies kann in der " +"Datenschutz-App konfiguriert werden." #: modules/email/templates/email-dns.html:76 #, fuzzy @@ -3102,6 +3113,8 @@ msgstr "Archiv bearbeiten" msgid "" "GNOME is a desktop environment that focuses on simplicity and ease of use." msgstr "" +"GNOME ist eine Desktop-Umgebung, die sich auf Einfachheit und " +"Benutzerfreundlichkeit konzentriert." #: modules/gnome/__init__.py:21 #, python-brace-format @@ -3111,12 +3124,20 @@ msgid "" "suite, and other basic utilities are available. You may install further " "graphical applications using the software center provided within." msgstr "" +"Diese App verwandelt Ihre {box_name} in einen Desktop-Computer, wenn Sie " +"einen Monitor, eine Tastatur und eine Maus daran anschließen. Ein Browser, " +"ein Office-Paket und andere grundlegende Dienstprogramme sind verfügbar. Sie " +"können weitere grafische Anwendungen über das mitgelieferte Software-Center " +"installieren." #: modules/gnome/__init__.py:26 msgid "" "This app is not suitable for low-end hardware. It requires at least 4GiB of " "RAM, 4GiB of disk space and a GPU capable of basic 3D acceleration." msgstr "" +"Diese Anwendung ist nicht für Low-End-Hardware geeignet. Sie benötigt " +"mindestens 4 GB RAM, 4 GB Festplattenspeicher und einen Grafikprozessor, der " +"die grundlegende 3D-Beschleunigung beherrscht." #: modules/gnome/__init__.py:30 #, python-brace-format @@ -3125,22 +3146,21 @@ msgid "" "need to restart the machine for changes to take " "effect." msgstr "" +"Nach der Installation, Aktivierung, Deaktivierung oder Deinstallation der " +"Anwendung müssen Sie den Neustart des " +"Computers durchführen, damit die Änderungen wirksam werden." #: modules/gnome/__init__.py:48 -#, fuzzy -#| msgid "GNOME Files" msgid "GNOME" -msgstr "GNOME-Dateinen" +msgstr "GNOME" #: modules/gnome/manifest.py:9 templates/clients.html:42 msgid "Desktop" msgstr "Desktop" #: modules/gnome/manifest.py:10 -#, fuzzy -#| msgid "Tor Browser" msgid "Browser" -msgstr "Tor Browser" +msgstr "Browser" #: modules/gnome/manifest.py:11 msgid "Office suite" @@ -3150,7 +3170,7 @@ msgstr "" #, fuzzy #| msgid "Software Update" msgid "Software store" -msgstr "Software-Aktualisierung" +msgstr "Software store" #: modules/gnome/manifest.py:13 msgid "GUI" @@ -6748,6 +6768,12 @@ msgid "" "provided by the FreedomBox Foundation at https://ddns.freedombox.org/ip/. If " "empty, lookups are disabled and some functionality will fail." msgstr "" +"Optionaler Wert. Diese URL wird verwendet, um die öffentlich sichtbare IP-" +"Adresse Ihrer {box_name} zu ermitteln. Die URL sollte einfach die IPv4- oder " +"IPv6-Adresse zurückgeben, von der die Client-Anfrage kommt. Standardmäßig " +"wird der von der FreedomBox Foundation unter https://ddns.freedombox.org/ip/ " +"bereitgestellte Dienst verwendet. Wenn der Wert leer ist, sind die Abfragen " +"deaktiviert und einige Funktionen werden nicht ausgeführt." #: modules/privacy/forms.py:25 msgid "Periodically submit a list of apps used (suggested)" @@ -8017,6 +8043,10 @@ msgid "" "accessed with various mobile and desktop applications using the CalDAV and " "CardDAV standards." msgstr "" +"SOGo ist ein Groupware-Server, der eine umfangreiche Webschnittstelle für E-" +"Mail, Kalender, Aufgaben und Kontakte bietet. Auf Kalender, Aufgaben und " +"Kontakte kann auch mit verschiedenen mobilen und Desktop-Anwendungen unter " +"Verwendung der Standards CalDAV und CardDAV zugegriffen werden." #: modules/sogo/__init__.py:26 #, python-brace-format @@ -8024,6 +8054,8 @@ msgid "" "Webmail works with the Postfix/Dovecot email " "server app to retrieve, manage, and send email." msgstr "" +"Webmail arbeitet mit der Postfix/Dovecot E" +"-Mail-Server-Anwendung, um E-Mails abzurufen, zu verwalten und zu versenden." #: modules/sogo/__init__.py:30 #, python-brace-format @@ -8032,20 +8064,21 @@ msgid "" "their mailboxes by the email server app can be read and new mail can be sent " "out." msgstr "" +"Alle Benutzer von {box_name} können sich bei SOGo anmelden und es nutzen. E-" +"Mails, die von der E-Mail-Server-App an ihre Postfächer geliefert werden, " +"können gelesen und neue E-Mails können versendet werden." #: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 msgid "SOGo" -msgstr "" +msgstr "SOGo" #: modules/sogo/manifest.py:19 msgid "Thunderbird + SOGo connector" msgstr "" #: modules/sogo/manifest.py:71 -#, fuzzy -#| msgid "Email" msgid "Webmail" -msgstr "E-Mail" +msgstr "Webmail" #: modules/sogo/manifest.py:73 #, fuzzy @@ -8054,10 +8087,8 @@ msgid "Calender" msgstr "Kalender" #: modules/sogo/manifest.py:74 -#, fuzzy -#| msgid "Address" msgid "Address book" -msgstr "Adresse" +msgstr "Adressbuch" #: modules/ssh/__init__.py:22 msgid "" From 48aa581635906ddc1a3852fda87f19e7c27e960d Mon Sep 17 00:00:00 2001 From: 109247019824 <109247019824@users.noreply.hosted.weblate.org> Date: Wed, 29 Jan 2025 04:41:44 +0000 Subject: [PATCH 40/49] Translated using Weblate (Bulgarian) Currently translated at 55.5% (1009 of 1816 strings) --- plinth/locale/bg/LC_MESSAGES/django.po | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index 64ba3f18e..04ee4913c 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-29 04:02+0000\n" +"PO-Revision-Date: 2025-01-30 05:02+0000\n" "Last-Translator: 109247019824 <109247019824@users.noreply.hosted.weblate.org>" "\n" "Language-Team: Bulgarian restart the machine for changes to take " "effect." msgstr "" +"След като инсталирате, включите, изключите или премахнете приложението, ще " +"трябва да рестартирате машината, за да влязат " +"промените в сила." #: modules/gnome/__init__.py:48 msgid "GNOME" @@ -2920,7 +2931,7 @@ msgstr "GNOME" #: modules/gnome/manifest.py:9 templates/clients.html:42 msgid "Desktop" -msgstr "Настолни устройства" +msgstr "Работен плот" #: modules/gnome/manifest.py:10 msgid "Browser" @@ -7286,10 +7297,8 @@ msgid "Thunderbird + SOGo connector" msgstr "" #: modules/sogo/manifest.py:71 -#, fuzzy -#| msgid "Email" msgid "Webmail" -msgstr "Адрес на ел. поща" +msgstr "Webmail" #: modules/sogo/manifest.py:73 msgid "Calender" From 8a4b5adef5593dc0b02ae852f2d5d6d3e53b99f7 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Wed, 29 Jan 2025 09:35:56 +0000 Subject: [PATCH 41/49] Translated using Weblate (Albanian) Currently translated at 99.5% (1808 of 1816 strings) --- plinth/locale/sq/LC_MESSAGES/django.po | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index 371c4e4fa..a289eff81 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-29 04:02+0000\n" +"PO-Revision-Date: 2025-01-30 05:02+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" @@ -7982,7 +7982,6 @@ msgstr "" "shërbyes email dhe mund të dërgohet postë e re." #: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 -#, fuzzy msgid "SOGo" msgstr "SOGo" @@ -7991,8 +7990,6 @@ msgid "Thunderbird + SOGo connector" msgstr "Lidhës Thunderbird + SOGo" #: modules/sogo/manifest.py:71 -#, fuzzy -#| msgid "Email" msgid "Webmail" msgstr "Webmail" From cc700755724dfa9c40b6e98d6e56a81ced9cdf27 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sun, 2 Feb 2025 09:14:04 -0500 Subject: [PATCH 42/49] debian: Switch from dnsutils to bind9-dnsutils dnsutils package is not available anymore. Closes: #1094944 Signed-off-by: James Valleroy Reviewed-by: Joseph Nuthalapati --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index bd7d2e125..9ec17a0ee 100644 --- a/debian/control +++ b/debian/control @@ -77,9 +77,9 @@ Depends: ${freedombox:Depends}, adduser, augeas-tools, + bind9-dnsutils, curl, debconf, - dnsutils, e2fsprogs, fonts-fork-awesome, fonts-lato, From ba23d3f8966b0ac6365d780ad86b5b10e0c84c40 Mon Sep 17 00:00:00 2001 From: ikmaak Date: Thu, 6 Feb 2025 12:09:21 +0000 Subject: [PATCH 43/49] Translated using Weblate (Dutch) Currently translated at 94.5% (1717 of 1816 strings) --- plinth/locale/nl/LC_MESSAGES/django.po | 325 ++++++------------------- 1 file changed, 80 insertions(+), 245 deletions(-) diff --git a/plinth/locale/nl/LC_MESSAGES/django.po b/plinth/locale/nl/LC_MESSAGES/django.po index 38e986e12..c1593c958 100644 --- a/plinth/locale/nl/LC_MESSAGES/django.po +++ b/plinth/locale/nl/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-24 23:26+0000\n" +"PO-Revision-Date: 2025-02-07 12:01+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Dutch \n" @@ -485,16 +485,12 @@ msgid "Schedules" msgstr "Schema's" #: modules/backups/manifest.py:18 -#, fuzzy -#| msgid "Remove" msgid "Remote" -msgstr "Verwijderen" +msgstr "Extern" #: modules/backups/manifest.py:19 -#, fuzzy -#| msgid "App updated" msgid "App data" -msgstr "Toepassing bijgewerkt" +msgstr "Toepassingsgegevens" #: modules/backups/manifest.py:20 #: modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:15 @@ -536,10 +532,8 @@ msgid "Repository path is neither empty nor is an existing backups repository." msgstr "Het opslag pad is niet leeg, en ook geen lege bestaande backup opslag." #: modules/backups/privileged.py:74 -#, fuzzy -#| msgid "A share with this name already exists." msgid "An archive with given name already exists in the repository." -msgstr "Er bestaat al een gedeelde map met deze naam." +msgstr "Er bestaat al een archief met deze naam in de repository." #: modules/backups/privileged.py:81 msgid "Archive with given name was not found in the repository." @@ -797,10 +791,8 @@ msgid "Upload and restore a backup" msgstr "Een back-up uploaden en herstellen" #: modules/backups/views.py:216 -#, fuzzy -#| msgid "Logged out successfully." msgid "Upload successful." -msgstr "Succesvol uitgelogd." +msgstr "Upload succesvol." #: modules/backups/views.py:254 msgid "No backup file found." @@ -824,10 +816,8 @@ msgid "Create backup repository" msgstr "Maak een back-up repository" #: modules/backups/views.py:350 -#, fuzzy -#| msgid "Added new remote SSH repository." msgid "Added new repository." -msgstr "Nieuwe externe SSH-repository toegevoegd." +msgstr "Nieuwe repository toegevoegd." #: modules/backups/views.py:364 msgid "Create remote backup repository" @@ -1235,16 +1225,12 @@ msgid "Ebook" msgstr "Eboek" #: modules/calibre/manifest.py:20 -#, fuzzy -#| msgid "E-book Library" msgid "Library" -msgstr "E-boek bibliotheek" +msgstr "Bibliotheek" #: modules/calibre/manifest.py:20 -#, fuzzy -#| msgid "E-book Library" msgid "Ebook reader" -msgstr "E-boek bibliotheek" +msgstr "E-boek lezer" #: modules/calibre/templates/calibre-delete-library.html:11 #, python-format @@ -1370,8 +1356,6 @@ msgid "Storage" msgstr "Storage" #: modules/cockpit/manifest.py:26 -#, fuzzy -#| msgid "Networks" msgid "Networking" msgstr "Netwerken" @@ -1389,16 +1373,12 @@ msgid "Performance" msgstr "Prestaties" #: modules/config/__init__.py:18 -#, fuzzy -#| msgid "" -#| "Here you can set some general configuration options like hostname, domain " -#| "name, webserver home page etc." msgid "" "Here you can set some general configuration options like webserver home page " "etc." msgstr "" "Hier kunnen een aantal algemene configuratieopties worden ingesteld, zoals " -"hostname, domeinnaam, startpagina etc." +"onder andere de webserver startpagina." #: modules/config/__init__.py:40 msgid "General Configuration" @@ -1598,14 +1578,10 @@ msgid "-- no time zone set --" msgstr "-- geen tijdzone ingesteld --" #: modules/datetime/manifest.py:15 -#, fuzzy -#| msgid "Network Interface" msgid "Network time" -msgstr "Netwerkinterface" +msgstr "Netwerktijd" #: modules/datetime/manifest.py:15 -#, fuzzy -#| msgid "Time Zone" msgid "Timezone" msgstr "Tijdzone" @@ -1647,24 +1623,18 @@ msgid "Bittorrent client written in Python/PyGTK" msgstr "Bittorrent-client geschreven in Python/PyGTK" #: modules/deluge/manifest.py:21 modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "Deluge BitTorrent" msgid "BitTorrent" -msgstr "Deluge BitTorrent" +msgstr "BitTorrent" #: modules/deluge/manifest.py:21 modules/roundcube/manifest.py:23 #: modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "Launch web client" msgid "Web client" -msgstr "Start web cliënt" +msgstr "Web cliënt" #: modules/deluge/manifest.py:21 modules/syncthing/manifest.py:58 #: modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "I2P" msgid "P2P" -msgstr "I2P" +msgstr "P2P" #: modules/diagnostics/__init__.py:29 msgid "" @@ -2229,10 +2199,8 @@ msgid "Audio chat" msgstr "Audiogesprek" #: modules/ejabberd/manifest.py:126 modules/matrixsynapse/manifest.py:104 -#, fuzzy -#| msgid "Video Room" msgid "Video chat" -msgstr "Video Ruimte" +msgstr "Videochat" #: modules/ejabberd/manifest.py:127 modules/jsxc/manifest.py:16 msgid "XMPP" @@ -2369,18 +2337,14 @@ msgid "Thunderbird" msgstr "Thunderbird" #: modules/email/manifest.py:37 -#, fuzzy -#| msgid "Thunderbird" msgid "Thunderbird Mobile" -msgstr "Thunderbird" +msgstr "Thunderbird Mobile" #: modules/email/manifest.py:52 msgid "FairEmail" msgstr "FairEmail" #: modules/email/manifest.py:82 -#, fuzzy -#| msgid "Email Server" msgid "Email server" msgstr "E-mailserver" @@ -2414,16 +2378,12 @@ msgid "DNS Records for domain:" msgstr "DNS Records voor domein:" #: modules/email/templates/email-dns.html:12 -#, fuzzy -#| msgid "" -#| "The following DNS records must be added manually on your primary domain " -#| "for the mail server to work properly." msgid "" "The following DNS records must be added manually on this domain for the mail " "server to work properly for this domain." msgstr "" -"De volgende DNS-records moeten handmatig worden toegevoegd aan het primaire " -"domein om de e-mailserver goed te laten werken." +"De volgende DNS-records moeten handmatig worden toegevoegd aan dit domein om " +"de e-mailserver goed te laten werken." #: modules/email/templates/email-dns.html:23 #: modules/email/templates/email-dns.html:77 @@ -2478,10 +2438,8 @@ msgid "" msgstr "" #: modules/email/templates/email-dns.html:76 -#, fuzzy -#| msgid "Hostname" msgid "Host" -msgstr "Hostnaam" +msgstr "Host" #: modules/email/templates/email.html:10 msgid "Manage Spam" @@ -2759,10 +2717,8 @@ msgid "Ports" msgstr "Poorten" #: modules/firewall/manifest.py:10 -#, fuzzy -#| msgid "Blocked" msgid "Blocking" -msgstr "Geblokkeerd" +msgstr "Blokkeren" #: modules/firewall/manifest.py:10 modules/networks/forms.py:319 #: modules/upgrades/manifest.py:10 @@ -3013,10 +2969,8 @@ msgid "Git" msgstr "Git" #: modules/gitweb/manifest.py:37 -#, fuzzy -#| msgid "Simple Git Hosting" msgid "Git hosting" -msgstr "Eenvoudige Git Hosting" +msgstr "Git hosting" #: modules/gitweb/manifest.py:37 msgid "Version control" @@ -3107,34 +3061,28 @@ msgid "" msgstr "" #: modules/gnome/__init__.py:48 -#, fuzzy -#| msgid "GNOME Files" msgid "GNOME" -msgstr "GNOME Bestanden" +msgstr "GNOME" #: modules/gnome/manifest.py:9 templates/clients.html:42 msgid "Desktop" msgstr "Desktop" #: modules/gnome/manifest.py:10 -#, fuzzy -#| msgid "Tor Browser" msgid "Browser" -msgstr "Tor Browser" +msgstr "Browser" #: modules/gnome/manifest.py:11 msgid "Office suite" msgstr "" #: modules/gnome/manifest.py:12 -#, fuzzy -#| msgid "Software Update" msgid "Software store" -msgstr "Software bijwerken" +msgstr "Softwaremarkt" #: modules/gnome/manifest.py:13 msgid "GUI" -msgstr "" +msgstr "GUI" #: modules/gnome/manifest.py:14 msgid "Graphical apps" @@ -3284,10 +3232,8 @@ msgid "Translate" msgstr "Vertaal" #: modules/help/templates/help_about.html:129 -#, fuzzy -#| msgid "Get Support" msgid "Support" -msgstr "Help" +msgstr "Hulp" #: modules/help/templates/help_about.html:133 msgid "Forum" @@ -3519,16 +3465,12 @@ msgstr "" "en voeg dit log toe aan de foutmelding." #: modules/help/templates/statuslog.html:27 -#, fuzzy -#| msgid "" -#| "Please remove any passwords or other personal information from the log " -#| "before submitting the bug report." msgid "" "Please remove any personal information from the log before submitting the " "bug report." msgstr "" -"Verwijder alle wachtwoorden of andere persoonlijke gegevens uit het logboek " -"voor het foutrapport verstuurd wordt." +"Verwijder alle persoonlijke gegevens uit het logboek voor het foutrapport " +"verstuurd wordt." #: modules/help/views.py:29 msgid "Documentation and FAQ" @@ -3721,10 +3663,8 @@ msgid "Janus Video Room" msgstr "Janus Video Ruimte" #: modules/janus/manifest.py:16 -#, fuzzy -#| msgid "WebRTC server" msgid "WebRTC" -msgstr "WebRTC server" +msgstr "WebRTC" #: modules/janus/manifest.py:16 msgid "Web conference" @@ -3748,16 +3688,12 @@ msgid "JSXC" msgstr "JSXC" #: modules/jsxc/manifest.py:16 -#, fuzzy -#| msgid "Web Search" msgid "Web chat" -msgstr "Zoeken op het Internet" +msgstr "Web chat" #: modules/jsxc/manifest.py:16 modules/quassel/manifest.py:54 -#, fuzzy -#| msgid "IRC Client" msgid "Client" -msgstr "IRC Cliënt" +msgstr "Cliënt" #: modules/kiwix/__init__.py:21 msgid "" @@ -3820,10 +3756,8 @@ msgstr "" "gewist om schijfruimte te besparen." #: modules/kiwix/manifest.py:23 -#, fuzzy -#| msgid "Offline Wikipedia" msgid "Offline reader" -msgstr "Offline Wikipedia" +msgstr "Offline lezer" #: modules/kiwix/manifest.py:24 #, fuzzy @@ -3838,10 +3772,8 @@ msgid "Censorship resistance" msgstr "" #: modules/kiwix/manifest.py:26 -#, fuzzy -#| msgid "Offline Wikipedia" msgid "Wikipedia" -msgstr "Offline Wikipedia" +msgstr "Wikipedia" #: modules/kiwix/templates/kiwix-add-package.html:29 #, python-format @@ -3895,10 +3827,8 @@ msgid "Add a new content package" msgstr "Voeg een nieuw informatiepakket toe" #: modules/kiwix/views.py:76 -#, fuzzy -#| msgid "Content package added." msgid "Content package already exists." -msgstr "Informatiepakket toegevoegd." +msgstr "Informatiepakket bestaat al." #: modules/kiwix/views.py:79 msgid "Failed to add content package." @@ -3946,10 +3876,8 @@ msgid "HTTPS" msgstr "HTTPS" #: modules/letsencrypt/manifest.py:11 -#, fuzzy -#| msgid "Website Security" msgid "Web security" -msgstr "Websitebeveiliging" +msgstr "Web beveiliging" #: modules/letsencrypt/templates/letsencrypt.html:25 msgid "Certificate Status" @@ -4134,16 +4062,12 @@ msgid "FluffyChat" msgstr "FluffyChat" #: modules/matrixsynapse/manifest.py:101 modules/quassel/manifest.py:54 -#, fuzzy -#| msgid "IRC Chatroom" msgid "Chat room" -msgstr "IRC Chatroom" +msgstr "Chatroom" #: modules/matrixsynapse/manifest.py:105 -#, fuzzy -#| msgid "Media streaming server" msgid "Matrix server" -msgstr "Mediastreaming server" +msgstr "Matrix server" #: modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:18 msgid "" @@ -4471,10 +4395,8 @@ msgid "Game server" msgstr "Game server" #: modules/minetest/manifest.py:49 -#, fuzzy -#| msgid "Block Sandbox" msgid "Block sandbox" -msgstr "Block Sandbox" +msgstr "Block sandbox" #: modules/minetest/manifest.py:49 msgid "Platform" @@ -4645,10 +4567,8 @@ msgstr "" #: modules/miniflux/manifest.py:138 modules/rssbridge/manifest.py:16 #: modules/ttrss/manifest.py:55 -#, fuzzy -#| msgid "SSH" msgid "RSS" -msgstr "SSH" +msgstr "RSS" #: modules/miniflux/manifest.py:138 modules/rssbridge/manifest.py:16 #: modules/ttrss/manifest.py:55 @@ -4723,10 +4643,8 @@ msgid "Mumble" msgstr "Mumble" #: modules/mumble/__init__.py:158 -#, fuzzy -#| msgid "Mumble server is running" msgid "Mumble server is configured" -msgstr "Mumble server draait" +msgstr "Mumble server is ingesteld" #: modules/mumble/forms.py:30 msgid "Set SuperUser Password" @@ -4874,10 +4792,8 @@ msgstr "" "niet langer zijn dan 253 tekens." #: modules/names/manifest.py:13 -#, fuzzy -#| msgid "Evolution" msgid "DNS Resolution" -msgstr "Evolution" +msgstr "DNS Resultaten" #: modules/names/resolved.py:91 modules/names/resolved.py:101 #: modules/networks/forms.py:28 @@ -4958,10 +4874,8 @@ msgid "Error retrieving status:" msgstr "Fout bij ophalen status:" #: modules/names/views.py:81 -#, fuzzy -#| msgid "Hostname" msgid "Set Hostname" -msgstr "Hostnaam" +msgstr "Instellen Hostnaam" #: modules/names/views.py:99 #, python-brace-format @@ -4969,10 +4883,8 @@ msgid "Error setting hostname: {exception}" msgstr "Hostnaam instellen mislukt: {exception}" #: modules/names/views.py:115 -#, fuzzy -#| msgid "Domain Name" msgid "Set Domain Name" -msgstr "Domeinnaam" +msgstr "Instellen Domeinnaam" #: modules/names/views.py:133 #, python-brace-format @@ -5445,10 +5357,8 @@ msgstr "Wi-Fi" #: modules/networks/manifest.py:8 modules/privoxy/manifest.py:10 #: modules/samba/manifest.py:90 -#, fuzzy -#| msgid "Local Network Domain" msgid "Local network" -msgstr "Lokaal netwerkdomein" +msgstr "Lokaal netwerk" #: modules/networks/manifest.py:8 msgid "Topology" @@ -6292,20 +6202,16 @@ msgstr "" "landcode." #: modules/nextcloud/manifest.py:56 modules/syncthing/manifest.py:58 -#, fuzzy -#| msgid "Filesystem" msgid "File sync" -msgstr "Bestandssysteem" +msgstr "Bestandssynchronisatie" #: modules/nextcloud/manifest.py:56 modules/sharing/__init__.py:34 msgid "Sharing" msgstr "Delen" #: modules/nextcloud/manifest.py:56 modules/sogo/manifest.py:72 -#, fuzzy -#| msgid "Group Share" msgid "Groupware" -msgstr "Gedeelde map" +msgstr "Samenwerkingsprogramma" #: modules/nextcloud/views.py:53 msgid "Password update failed. Please choose a stronger password." @@ -6349,10 +6255,8 @@ msgid "Tunnelblick" msgstr "Tunnelblick" #: modules/openvpn/manifest.py:60 modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "DNS server" msgid "VPN server" -msgstr "DNS server" +msgstr "VPN server" #: modules/openvpn/manifest.py:60 modules/pagekite/manifest.py:17 #: modules/wireguard/manifest.py:45 @@ -6627,10 +6531,8 @@ msgstr "" "worden bekeken via de Cockpit-app." #: modules/performance/manifest.py:18 -#, fuzzy -#| msgid "System Monitoring" msgid "Monitoring" -msgstr "Systeembewaking" +msgstr "Monitoren" #: modules/performance/manifest.py:18 msgid "Resource utilization" @@ -6649,8 +6551,6 @@ msgid "Reboot" msgstr "Herstart" #: modules/power/manifest.py:10 -#, fuzzy -#| msgid "Shut down" msgid "Shutdown" msgstr "Uitschakelen" @@ -6755,8 +6655,6 @@ msgid "" msgstr "" #: modules/privacy/forms.py:45 -#, fuzzy -#| msgid "URL to look up public IP" msgid "URL to look up public IP address" msgstr "URL voor controle van het IP-adres" @@ -6765,16 +6663,12 @@ msgid "Usage reporting" msgstr "" #: modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "Enable Quassel core service" msgid "External services" -msgstr "Quassel-core service inschakelen" +msgstr "Externe services" #: modules/privacy/manifest.py:10 -#, fuzzy -#| msgid "Fallback DNS Servers" msgid "Fallback DNS" -msgstr "Fallback DNS Servers" +msgstr "Fallback DNS" #: modules/privoxy/__init__.py:25 msgid "" @@ -6814,14 +6708,12 @@ msgstr "Gebruik {url} via proxy {proxy} op tcp{kind}" #: modules/privoxy/manifest.py:10 msgid "Ad blocker" -msgstr "" +msgstr "Advertentieblokker" #: modules/privoxy/manifest.py:10 modules/shadowsocks/manifest.py:18 #: modules/torproxy/manifest.py:55 -#, fuzzy -#| msgid "Gobby Server" msgid "Proxy server" -msgstr "Gobby Server" +msgstr "Proxy server" #: modules/quassel/__init__.py:24 #, python-brace-format @@ -6971,10 +6863,8 @@ msgstr "" "bestaande kalenders en adresboeken weergeven." #: modules/radicale/manifest.py:91 -#, fuzzy -#| msgid "GNOME Calendar" msgid "Calendar" -msgstr "GNOME Kalender" +msgstr "Kalender" #: modules/radicale/manifest.py:91 modules/roundcube/manifest.py:23 msgid "Contacts" @@ -7103,16 +6993,12 @@ msgstr "" "heeft." #: modules/rssbridge/manifest.py:16 -#, fuzzy -#| msgid "RSS Feed Generator" msgid "Feed generator" -msgstr "RSS Feed Generator" +msgstr "Feed Generator" #: modules/rssbridge/manifest.py:16 -#, fuzzy -#| msgid "FluxNews" msgid "News" -msgstr "FluxNews" +msgstr "Nieuws" #: modules/samba/__init__.py:23 msgid "" @@ -7189,22 +7075,16 @@ msgid "Dolphin" msgstr "Dolphin" #: modules/samba/manifest.py:91 -#, fuzzy -#| msgid "Network Interface" msgid "Network drive" -msgstr "Netwerkinterface" +msgstr "Netwerkschijf" #: modules/samba/manifest.py:92 -#, fuzzy -#| msgid "Media streaming server" msgid "Media storage" -msgstr "Mediastreaming server" +msgstr "Mediaopslag" #: modules/samba/manifest.py:93 -#, fuzzy -#| msgid "Backups" msgid "Backup storage" -msgstr "Back-ups" +msgstr "Backupopslag" #: modules/samba/templates/samba.html:20 msgid "Shares" @@ -7371,10 +7251,8 @@ msgid "Automatic bans" msgstr "Automatisch" #: modules/security/manifest.py:10 -#, fuzzy -#| msgid "Ports" msgid "Reports" -msgstr "Poorten" +msgstr "Rapporten" #: modules/security/templates/security.html:12 #: modules/security/templates/security.html:14 @@ -7520,10 +7398,8 @@ msgid "Link blog" msgstr "" #: modules/shaarli/manifest.py:34 -#, fuzzy -#| msgid "in use" msgid "Single user" -msgstr "in gebruik" +msgstr "Een gebruiker" #: modules/shadowsocks/__init__.py:18 modules/shadowsocksserver/__init__.py:18 msgid "" @@ -7602,10 +7478,8 @@ msgid "Entry point" msgstr "Eindpunt" #: modules/shadowsocks/manifest.py:22 modules/shadowsocksserver/manifest.py:21 -#, fuzzy -#| msgid "Shadowsocks Client" msgid "Shadowsocks" -msgstr "Shadowsocks Client" +msgstr "Shadowsocks" #: modules/shadowsocksserver/__init__.py:26 #, python-brace-format @@ -8026,29 +7900,23 @@ msgstr "" #: modules/sogo/__init__.py:48 modules/sogo/manifest.py:11 msgid "SOGo" -msgstr "" +msgstr "SOGo" #: modules/sogo/manifest.py:19 msgid "Thunderbird + SOGo connector" -msgstr "" +msgstr "Thunderbird + SOGo verbinder" #: modules/sogo/manifest.py:71 -#, fuzzy -#| msgid "Email" msgid "Webmail" -msgstr "Email" +msgstr "Webmail" #: modules/sogo/manifest.py:73 -#, fuzzy -#| msgid "GNOME Calendar" msgid "Calender" -msgstr "GNOME Kalender" +msgstr "Kalender" #: modules/sogo/manifest.py:74 -#, fuzzy -#| msgid "Address" msgid "Address book" -msgstr "Adres" +msgstr "Adresboek" #: modules/ssh/__init__.py:22 msgid "" @@ -8063,10 +7931,8 @@ msgstr "" "bestanden kopiëren en andere taken verrichten door zulk een verbinding." #: modules/ssh/__init__.py:42 -#, fuzzy -#| msgid "Secure Shell (SSH) Server" msgid "Secure Shell Server" -msgstr "Secure Shell (SSH) Server" +msgstr "Secure Shell Server" #: modules/ssh/__init__.py:75 msgid "Remotely login using Secure Shell (SSH)" @@ -8101,8 +7967,6 @@ msgstr "" "root, admin en freedombox-ssh inloggen via SSH." #: modules/ssh/manifest.py:22 -#, fuzzy -#| msgid "SSH" msgid "SSH" msgstr "SSH" @@ -8113,10 +7977,8 @@ msgid "Remote terminal" msgstr "Locatie verwijderen" #: modules/ssh/manifest.py:22 -#, fuzzy -#| msgid "Fingerprint" msgid "Fingerprints" -msgstr "Vingerafdruk" +msgstr "Vingerafdrukken" #: modules/ssh/templates/ssh.html:11 msgid "Server Fingerprints" @@ -8350,10 +8212,8 @@ msgid "Auto-mount" msgstr "Automatisch" #: modules/storage/manifest.py:9 -#, fuzzy -#| msgid "Expand Root Partition" msgid "Expand partition" -msgstr "Root-partitie uitbreiden" +msgstr "Partitie uitbreiden" #: modules/storage/templates/storage.html:17 msgid "The following storage devices are in use:" @@ -8698,18 +8558,14 @@ msgid "Orbot: Proxy with Tor" msgstr "Orbot: Proxy met Tor" #: modules/tor/manifest.py:57 -#, fuzzy -#| msgid "Onion Service" msgid "Onion services" -msgstr "Onion Service" +msgstr "Onion services" #: modules/tor/manifest.py:58 msgid "Relay" msgstr "Relay" #: modules/tor/manifest.py:59 modules/torproxy/manifest.py:56 -#, fuzzy -#| msgid "Anonymity Network" msgid "Anonymity network" msgstr "Anonimiteitsnetwerk" @@ -8913,10 +8769,8 @@ msgid "FreedomBox Updated" msgstr "FreedomBox geaktualiseerd" #: modules/upgrades/__init__.py:138 -#, fuzzy -#| msgid "Software Update" msgid "Run software update manually" -msgstr "Software bijwerken" +msgstr "Software handmatig bijwerken" #: modules/upgrades/__init__.py:140 msgid "" @@ -8983,10 +8837,8 @@ msgid "Reboots" msgstr "" #: modules/upgrades/manifest.py:10 -#, fuzzy -#| msgid "New value" msgid "New features" -msgstr "Nieuwe waarde" +msgstr "Nieuwe functies" #: modules/upgrades/templates/backports-firstboot.html:26 msgid "" @@ -9245,8 +9097,6 @@ msgstr "" "beginnen met # worden genegeerd." #: modules/users/forms.py:252 -#, fuzzy -#| msgid "Delete User" msgid "Delete user" msgstr "Gebruiker verwijderen" @@ -9257,10 +9107,8 @@ msgid "" msgstr "" #: modules/users/forms.py:305 -#, fuzzy -#| msgid "Failed to add user to group." msgid "Failed to delete user." -msgstr "Gebruiker aan groep toevoegen mislukt." +msgstr "Gebruikerverwijderen mislukt." #: modules/users/forms.py:320 msgid "Renaming LDAP user failed." @@ -9296,10 +9144,8 @@ msgid "User account created, you are now logged in" msgstr "Gebruikersaccount aangemaakt, je bent nu ingelogd" #: modules/users/manifest.py:8 -#, fuzzy -#| msgid "Manage Snapshots" msgid "Manage accounts" -msgstr "Beheren van Snapshots" +msgstr "Gebruikers beheren" #: modules/users/manifest.py:8 #, fuzzy @@ -9409,10 +9255,8 @@ msgid "" msgstr "" #: modules/users/templates/users_update.html:65 -#, fuzzy -#| msgid "Delete files" msgid "Delete user and files" -msgstr "Bestanden verwijderen" +msgstr "Gebruikers en bestanden verwijderen" #: modules/users/templates/users_update.html:68 msgid "Cancel" @@ -9433,10 +9277,9 @@ msgid "Edit User" msgstr "Gebruiker wijzigen" #: modules/users/views.py:111 -#, fuzzy, python-format -#| msgid "User %(username)s created." +#, python-format msgid "User %(username)s deleted." -msgstr "Gebruiker %(username)s aangemaakt." +msgstr "Gebruiker %(username)s verwijderd." #: modules/users/views.py:130 msgid "Change Password" @@ -9569,10 +9412,8 @@ msgstr "" "verzonden." #: modules/wireguard/manifest.py:45 -#, fuzzy -#| msgid "IRC Client" msgid "VPN client" -msgstr "IRC Cliënt" +msgstr "VPN cliënt" #: modules/wireguard/templates/wireguard.html:10 msgid "As a Server" @@ -9911,10 +9752,8 @@ msgid "Photo" msgstr "Foto" #: modules/zoph/manifest.py:26 -#, fuzzy -#| msgid "Photo Organizer" msgid "Organizer" -msgstr "Foto Organisator" +msgstr "Organisator" #: modules/zoph/templates/zoph-pre-setup.html:15 #: modules/zoph/templates/zoph-pre-setup.html:28 @@ -10120,16 +9959,12 @@ msgid "Service %(service_name)s is not running." msgstr "Service %(service_name)s is niet actief." #: templates/apps.html:33 -#, fuzzy -#| msgid "Search the web" msgid "Search with tags" -msgstr "Zoeken op internet" +msgstr "Zoeken op labels" #: templates/apps.html:46 -#, fuzzy -#| msgid "Search the web" msgid "Clear all tags" -msgstr "Zoeken op internet" +msgstr "Verwijder alle labels" #: templates/base.html:31 msgid "" From e1a1fe2a1eaf571e495018dfebc55f808428690a Mon Sep 17 00:00:00 2001 From: pesder Date: Fri, 7 Feb 2025 04:56:36 +0000 Subject: [PATCH 44/49] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 21.3% (388 of 1816 strings) --- plinth/locale/zh_Hant/LC_MESSAGES/django.po | 59 +++++++++------------ 1 file changed, 25 insertions(+), 34 deletions(-) diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po index b9fea2e7a..6480c9a41 100644 --- a/plinth/locale/zh_Hant/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hant/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-27 20:25-0500\n" -"PO-Revision-Date: 2025-01-24 03:38+0000\n" +"PO-Revision-Date: 2025-02-07 12:01+0000\n" "Last-Translator: pesder \n" "Language-Team: Chinese (Traditional Han script) \n" @@ -190,15 +190,15 @@ msgstr "內部網路網域" #: modules/avahi/manifest.py:14 msgid "Auto-discovery" -msgstr "" +msgstr "自動發現" #: modules/avahi/manifest.py:14 modules/backups/manifest.py:17 msgid "Local" -msgstr "" +msgstr "本地" #: modules/avahi/manifest.py:14 msgid "mDNS" -msgstr "" +msgstr "mDNS" #: modules/backups/__init__.py:24 msgid "Backups allows creating and managing backup archives." @@ -300,7 +300,7 @@ msgstr "觸發備份操作於每日幾點鐘" msgid "" "In 24 hour format. Services may become temporarily unavailable while running " "backup operation at this time of the day." -msgstr "" +msgstr "24 小時制。在一天中的這個時間運行備份操作時,服務可能會暫時不可用。" #: modules/backups/forms.py:85 modules/backups/forms.py:107 msgid "Included apps" @@ -344,7 +344,8 @@ msgid "" "Select the backup file to upload from the local computer. This must be a " "file previously downloaded from the result of a successful backup on a " "{box_name}. It must have a .tar.gz extension." -msgstr "" +msgstr "選擇要從本地電腦上傳的備份檔。這必須是以前從 {box_name} " +"上成功備份的結果下載的檔案。它必須具有 .tar.gz 延伸檔名。" #: modules/backups/forms.py:154 msgid "Repository path format incorrect." @@ -454,10 +455,8 @@ msgid "Restore" msgstr "備份還原" #: modules/backups/manifest.py:15 -#, fuzzy -#| msgid "Encryption" msgid "Encrypted" -msgstr "加密" +msgstr "加密的" #: modules/backups/manifest.py:16 msgid "Schedules" @@ -465,7 +464,7 @@ msgstr "排程" #: modules/backups/manifest.py:18 msgid "Remote" -msgstr "" +msgstr "遠端" #: modules/backups/manifest.py:19 msgid "App data" @@ -480,7 +479,7 @@ msgstr "設定" #: modules/backups/manifest.py:21 msgid "Borg" -msgstr "" +msgstr "Borg" #: modules/backups/privileged.py:31 msgid "" @@ -509,22 +508,20 @@ msgid "Repository path is neither empty nor is an existing backups repository." msgstr "路徑儲存庫不為空或為現有備份儲存庫。" #: modules/backups/privileged.py:74 -#, fuzzy -#| msgid "A library with this name already exists." msgid "An archive with given name already exists in the repository." -msgstr "已存在同樣名稱的圖書館。" +msgstr "存儲庫中已存在同樣名稱的存檔。" #: modules/backups/privileged.py:81 msgid "Archive with given name was not found in the repository." -msgstr "" +msgstr "在存儲庫中找不到具有指定名稱的存檔。" #: modules/backups/privileged.py:87 msgid "Backup system is busy with another operation." -msgstr "" +msgstr "備份系統正忙於其他操作。" #: modules/backups/privileged.py:92 msgid "Not enough space left on the disk or remote location." -msgstr "" +msgstr "磁碟或遠端位置上沒有足夠的空間。" #: modules/backups/repository.py:94 msgid "Existing repository is not encrypted." @@ -1303,27 +1300,25 @@ msgstr "管理" #: modules/cockpit/manifest.py:24 msgid "Web terminal" -msgstr "" +msgstr "網路終端機" #: modules/cockpit/manifest.py:25 modules/storage/__init__.py:47 #: modules/storage/__init__.py:319 modules/storage/__init__.py:350 #: modules/storage/__init__.py:396 msgid "Storage" -msgstr "" +msgstr "儲存空間" #: modules/cockpit/manifest.py:26 -#, fuzzy -#| msgid "Local Network Domain" msgid "Networking" -msgstr "內部網路網域" +msgstr "網路" #: modules/cockpit/manifest.py:27 modules/names/templates/names.html:20 msgid "Services" -msgstr "" +msgstr "服務" #: modules/cockpit/manifest.py:28 msgid "Logs" -msgstr "" +msgstr "日誌" #: modules/cockpit/manifest.py:29 modules/performance/__init__.py:16 #: modules/performance/__init__.py:40 @@ -1479,15 +1474,15 @@ msgstr "STUN/TURN 伺服器 URI 列表無效" #: modules/coturn/manifest.py:7 modules/janus/manifest.py:16 msgid "Video conference" -msgstr "" +msgstr "視訊會議" #: modules/coturn/manifest.py:7 msgid "STUN" -msgstr "" +msgstr "STUN" #: modules/coturn/manifest.py:7 msgid "TURN" -msgstr "" +msgstr "TURN" #: modules/coturn/templates/coturn.html:15 msgid "Use the following URLs to configure your communication server:" @@ -1527,11 +1522,9 @@ msgstr "-- 尚未設定時區 --" #: modules/datetime/manifest.py:15 msgid "Network time" -msgstr "" +msgstr "網路時間" #: modules/datetime/manifest.py:15 -#, fuzzy -#| msgid "Time Zone" msgid "Timezone" msgstr "時區" @@ -1571,15 +1564,13 @@ msgid "Bittorrent client written in Python/PyGTK" msgstr "以 Python/PyGTK 寫的 Bittorrent 客戶端" #: modules/deluge/manifest.py:21 modules/transmission/manifest.py:39 -#, fuzzy -#| msgid "BitTorrent Web Client" msgid "BitTorrent" -msgstr "BitTorrent 網頁客戶端" +msgstr "BitTorrent" #: modules/deluge/manifest.py:21 modules/roundcube/manifest.py:23 #: modules/transmission/manifest.py:39 msgid "Web client" -msgstr "" +msgstr "網頁客戶端" #: modules/deluge/manifest.py:21 modules/syncthing/manifest.py:58 #: modules/transmission/manifest.py:39 From 243b2df318a25d35338f274d566b501c7cffdc2a Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 10 Feb 2025 20:58:47 -0500 Subject: [PATCH 45/49] doc: Fetch latest manual Signed-off-by: James Valleroy --- doc/manual/en/ReleaseNotes.raw.wiki | 5 +++++ doc/manual/es/ReleaseNotes.raw.wiki | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 7f9c7e4c1..e21f0b29b 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,11 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 25.3 (2025-02-10) == + + * debian: Switch from dnsutils to bind9-dnsutils + * locale: Update translations for Albanian, Bulgarian, Chinese (Simplified Han script), Chinese (Traditional Han script), Czech, Dutch, German, Turkish + == FreedomBox 25.2 (2025-01-27) == === Highlights === diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index 7f9c7e4c1..e21f0b29b 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,11 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 25.3 (2025-02-10) == + + * debian: Switch from dnsutils to bind9-dnsutils + * locale: Update translations for Albanian, Bulgarian, Chinese (Simplified Han script), Chinese (Traditional Han script), Czech, Dutch, German, Turkish + == FreedomBox 25.2 (2025-01-27) == === Highlights === From e8f8e69143a62ad04df5bbe4a8a52839415e49c6 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Mon, 10 Feb 2025 20:59:56 -0500 Subject: [PATCH 46/49] Release v25.3 to unstable Signed-off-by: James Valleroy --- debian/changelog | 33 +++++++++++++++++++++++++++++++++ plinth/__init__.py | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 3b5cd8e70..531087e6b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,36 @@ +freedombox (25.3) unstable; urgency=medium + + [ Burak Yavuz ] + * Translated using Weblate (Turkish) + + [ 大王叫我来巡山 ] + * Translated using Weblate (Chinese (Simplified Han script)) + + [ Jiří Podhorecký ] + * Translated using Weblate (Czech) + + [ 109247019824 ] + * Translated using Weblate (Bulgarian) + * Translated using Weblate (Bulgarian) + + [ Besnik Bleta ] + * Translated using Weblate (Albanian) + * Translated using Weblate (Albanian) + + [ Dietmar ] + * Translated using Weblate (German) + + [ James Valleroy ] + * debian: Switch from dnsutils to bind9-dnsutils (Closes: #1094944) + + [ ikmaak ] + * Translated using Weblate (Dutch) + + [ pesder ] + * Translated using Weblate (Chinese (Traditional Han script)) + + -- James Valleroy Mon, 10 Feb 2025 20:59:35 -0500 + freedombox (25.2) unstable; urgency=medium [ Dietmar ] diff --git a/plinth/__init__.py b/plinth/__init__.py index 28f77b7ff..21d6b4dd2 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '25.2' +__version__ = '25.3' From 1ab78fb9da485d13624999b1a88a4b4293422423 Mon Sep 17 00:00:00 2001 From: Benedek Nagy Date: Thu, 30 Jan 2025 19:26:19 +0100 Subject: [PATCH 47/49] email: fix fresh installation issue The changes introduced in https://salsa.debian.org/freedombox-team/freedombox/-/merge_requests/2616 make the email app installation fail if it's installed for the first time. This patch ensures that 95-freedombox-sieve.conf is present and that dovecot is restarted before privileged.setup_spam() is run. This way, the sievec command can run. Signed-off-by: Benedek Nagy Reviewed-by: James Valleroy --- plinth/modules/email/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plinth/modules/email/__init__.py b/plinth/modules/email/__init__.py index a1dba4139..e3678963b 100644 --- a/plinth/modules/email/__init__.py +++ b/plinth/modules/email/__init__.py @@ -109,7 +109,6 @@ class EmailApp(plinth.app.App): '/etc/dovecot/conf.d/90-freedombox-mailboxes.conf', '/etc/dovecot/conf.d/90-freedombox-master.conf', '/etc/dovecot/conf.d/90-freedombox-tls.conf', - '/etc/dovecot/conf.d/95-freedombox-sieve.conf', '/etc/dovecot/conf.d/freedombox-ldap.conf.ext', '/etc/fail2ban/jail.d/dovecot-freedombox.conf', '/etc/postfix/freedombox-aliases.cf', @@ -123,6 +122,7 @@ class EmailApp(plinth.app.App): '/etc/dovecot/freedombox-sieve/learn-ham.sieve', '/etc/dovecot/freedombox-sieve/learn-spam.sieve', '/etc/dovecot/freedombox-sieve-after/sort-spam.sieve', + '/etc/dovecot/conf.d/95-freedombox-sieve.conf' ]) self.add(dropin_configs_sieve) @@ -212,6 +212,7 @@ class EmailApp(plinth.app.App): # Enable drop-in configuration files component for sieve (temporarily) # to ensure that sievec can compile. self.get_component('dropin-configs-email-sieve').enable() + service_privileged.try_restart('dovecot') privileged.setup_spam() # Restart daemons From 83efbc3ddf51033531e2dd66a285068d8487b3a4 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sat, 15 Feb 2025 17:58:31 -0500 Subject: [PATCH 48/49] doc: Fetch latest manual Signed-off-by: James Valleroy --- doc/manual/en/ReleaseNotes.raw.wiki | 4 ++++ doc/manual/es/ReleaseNotes.raw.wiki | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index e21f0b29b..8190feceb 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,10 @@ 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.3.1 (2025-02-15) == + + * email: fix fresh installation issue + == FreedomBox 25.3 (2025-02-10) == * debian: Switch from dnsutils to bind9-dnsutils diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index e21f0b29b..8190feceb 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,10 @@ 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.3.1 (2025-02-15) == + + * email: fix fresh installation issue + == FreedomBox 25.3 (2025-02-10) == * debian: Switch from dnsutils to bind9-dnsutils From 6d2f992a42ebb2d5950d163a14b435fac5723df9 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sat, 15 Feb 2025 17:59:27 -0500 Subject: [PATCH 49/49] Release v25.3.1 to unstable Signed-off-by: James Valleroy --- debian/changelog | 10 ++++++++++ plinth/__init__.py | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 531087e6b..d9991cf77 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +freedombox (25.3.1) unstable; urgency=medium + + [ Benedek Nagy ] + * email: fix fresh installation issue + + [ James Valleroy ] + * doc: Fetch latest manual + + -- James Valleroy Sat, 15 Feb 2025 17:40:30 -0500 + freedombox (25.3) unstable; urgency=medium [ Burak Yavuz ] diff --git a/plinth/__init__.py b/plinth/__init__.py index 21d6b4dd2..5e9b59728 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '25.3' +__version__ = '25.3.1'