Compare commits

...

5 Commits

Author SHA1 Message Date
Sunil Mohan Adapa
5cee6563cc
diagnostics: Fix notification severity when skipping tests
Fixes: #2531.

- Currently, when a diagnostics test is skipped, the notification shows up with
'error' severity. Instead of this, treat 'skipped' and 'not done' tests as
passed for the purpose of the notification.

Tests:

- Change code in package.py to set the result of diagnostic test to be 'SKIPPED'
and 'NOT_DONE', in both cases, the notification is not shown after running full
diagnostic runs.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-08-21 19:38:33 +05:30
大王叫我来巡山
0cf3ffed31
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 61.6% (1159 of 1880 strings)
2025-08-21 09:02:14 +00:00
Coucouf
4d510b86c1
Translated using Weblate (French)
Currently translated at 100.0% (1880 of 1880 strings)
2025-08-21 09:02:12 +00:00
Sunil Mohan Adapa
a0b2625c6a
tests: functional: Fix incorrect skipping of install tests
Fixes: #2529.

Tests:

- Run functional tests on bepasty. Without the patch, many tests are skipped.
With the patch, all tests are executed. Introducing a sleep delay in
Package.is_available() method also works.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2025-08-21 10:59:10 +03:00
Sunil Mohan Adapa
4e1ee2371f
ui: Fix missing semicolon in JS file
- Mostly for styling and just to fix the linter.

Tests:

- After package availability check in bepasty page, 'Install' button is enabled.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2025-08-21 10:58:35 +03:00
5 changed files with 250 additions and 235 deletions

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: FreedomBox UI\n" "Project-Id-Version: FreedomBox UI\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-18 20:35-0400\n" "POT-Creation-Date: 2025-08-18 20:35-0400\n"
"PO-Revision-Date: 2025-08-20 04:01+0000\n" "PO-Revision-Date: 2025-08-21 09:02+0000\n"
"Last-Translator: Coucouf <coucouf@coucouf.fr>\n" "Last-Translator: Coucouf <coucouf@coucouf.fr>\n"
"Language-Team: French <https://hosted.weblate.org/projects/freedombox/" "Language-Team: French <https://hosted.weblate.org/projects/freedombox/"
"freedombox/fr/>\n" "freedombox/fr/>\n"
@ -777,7 +777,7 @@ msgid ""
msgstr "" msgstr ""
"Lancez la commande suivante sur la machine hébergeant le serveur SSH. La " "Lancez la commande suivante sur la machine hébergeant le serveur SSH. La "
"sortie doit correspondre à lune des valeurs affichées ci-dessus. Vous " "sortie doit correspondre à lune des valeurs affichées ci-dessus. Vous "
"pouvez également utiliser DSA, ECDSA, Ed25519, etc. à la place de RSA en " "pouvez également utiliser DSA, ECDSA, Ed25519 à la place de RSA en "
"indiquant le chemin du fichier correspondant dans la commande." "indiquant le chemin du fichier correspondant dans la commande."
#: modules/backups/templates/verify_ssh_hostkey.html:66 #: modules/backups/templates/verify_ssh_hostkey.html:66
@ -1404,8 +1404,8 @@ msgid ""
"Here you can set some general configuration options like webserver home page " "Here you can set some general configuration options like webserver home page "
"etc." "etc."
msgstr "" msgstr ""
"Cette page vous permet de modifier certains paramètres généraux comme la " "Cette page vous permet de modifier certains paramètres généraux tels que la "
"page daccueil du serveur web, etc…" "page daccueil du serveur web…"
#: modules/config/__init__.py:42 #: modules/config/__init__.py:42
msgid "General Configuration" msgid "General Configuration"
@ -3226,9 +3226,9 @@ msgid ""
msgstr "" msgstr ""
"Cette application transforme votre {box_name} en un ordinateur de bureau si " "Cette application transforme votre {box_name} en un ordinateur de bureau si "
"vous y connectez physiquement un moniteur, un clavier et une souris. Un " "vous y connectez physiquement un moniteur, un clavier et une souris. Un "
"navigateur, une suite bureautique et d'autre utilitaires de base sont " "navigateur, une suite bureautique et dautres utilitaires de base sont "
"disponibles. Vous pouvez installer davantage d'applications graphiques en " "fournis. Un catalogue de logiciels est mis à votre disposition pour vous "
"utilisant le centre de logiciels fourni avec." "permettre dinstaller davantage dapplications graphiques."
#: modules/gnome/__init__.py:26 #: modules/gnome/__init__.py:26
msgid "" msgid ""
@ -3350,15 +3350,15 @@ msgid ""
"and a Tor relay, on a device that can replace your Wi-Fi router, so that " "and a Tor relay, on a device that can replace your Wi-Fi router, so that "
"your data stays with you." "your data stays with you."
msgstr "" msgstr ""
"%(box_name)s est un projet communautaire consacré au développement, à la " "%(box_name)s est un projet communautaire consacré à la conception, au "
"conception et à la promotion de serveurs personnels utilisant des logiciels " "développement et à la promotion de serveurs personnels utilisant des "
"libres pour les communications privées. Il est pensé comme un appareil " "logiciels libres pour les communications privées. Il est pensé comme un "
"réseau faisant linterface entre vous et le reste de lInternet tout en " "appareil réseau faisant linterface entre vous et le reste de lInternet "
"protégeant votre vie privée et vos données. %(box_name)s intègre des " "tout en protégeant votre vie privée et vos données. Il permet dhéberger des "
"applications permettant dhéberger par exemple un blogue, un wiki, un site " "applications telles quun blogue, un wiki, un site web, un réseau social, de "
"web, un réseau social, de gérer des courriels, un serveur mandataire web ou " "gérer des courriels, un serveur mandataire web ou un relais Tor, le tout sur "
"un relais Tor, le tout sur une machine qui peut également remplacer votre " "une machine qui peut également remplacer votre routeur Wi-Fi de manière à ce "
"routeur Wi-Fi. De cette manière vos données restent sous votre contrôle." "que vos données restent sous votre contrôle."
#: modules/help/templates/help_about.html:62 #: modules/help/templates/help_about.html:62
msgid "" msgid ""
@ -3718,9 +3718,9 @@ msgid ""
"An administrator account is created at this time. Home Assistant maintains " "An administrator account is created at this time. Home Assistant maintains "
"its own user accounts." "its own user accounts."
msgstr "" msgstr ""
"Il faut rapidement configurer linterface Web de Home Assistant une fois que " "Il faut rapidement configurer linterface Web de Home Assistant une fois l"
"lappli a été installée. Un compte administrateur sera créé à ce moment-là. " "appli installée. Un compte administrateur sera créé à ce moment-là. Home "
"Home Assistant maintient sa propre liste de comptes utilisateurs." "Assistant maintient sa propre liste de comptes utilisateurs."
#: modules/homeassistant/__init__.py:43 #: modules/homeassistant/__init__.py:43
#, python-brace-format #, python-brace-format
@ -3730,11 +3730,11 @@ msgid ""
"reviews are done by the upstream project and not by Debian/{box_name}. " "reviews are done by the upstream project and not by Debian/{box_name}. "
"Updates are performed following an independent cycle." "Updates are performed following an independent cycle."
msgstr "" msgstr ""
"Veuillez noter que Nextcloud est installé et fonctionne au sein dun " "Veuillez noter que Home Assistant est installé et fonctionne au sein dun "
"conteneur fourni par la communauté Nextcloud. Les vérifications de sécurité, " "conteneur fourni par le projet Home Assistant. Les vérifications de "
"de qualité, de respect de la vie privée et de la réglementation sont " "sécurité, de qualité, de respect de la vie privée et de la réglementation "
"effectuées par le projet en amont et pas par Debian/{box_name}. Les mises à " "sont réalisées par le projet en amont et pas par Debian/{box_name}. Les "
"jour sont effectuées selon un cycle indépendant." "mises à jour sont publiées selon un cycle indépendant."
#: modules/homeassistant/__init__.py:48 #: modules/homeassistant/__init__.py:48
msgid "This app is experimental." msgid "This app is experimental."
@ -3779,6 +3779,10 @@ msgid ""
"URL path. Please select the domain on which Home Assistant will be " "URL path. Please select the domain on which Home Assistant will be "
"available. Home Assistant will not be available on other domains." "available. Home Assistant will not be available on other domains."
msgstr "" msgstr ""
"Home Assistant nécessite un domaine dédié pour fonctionner et ne peut pas se "
"contenter dun chemin dURL sous un domaine existant. Veuillez sélectionner "
"le domaine par lequel Home Assistant sera accessible. Cest le seul domaine "
"par lequel Home Assistant sera accessible."
#: modules/homeassistant/templates/homeassistant.html:28 #: modules/homeassistant/templates/homeassistant.html:28
#, python-format #, python-format
@ -3788,6 +3792,11 @@ msgid ""
"href=\"%(names_url)s\">Names</a> app and <a " "href=\"%(names_url)s\">Names</a> app and <a "
"href=\"%(dynamic_dns_url)s\">Dynamic DNS</a> app for configuring subdomains." "href=\"%(dynamic_dns_url)s\">Dynamic DNS</a> app for configuring subdomains."
msgstr "" msgstr ""
"Un domaine dédié peut être mis à la disposition de Home Assistant en "
"configurant un sous-domaine tel que homeassistant.mydomain.example. Veuillez "
"consulter les applis <a href=\"%(names_url)s\">Services de nommage</a> et <a "
"href=\"%(dynamic_dns_url)s\">Client DNS dynamique</a> pour la configuration "
"de sous-domaines."
#: modules/homeassistant/templates/homeassistant.html:40 #: modules/homeassistant/templates/homeassistant.html:40
#: modules/ikiwiki/templates/ikiwiki_create.html:18 #: modules/ikiwiki/templates/ikiwiki_create.html:18
@ -4792,7 +4801,7 @@ msgstr "DLNA"
#: modules/minidlna/views.py:33 #: modules/minidlna/views.py:33
msgid "Updated media directory" msgid "Updated media directory"
msgstr "Répertoire multimédia mis à jour" msgstr "Répertoire des fichiers multimédia mis à jour"
#: modules/miniflux/__init__.py:18 #: modules/miniflux/__init__.py:18
msgid "" msgid ""
@ -4816,12 +4825,12 @@ msgid ""
"are several third-party <a href=\"https://miniflux.app/docs/apps." "are several third-party <a href=\"https://miniflux.app/docs/apps."
"html\">clients</a> as well." "html\">clients</a> as well."
msgstr "" msgstr ""
"Les fonctionnalités clefs comprennent des raccourcis clavier pour une " "Les fonctionnalités clé comprennent des raccourcis clavier pour une "
"navigation rapide, une recherche en texte intégral, le filtrage des " "navigation rapide, une recherche en texte intégral, le filtrage des "
"articles, des catégories et des favoris. Miniflux préserve la vie privée de " "articles, des catégories et des favoris. Miniflux préserve la vie privée des "
"l'utilisateur en enlevant les traceurs. L'interface principale est fondée " "utilisateurs en supprimant les traceurs. Linterface principale est une "
"sur le Web. Il existe également plusieurs <a href=\"https://miniflux.app/" "interface Web. Il existe également plusieurs <a href="
"docs/apps.html\">clients</a> tiers." "\"https://miniflux.app/docs/apps.html\">clients</a> tiers."
#: modules/miniflux/__init__.py:42 modules/miniflux/manifest.py:10 #: modules/miniflux/__init__.py:42 modules/miniflux/manifest.py:10
msgid "Miniflux" msgid "Miniflux"
@ -6272,7 +6281,7 @@ msgstr "lien local"
#: modules/networks/views.py:32 #: modules/networks/views.py:32
msgid "dhcp" msgid "dhcp"
msgstr "dhcp" msgstr "DHCP"
#: modules/networks/views.py:33 #: modules/networks/views.py:33
msgid "ignore" msgid "ignore"
@ -6527,11 +6536,11 @@ msgid ""
"done by the upstream project and not by Debian/{box_name}. Updates are " "done by the upstream project and not by Debian/{box_name}. Updates are "
"performed following an independent cycle." "performed following an independent cycle."
msgstr "" msgstr ""
"Veuillez noter que Nextcloud est installé et fonctionne au sein d'un " "Veuillez noter que Nextcloud est installé et fonctionne au sein dun "
"conteneur fourni par la communauté Nextcloud. Les vérifications de sécurité, " "conteneur fourni par la communauté Nextcloud. Les vérifications de sécurité, "
"de qualité, de confidentialité et de légalité sont effectuées par le projet " "de qualité, de respect de la vie privée et de la réglementation sont "
"en amont et pas par Debian/{box_name}. Les mises à jour sont effectuées en " "réalisées par le projet en amont et pas par Debian/{box_name}. Les mises à "
"fonction d'un cycle indépendant." "jour sont publiées selon un cycle indépendant."
#: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11 #: modules/nextcloud/__init__.py:56 modules/nextcloud/manifest.py:11
#: modules/nextcloud/manifest.py:18 #: modules/nextcloud/manifest.py:18
@ -8444,10 +8453,10 @@ msgid ""
"You can view the storage media currently in use, mount and unmount removable " "You can view the storage media currently in use, mount and unmount removable "
"media, expand the root partition etc." "media, expand the root partition etc."
msgstr "" msgstr ""
"Ce module vous permet de gérer les médias de stockage connectés à votre " "Ce module vous permet de gérer les périphériques de stockage connectés à "
"{box_name}. Vous pouvez visualiser les médias de stockage en cours " "votre {box_name}. Vous pouvez visualiser les périphériques de stockage en "
"dutilisation, monter et démonter des médias amovibles, étendre la partition " "cours dutilisation, monter et démonter des périphériques amovibles, étendre "
"racine, etc." "la partition racine…"
#: modules/storage/__init__.py:227 #: modules/storage/__init__.py:227
#, python-brace-format #, python-brace-format
@ -8771,12 +8780,12 @@ msgid ""
"TiddlyWiki. Encrypting individual tiddlers or password-protecting a wiki " "TiddlyWiki. Encrypting individual tiddlers or password-protecting a wiki "
"file is possible from within the application." "file is possible from within the application."
msgstr "" msgstr ""
"C'est une application versatile avec un large éventail de cas d'utilisation " "C'est une application versatile avec un large éventail de cas dutilisation -"
"- carnet de notes non linéaire, site Web, base de connaissances personnelle, " " carnet de notes non linéaire, site Web, base de connaissances personnelle, "
"système de gestion de tâches et de projets, journal intime, etc. Les " "système de gestion de tâches et de projets, journal intime… Il est possible "
"extension peuvent étendre les fonctionnalités de TiddlyWiki. Le chiffrement " "des fonctionnalités à TiddlyWiki via des extensions. Le chiffrement "
"de tiddlers individuels ou la protection par mot de passe d'un fichier wiki " "individuel dunités dinformation «tiddlers» ou la protection par mot de "
"est possible depuis l'application elle-même." "passe de fichiers wiki est possible depuis l'application elle-même."
#: modules/tiddlywiki/__init__.py:37 #: modules/tiddlywiki/__init__.py:37
#, python-brace-format #, python-brace-format
@ -9248,7 +9257,7 @@ msgid ""
"When enabled, FreedomBox will update to the next stable distribution release " "When enabled, FreedomBox will update to the next stable distribution release "
"when it is available." "when it is available."
msgstr "" msgstr ""
"En activant cette option, la FreedomBox se mettra à jour vers la prochaine " "En activant cette option, la FreedomBox se mettra à niveau vers la prochaine "
"version stable majeure lorsque celle-ci sera publiée." "version stable majeure lorsque celle-ci sera publiée."
#: modules/upgrades/forms.py:34 #: modules/upgrades/forms.py:34
@ -9287,7 +9296,7 @@ msgstr "Suivant"
#: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:11 #: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:11
msgid "Confirm Distribution Update?" msgid "Confirm Distribution Update?"
msgstr "Confirmer la mise à jour de la distribution?" msgstr "Confirmer la mise à niveau de la distribution?"
#: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:21 #: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:21
#, python-format #, python-format
@ -9296,17 +9305,17 @@ msgid ""
"released. Proceed only if you wish to help with beta testing of %(box_name)s " "released. Proceed only if you wish to help with beta testing of %(box_name)s "
"functionality." "functionality."
msgstr "" msgstr ""
"Vous êtes sur le point de mettre à jour vers la prochaine version de la " "Vous êtes sur le point de lancer la mise à niveau vers la prochaine version "
"distribution avant sa publication. Continuez seulement si vous souhaitez " "de la distribution avant sa publication. Ne continuez que si vous souhaitez "
"aider à tester les fonctionnalités bêtas de %(box_name)s." "aider à tester les fonctionnalités bêtas de la %(box_name)s."
#: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:32 #: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:32
msgid "" msgid ""
"Take a full backup of all apps and data before performing a distribution " "Take a full backup of all apps and data before performing a distribution "
"update." "update."
msgstr "" msgstr ""
"Prenez une sauvegarde complète de toutes les applications et données avant " "Faites une sauvegarde complète de toutes les applications et données avant "
"d'effectuer une mise à jour de distribution." "de lancer une mise à niveau de la distribution."
#: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:38 #: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:38
msgid "" msgid ""
@ -9331,7 +9340,7 @@ msgstr ""
#: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:66 #: modules/upgrades/templates/upgrades-dist-upgrade-confirm.html:66
msgid "Confirm & Start Distribution Update" msgid "Confirm & Start Distribution Update"
msgstr "Confirmer et démarrer la mise à jour de la distribution" msgstr "Confirmer et démarrer la mise à niveau de la distribution"
#: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:15 #: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:15
msgid "" msgid ""
@ -9339,15 +9348,15 @@ msgid ""
"apps will be unavailable during this period. Don't interrupt the process by " "apps will be unavailable during this period. Don't interrupt the process by "
"shutting down or interrupting power to the machine." "shutting down or interrupting power to the machine."
msgstr "" msgstr ""
"La mise à jour de la distribution a démarré. Cette opération peut prendre " "La mise à niveau de la distribution a démarré. Cette opération peut prendre "
"plusieurs heures. La plupart des applications seront indisponibles pendant " "plusieurs heures. La plupart des applications seront indisponibles pendant "
"cette période. N'interrompez pas le processus en éteignant la machine ou en " "cette période. Veillez à ne pas interrompre le processus en éteignant la "
"coupant son alimentation." "machine ou en coupant son alimentation."
#: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:21 #: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:21
msgid "Distribution update has completed. Reboot the machine, if necessary." msgid "Distribution update has completed. Reboot the machine, if necessary."
msgstr "" msgstr ""
"La mise à jour de la distribution est terminée. Redémarrez la machine, si " "La mise à niveau de la distribution est terminée. Redémarrez la machine si "
"nécessaire." "nécessaire."
#: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:25 #: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:25
@ -9357,10 +9366,11 @@ msgid ""
"then. See <a href=\"%(dist_upgrade_url)s\">manual</a> page for expected " "then. See <a href=\"%(dist_upgrade_url)s\">manual</a> page for expected "
"changes and transitions during the distribution upgrade." "changes and transitions during the distribution upgrade."
msgstr "" msgstr ""
"La mise à jour de la distribution va bientôt commencer. Prenez une " "La mise à niveau de la distribution va bientôt commencer. Prenez soin de "
"sauvegarde des applications et données auparavant. Voyez la page du <a " "faire une sauvegarde des applications et données auparavant. Veuillez "
"href=\"%(dist_upgrade_url)s\">manuel</a> pour les modifications et " "consulter la page du <a href=\"%(dist_upgrade_url)s\">manuel</a> pour vous "
"transitions attendues pendant la mise à niveau de la distribution." "renseigner sur les modifications et transitions attendues lors de la mise à "
"niveau de la distribution."
#: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:31 #: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:31
#, python-format #, python-format
@ -9369,14 +9379,15 @@ msgid ""
"and data before then. See <a href=\"%(dist_upgrade_url)s\">manual</a> page " "and data before then. See <a href=\"%(dist_upgrade_url)s\">manual</a> page "
"for expected changes and transitions during the distribution upgrade." "for expected changes and transitions during the distribution upgrade."
msgstr "" msgstr ""
"La mise à jour de la distribution va démarrer dans %(in_days)s jours. Prenez " "La mise à niveau de la distribution est planifiée pour dans %(in_days)s "
"une sauvegarde des applications et données auparavant. Voyez la page du <a " "jours. Prenez soin de faire une sauvegarde des applications et données "
"href=\"%(dist_upgrade_url)s\">manuel</a> pour les modifications et " "auparavant. Veuillez consulter la page du <a href=\"%(dist_upgrade_url)s\""
"transitions attendues pendant la mise à niveau de la distribution." ">manuel</a> pour vous renseigner sur les modifications et transitions "
"attendues lors de la mise à niveau de la distribution."
#: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:42 #: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:42
msgid "Go to Distribution Update" msgid "Go to Distribution Update"
msgstr "Aller à la mise à jour de la distribution" msgstr "Aller à la mise à niveau de la distribution"
#: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46 #: modules/upgrades/templates/upgrades-dist-upgrade-notification.html:46
#: modules/upgrades/templates/upgrades-new-release.html:22 #: modules/upgrades/templates/upgrades-new-release.html:22
@ -9400,23 +9411,24 @@ msgstr ""
"Votre %(box_name)s reçoit les mises à jour de sécurité, les correctifs " "Votre %(box_name)s reçoit les mises à jour de sécurité, les correctifs "
"importants et certaines fonctionnalités via les mises à jour logicielles " "importants et certaines fonctionnalités via les mises à jour logicielles "
"habituelles. Cependant, afin de fournir un cycle de vie logiciel durable aux " "habituelles. Cependant, afin de fournir un cycle de vie logiciel durable aux "
"%(box_name)s, le système d'exploitation doit subir une mise à niveau de la " "%(box_name)s, le système dexploitation doit subir une mise à niveau de la "
"distribution environ tous les deux ans. Cette mise à niveau apporte des " "distribution tous les deux ans environ. Cette mise à niveau apporte des "
"fonctionnalités et modifications majeures, et il peut arriver que certaines " "fonctionnalités et modifications majeures, et il peut arriver que certaines "
"anciennes fonctionnalités disparaissent. Veuillez consulter le <a href=" "anciennes fonctionnalités disparaissent. Veuillez consulter le <a href="
"\"%(dist_upgrade_url)s\">manuel</a> pour vous renseigner sur modifications " "\"%(dist_upgrade_url)s\">manuel</a> pour vous renseigner sur les "
"et transitions attendues lors des mises à niveau de la distribution. Si vous " "modifications et transitions attendues lors des mises à niveau de la "
"nêtes pas intéressé pas ces modifications vous pouvez continuer à utiliser " "distribution. Si vous nêtes pas intéressé pas ces changements vous pouvez "
"chaque distribution pendant au moins <a href=\"https://wiki.debian.org/LTS\"" "continuer à utiliser chaque distribution pendant au moins <a href="
">5 ans</a> avant de devoir faire une mise à niveau." "\"https://wiki.debian.org/LTS\">5 ans</a> avant de devoir passer par une "
"mise à niveau."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:34 #: modules/upgrades/templates/upgrades-dist-upgrade.html:34
msgid "" msgid ""
"Distribution update is currently running. This operation may take several " "Distribution update is currently running. This operation may take several "
"hours. Most apps will be unavailable during this period." "hours. Most apps will be unavailable during this period."
msgstr "" msgstr ""
"La mise à jour de la distribution s'exécute en ce moment. Cette opération " "La mise à niveau de la distribution est en cours dexécution. Cette "
"peut prendre plusieurs heures. La plupart des applications seront " "opération peut prendre plusieurs heures. La plupart des applications seront "
"indisponibles pendant cette période." "indisponibles pendant cette période."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:50 #: modules/upgrades/templates/upgrades-dist-upgrade.html:50
@ -9432,12 +9444,12 @@ msgid ""
"You need to have at least 5 GB of free space available on primary disk to " "You need to have at least 5 GB of free space available on primary disk to "
"perform a distribution update." "perform a distribution update."
msgstr "" msgstr ""
"Vous devez avoir au moins 5 Go d'espace libre disponible sur votre disque " "Vous devez disposer dau moins 5 Go despace libre sur votre disque "
"primaire pour effectuer une mise à jour de la distribution." "principal pour lancer une mise à niveau de la distribution."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:65 #: modules/upgrades/templates/upgrades-dist-upgrade.html:65
msgid "Your current distribution is mixed or not understood." msgid "Your current distribution is mixed or not understood."
msgstr "Votre distribution actuelle est mixte ou incomprise." msgstr "Votre distribution actuelle est mixte ou inconnue."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:72 #: modules/upgrades/templates/upgrades-dist-upgrade.html:72
msgid "Current Distribution:" msgid "Current Distribution:"
@ -9445,11 +9457,11 @@ msgstr "Distribution actuelle :"
#: modules/upgrades/templates/upgrades-dist-upgrade.html:74 #: modules/upgrades/templates/upgrades-dist-upgrade.html:74
msgid "Unknown or mixed" msgid "Unknown or mixed"
msgstr "Inconnue ou mixte" msgstr "Mixte ou inconnue"
#: modules/upgrades/templates/upgrades-dist-upgrade.html:77 #: modules/upgrades/templates/upgrades-dist-upgrade.html:77
msgid "Rolling release distribution" msgid "Rolling release distribution"
msgstr "Distribution rolling release" msgstr "Distribution de type « rolling release »"
#: modules/upgrades/templates/upgrades-dist-upgrade.html:84 #: modules/upgrades/templates/upgrades-dist-upgrade.html:84
#, python-format #, python-format
@ -9471,7 +9483,7 @@ msgstr "Date de publication probable : %(date)s."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:107 #: modules/upgrades/templates/upgrades-dist-upgrade.html:107
msgid "Next stable distribution is not available yet." msgid "Next stable distribution is not available yet."
msgstr "La prochaine distribution stable n'est pas encore disponible." msgstr "La prochaine distribution stable nest pas encore disponible."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:113 #: modules/upgrades/templates/upgrades-dist-upgrade.html:113
#, python-format #, python-format
@ -9480,17 +9492,18 @@ msgid ""
"necessary. Thank you for helping test the %(box_name)s project. Please " "necessary. Thank you for helping test the %(box_name)s project. Please "
"report any problems you notice." "report any problems you notice."
msgstr "" msgstr ""
"Vous êtes sur une distribution en rolling release. Aucune mise à jour de la " "Vous êtes sur une distribution de type «rolling release». Aucune mise à "
"distribution n'est nécessaire. Merci d'avoir aidé à tester le projet " "niveau de la distribution nest nécessaire. Merci daider à tester le projet "
"%(box_name)s. Veuillez signaler tout problème que vous remarquerez." "%(box_name)s! Veuillez signaler tout problème que vous remarquerez."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:121 #: modules/upgrades/templates/upgrades-dist-upgrade.html:121
msgid "" msgid ""
"A previous run of distribution update may have been interrupted. Please re-" "A previous run of distribution update may have been interrupted. Please re-"
"run the distribution update." "run the distribution update."
msgstr "" msgstr ""
"Une précédente exécution de la mise à jour de la distribution peut avoir été " "Il semblerait quune précédente exécution de la mise à niveau de la "
"interrompu. Veuillez ré-exécuter la mise à jour de la distribution." "distribution a été interrompue. Veuillez relancer la mise à niveau de la "
"distribution."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:128 #: modules/upgrades/templates/upgrades-dist-upgrade.html:128
#, python-format #, python-format
@ -9500,8 +9513,8 @@ msgid ""
"wish." "wish."
msgstr "" msgstr ""
"Une nouvelle distribution stable est disponible. Votre %(box_name)s sera " "Une nouvelle distribution stable est disponible. Votre %(box_name)s sera "
"mise à jour automatiquement dans %(period)s. Vous pouvez choisir de mettre à " "mise à jour automatiquement dans %(period)s. Vous pouvez aussi lancer la "
"jour manuellement maintenant, si vous le souhaitez." "mise à niveau manuellement dès maintenant si vous le souhaitez."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:136 #: modules/upgrades/templates/upgrades-dist-upgrade.html:136
#, python-format #, python-format
@ -9510,8 +9523,8 @@ msgid ""
"automatically soon. You may choose to update manually now, if you wish." "automatically soon. You may choose to update manually now, if you wish."
msgstr "" msgstr ""
"Une nouvelle distribution stable est disponible. Votre %(box_name)s sera " "Une nouvelle distribution stable est disponible. Votre %(box_name)s sera "
"mise à jour automatiquement bientôt. Vous pouvez choisir de mettre à jour " "bientôt mise à jour automatiquement. Vous pouvez aussi lancer la mise à "
"manuellement maintenant, si vous le souhaitez." "niveau manuellement dès maintenant si vous le souhaitez."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:144 #: modules/upgrades/templates/upgrades-dist-upgrade.html:144
#, python-format #, python-format
@ -9521,24 +9534,25 @@ msgid ""
"next distribution manually. This setup may experience occational app " "next distribution manually. This setup may experience occational app "
"failures until the next stable release." "failures until the next stable release."
msgstr "" msgstr ""
"Vous êtes sur la distribution stable la plus récente. Cela est recommandé. " "Vous êtes sur la distribution stable la plus récente. Cest loption "
"Cependant, si vous souhaitez aider à tester les fonctionnalités bêtas de " "recommandée. Cependant, si vous souhaitez aider à tester les fonctionnalités "
"%(box_name)s, vous pouvez mettre à jour vers la prochaine distribution " "bêtas de la %(box_name)s, vous pouvez mettre à niveau vers la prochaine "
"manuellement. Cette configuration peut subir des défaillances d'applications " "distribution manuellement. Cette option peut vous exposer des défaillances "
"jusqu'à la publication de la prochaine version stable." "ponctuelles dapplications jusquà la publication de la prochaine version "
"stable."
#: modules/upgrades/templates/upgrades-dist-upgrade.html:157 #: modules/upgrades/templates/upgrades-dist-upgrade.html:157
#: modules/upgrades/templates/upgrades-dist-upgrade.html:172 #: modules/upgrades/templates/upgrades-dist-upgrade.html:172
msgid "Start Distribution Update" msgid "Start Distribution Update"
msgstr "Démarrer la mise à jour de la distribution" msgstr "Démarrer la mise à niveau de la distribution"
#: modules/upgrades/templates/upgrades-dist-upgrade.html:162 #: modules/upgrades/templates/upgrades-dist-upgrade.html:162
msgid "Continue Distribution Update" msgid "Continue Distribution Update"
msgstr "Poursuivre la mise à jour de la distribution" msgstr "Poursuivre la mise à niveau de la distribution"
#: modules/upgrades/templates/upgrades-dist-upgrade.html:167 #: modules/upgrades/templates/upgrades-dist-upgrade.html:167
msgid "Start Distribution Update (for testing)" msgid "Start Distribution Update (for testing)"
msgstr "Démarrer la mise à jour de la distribution (pour les tests)" msgstr "Démarrer la mise à niveau de la distribution (pour les tests)"
#: modules/upgrades/templates/upgrades-new-release.html:9 #: modules/upgrades/templates/upgrades-new-release.html:9
#, python-format #, python-format
@ -9622,7 +9636,7 @@ msgstr ""
#: modules/upgrades/views.py:117 #: modules/upgrades/views.py:117
msgid "Started distribution update." msgid "Started distribution update."
msgstr "Mise à jour de la distribution démarrée." msgstr "Mise à niveau de la distribution démarrée."
#: modules/upgrades/views.py:153 #: modules/upgrades/views.py:153
msgid "Upgrade process started." msgid "Upgrade process started."

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Plinth\n" "Project-Id-Version: Plinth\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-18 20:35-0400\n" "POT-Creation-Date: 2025-08-18 20:35-0400\n"
"PO-Revision-Date: 2025-08-20 04:01+0000\n" "PO-Revision-Date: 2025-08-21 09:02+0000\n"
"Last-Translator: 大王叫我来巡山 " "Last-Translator: 大王叫我来巡山 "
"<hamburger2048@users.noreply.hosted.weblate.org>\n" "<hamburger2048@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Simplified Han script) <https://hosted.weblate.org/" "Language-Team: Chinese (Simplified Han script) <https://hosted.weblate.org/"
@ -181,9 +181,9 @@ msgid ""
"network." "network."
msgstr "" msgstr ""
"服务发现允许其他设备在网络上发现你的 {box_name} 和在其上运行的服务。它还允许 " "服务发现允许其他设备在网络上发现你的 {box_name} 和在其上运行的服务。它还允许 "
"{box_name} 发现在您本地网络上运行的其他设备和服务。服务发现是非必需的,且只能" "{box_name} "
"在内部网络上运行。可以禁用以提高安全性,尤其是当连接到一个充满敌意的本地网" "发现在你本地网络上运行的其他设备和服务。服务发现是非必需的,且只能在内部网络"
"络。" "上运行。可以禁用以提高安全性,尤其是当连接到一个充满敌意的本地网络。"
#: modules/avahi/__init__.py:47 #: modules/avahi/__init__.py:47
msgid "Service Discovery" msgid "Service Discovery"
@ -331,7 +331,7 @@ msgstr "(可选)为此备份档案设置名称"
#: modules/backups/forms.py:125 #: modules/backups/forms.py:125
msgid "Select the apps you want to restore" msgid "Select the apps you want to restore"
msgstr "选择想恢复的应用" msgstr "选择想恢复的应用"
#: modules/backups/forms.py:141 modules/kiwix/forms.py:21 #: modules/backups/forms.py:141 modules/kiwix/forms.py:21
msgid "Upload File" msgid "Upload File"
@ -488,7 +488,7 @@ msgstr ""
msgid "" msgid ""
"Connection refused - make sure you provided correct credentials and the " "Connection refused - make sure you provided correct credentials and the "
"server is running." "server is running."
msgstr "连接被拒绝——请确认提供了正确的凭证并且服务器在运行。" msgstr "连接被拒绝——请确认提供了正确的凭证并且服务器在运行。"
#: modules/backups/privileged.py:41 #: modules/backups/privileged.py:41
msgid "Connection refused" msgid "Connection refused"
@ -602,8 +602,8 @@ msgid ""
"To restore a backup on a new %(box_name)s you need the SSH credentials and, " "To restore a backup on a new %(box_name)s you need the SSH credentials and, "
"if chosen, the encryption passphrase." "if chosen, the encryption passphrase."
msgstr "" msgstr ""
"这个存储库的凭证存储在的 %(box_name)s。<br>要在新的 %(box_name)s 上恢复备" "这个存储库的凭证存储在的 %(box_name)s。<br>要在新的 %(box_name)s "
"份,你需要这个 SSH 凭证,如果当时选择了加密,则也需要加密口令。" "上恢复备份,你需要这个 SSH 凭证,如果当时选择了加密,则也需要加密口令。"
#: modules/backups/templates/backups_add_remote_repository.html:34 #: modules/backups/templates/backups_add_remote_repository.html:34
msgid "Create Location" msgid "Create Location"
@ -663,9 +663,8 @@ msgstr "你确定你想移除这一项存储吗?"
msgid "" msgid ""
"The remote repository will not be deleted. This just removes the repository " "The remote repository will not be deleted. This just removes the repository "
"from the listing on the backup page, you can add it again later on." "from the listing on the backup page, you can add it again later on."
msgstr "" msgstr "远程存储库不会被删除。 "
"远程存储库不会被删除。 这只是将存储库从备份页面上的列表中删除,您可以稍后再次" "这只是将存储库从备份页面上的列表中删除,你可以稍后再次添加它。"
"添加它。"
#: modules/backups/templates/backups_repository_remove.html:31 #: modules/backups/templates/backups_repository_remove.html:31
msgid "Remove Location" msgid "Remove Location"
@ -697,9 +696,8 @@ msgstr ""
msgid "" msgid ""
"You have %(max_filesize)s available to restore a backup. Exceeding this " "You have %(max_filesize)s available to restore a backup. Exceeding this "
"limit can leave your %(box_name)s unusable." "limit can leave your %(box_name)s unusable."
msgstr "" msgstr "你有 %(max_filesize)s 的可用空间来恢复备份。超出此大小将会使你的 %(box_name)"
"您有 %(max_filesize)s 的可用空间来恢复备份。超出此大小将会使您的 " "s 不可用。"
"%(box_name)s 不可用。"
#: modules/backups/templates/backups_upload.html:45 #: modules/backups/templates/backups_upload.html:45
msgid "Upload file" msgid "Upload file"
@ -731,8 +729,8 @@ msgid ""
"one of the provided options. You can also use DSA, ECDSA, Ed25519 etc. " "one of the provided options. You can also use DSA, ECDSA, Ed25519 etc. "
"instead of RSA, by choosing the corresponding file." "instead of RSA, by choosing the corresponding file."
msgstr "" msgstr ""
"请在 SSH 主机上运行下面的命令。输出应该和提供的选项之一相符。您也可以选择相对" "请在 SSH 主机上运行下面的命令。输出应该和提供的选项之一相符。"
"应的文件来使用 DSA、ECDSA、Ed25519 等而非 RSA。" "你也可以选择相对应的文件来使用 DSA、ECDSA、Ed25519 等而非 RSA。"
#: modules/backups/templates/verify_ssh_hostkey.html:66 #: modules/backups/templates/verify_ssh_hostkey.html:66
msgid "Verify Host" msgid "Verify Host"
@ -1036,8 +1034,7 @@ msgstr "密码已删除。"
msgid "" msgid ""
"BIND enables you to publish your Domain Name System (DNS) information on the " "BIND enables you to publish your Domain Name System (DNS) information on the "
"Internet, and to resolve DNS queries for your user devices on your network." "Internet, and to resolve DNS queries for your user devices on your network."
msgstr "" msgstr "BIND 使你能够在网络上发布你的域名系统DNS信息并解决你网络上用户设备的 "
"BIND 使您能够在网络上发布您的域名系统DNS信息并解决您网络上用户设备的 "
"DNS 查询。" "DNS 查询。"
#: modules/bind/__init__.py:21 #: modules/bind/__init__.py:21
@ -1259,9 +1256,10 @@ msgid ""
"advanced functions that are not usually required. A web based terminal for " "advanced functions that are not usually required. A web based terminal for "
"console operations is also available." "console operations is also available."
msgstr "" msgstr ""
"Cockpit 是一个服务器管理器,它使得在浏览器内管理 GNU/Linux 服务器很容易。在一" "Cockpit 是一个服务器管理器,它使得在浏览器内管理 GNU/Linux 服务器很容易。"
"个 {box_name} 上,许多通常不会需要的高级功能也可被控制。您也可以使用基于网页" "在一个 {box_name} "
"的终端来进行控制台操作。" "上,许多通常不会需要的高级功能也可被控制。你也可以使用基于网页的终端来进行控"
"制台操作。"
#: modules/cockpit/__init__.py:29 #: modules/cockpit/__init__.py:29
msgid "" msgid ""
@ -1359,10 +1357,11 @@ msgid ""
"is set to something other than {box_name} Service (Plinth), your users must " "is set to something other than {box_name} Service (Plinth), your users must "
"explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)." "explicitly type /plinth or /freedombox to reach {box_name} Service (Plinth)."
msgstr "" msgstr ""
"选择别人访问您的 {box_name} 时需要看到的默认页面。一个典型用法是,您可以选择" "选择别人访问你的 {box_name} 时需要看到的默认页面。一个典型用法是,"
"您的博客或者 Wiki 来作为别人访问域名时的首页。请注意,一旦首页设置到了 " "你可以选择你的博客或者 Wiki 来作为别人访问域名时的首页。请注意,"
"{box_name} 服务Plinth之外的其它地方您的用户必须明确输入 /plinth 或 /" "一旦首页设置到了 {box_name} 服务Plinth之外的其它地方"
"freedombox 来访问 {box_name} 服务Plinth。" "你的用户必须明确输入 /plinth 或 /freedombox 来访问 {box_name} "
"服务Plinth。"
#: modules/config/forms.py:48 #: modules/config/forms.py:48
msgid "Show advanced apps and features" msgid "Show advanced apps and features"
@ -1498,7 +1497,7 @@ msgstr "时区"
msgid "" msgid ""
"Set your time zone to get accurate timestamps. This will set the system-wide " "Set your time zone to get accurate timestamps. This will set the system-wide "
"time zone." "time zone."
msgstr "设置的时区来得到准确的时间戳。这将影响全系统时区。" msgstr "设置的时区来得到准确的时间戳。这将影响全系统时区。"
#: modules/datetime/forms.py:30 #: modules/datetime/forms.py:30
msgid "-- no time zone set --" msgid "-- no time zone set --"
@ -1565,8 +1564,7 @@ msgstr ""
msgid "" msgid ""
"The system diagnostic test will run a number of checks on your system to " "The system diagnostic test will run a number of checks on your system to "
"confirm that applications and services are working as expected." "confirm that applications and services are working as expected."
msgstr "" msgstr "系统诊断将运行测试程序检查你的系统以确认应用程序和服务正在按预期方式运行。"
"系统诊断将运行测试程序检查您的系统以确认应用程序和服务正在按预期方式运行。"
#: modules/diagnostics/__init__.py:53 modules/diagnostics/__init__.py:239 #: modules/diagnostics/__init__.py:53 modules/diagnostics/__init__.py:239
msgid "Diagnostics" msgid "Diagnostics"
@ -1770,8 +1768,8 @@ msgid ""
"24h), it may be hard for others to find you on the Internet. This will " "24h), it may be hard for others to find you on the Internet. This will "
"prevent others from finding services which are provided by this {box_name}." "prevent others from finding services which are provided by this {box_name}."
msgstr "" msgstr ""
"如果您的互联网提供商定期例如每24小时更改您的IP地址其他人可能很难在互联" "如果你的互联网提供商定期例如每24小时更改你的IP地址其他人可能很难在互联"
"网上找到。这会阻止其他人找到由此 {box_name} 提供的服务。" "网上找到。这会阻止其他人找到由此 {box_name} 提供的服务。"
#: modules/dynamicdns/__init__.py:33 #: modules/dynamicdns/__init__.py:33
msgid "" msgid ""
@ -1783,11 +1781,11 @@ msgid ""
"Internet asks for your DNS name, they will get a response with your current " "Internet asks for your DNS name, they will get a response with your current "
"IP address." "IP address."
msgstr "" msgstr ""
"解决方案是为您的 IP 地址分配一个 DNS 名称,并在您的互联网提供商每次更改 IP 时" "解决方案是为你的 IP 地址分配一个 DNS 名称,并在你的互联网提供商每次更改 IP "
"更新 DNS 名称。 动态 DNS 允许你将当前的公共 IP 地址推送到 <a href=\"http://" "更新 DNS 名称。 动态 DNS 允许你将当前的公共 IP 地址推送到 <a href="
"gnudip2.sourceforge.net/\" target=\"_blank\"> GnuDIP</a> 服务器。 之后,服务" "\"http://gnudip2.sourceforge.net/\" target=\"_blank\"> GnuDIP</a> 服务器。 "
"器会将您的 DNS 名称分配给新的 IP如果互联网上的某人要求您的 DNS 名称,他们将" "之后,服务器会将你的 DNS 名称分配给新的 IP如果互联网上的某人要求你的 DNS "
"从您当前 IP 地址收到响应。" "名称,他们将从你当前 IP 地址收到响应。"
#: modules/dynamicdns/__init__.py:41 #: modules/dynamicdns/__init__.py:41
msgid "" msgid ""
@ -1797,7 +1795,7 @@ msgid ""
"(with wildcards option enabled in account settings). To use a subdomain, add " "(with wildcards option enabled in account settings). To use a subdomain, add "
"it as a static domain in the Names app." "it as a static domain in the Names app."
msgstr "" msgstr ""
"如果您正在寻找一个免费的动态 DNS 帐户,您可以在<a href=" "如果你正在寻找一个免费的动态 DNS 帐户,你可以在<a href="
"\"https://ddns.freedombox.org\" target=\"_blank\">ddns.freedombox.org </" "\"https://ddns.freedombox.org\" target=\"_blank\">ddns.freedombox.org </"
"a>找到免费的 GnuDIP " "a>找到免费的 GnuDIP "
"服务。通过该服务,你还可以获取不限数量的子域名(需在账户设置中开启通配符选项" "服务。通过该服务,你还可以获取不限数量的子域名(需在账户设置中开启通配符选项"
@ -1808,7 +1806,7 @@ msgid ""
"Alternatively, you may find a free update URL based service at <a " "Alternatively, you may find a free update URL based service at <a "
"href='http://freedns.afraid.org/' target='_blank'>freedns.afraid.org</a>." "href='http://freedns.afraid.org/' target='_blank'>freedns.afraid.org</a>."
msgstr "" msgstr ""
"或者,可以在<a href=\"http://freedns.afraid.org/\" target=\"_blank\"" "或者,可以在<a href=\"http://freedns.afraid.org/\" target=\"_blank\""
">freedns.afraid.org </a>找到免费更新网址服务。" ">freedns.afraid.org </a>找到免费更新网址服务。"
#: modules/dynamicdns/__init__.py:50 #: modules/dynamicdns/__init__.py:50
@ -1839,9 +1837,8 @@ msgid ""
"Please choose an update protocol according to your provider. If your " "Please choose an update protocol according to your provider. If your "
"provider does not support the GnuDIP protocol or your provider is not listed " "provider does not support the GnuDIP protocol or your provider is not listed "
"you may use the update URL of your provider." "you may use the update URL of your provider."
msgstr "" msgstr "请选择你的提供商更新协议。如果你的提供商不支持 GnuDIP "
"请选择您的提供商更新协议。如果您的提供商不支持 GnuDIP 协议或未列出您的提供商" "协议或未列出你的提供商可能会使用你的提供商的更新 URL。"
"可能会使用您的提供商的更新 URL。"
#: modules/dynamicdns/forms.py:29 #: modules/dynamicdns/forms.py:29
msgid "" msgid ""
@ -1858,13 +1855,13 @@ msgstr "你访问你的 {box_name} 时想使用的公开域名。"
#: modules/dynamicdns/forms.py:36 #: modules/dynamicdns/forms.py:36
msgid "Use this option if your provider uses self signed certificates." msgid "Use this option if your provider uses self signed certificates."
msgstr "如果的提供商使用自签名的证书,请使用此选项。" msgstr "如果的提供商使用自签名的证书,请使用此选项。"
#: modules/dynamicdns/forms.py:39 #: modules/dynamicdns/forms.py:39
msgid "" msgid ""
"If this option is selected, your username and password will be used for HTTP " "If this option is selected, your username and password will be used for HTTP "
"basic authentication." "basic authentication."
msgstr "如果选择了此选项,的用户名和密码将用于 HTTP 基本身份验证。" msgstr "如果选择了此选项,的用户名和密码将用于 HTTP 基本身份验证。"
#: modules/dynamicdns/forms.py:42 #: modules/dynamicdns/forms.py:42
msgid "Leave this field empty if you want to keep your current password." msgid "Leave this field empty if you want to keep your current password."
@ -2047,8 +2044,7 @@ msgstr "已删除域名。"
msgid "" msgid ""
"XMPP is an open and standardized communication protocol. Here you can run " "XMPP is an open and standardized communication protocol. Here you can run "
"and configure your XMPP server, called ejabberd." "and configure your XMPP server, called ejabberd."
msgstr "" msgstr "XMPP 是一种开放标准的通信协议。在这里你可以运行并配置你的 XMPP 服务器,称为 "
"XMPP 是一种开放标准的通信协议。在这里你可以运行并配置您的 XMPP 服务器,称为 "
"ejabberd。" "ejabberd。"
#: modules/ejabberd/__init__.py:32 #: modules/ejabberd/__init__.py:32
@ -2059,10 +2055,10 @@ msgid ""
"target='_blank'>XMPP client</a>. When enabled, ejabberd can be accessed by " "target='_blank'>XMPP client</a>. When enabled, ejabberd can be accessed by "
"any <a href=\"{users_url}\"> user with a {box_name} login</a>." "any <a href=\"{users_url}\"> user with a {box_name} login</a>."
msgstr "" msgstr ""
"要实际沟通,可以使用 <a href=\"{jsxc_url}\">web 客户端</a>或任何其他 <a " "要实际沟通,可以使用 <a href=\"{jsxc_url}\">web 客户端</a>或任何其他 <a "
"href=\"https://xmpp.org/software/clients\" target=\"_blank\">XMPP 客户端</" "href=\"https://xmpp.org/software/clients\" target=\"_blank\">XMPP "
"a>。启用后,任何有 <a href=\"{users_url}\"> {box_name} 登录的用户</a>均可访" "客户端</a>。启用后,任何有 <a href=\"{users_url}\"> {box_name} 登录的用户</"
"问 ejabberd。" "a>均可访问 ejabberd。"
#: modules/ejabberd/__init__.py:40 #: modules/ejabberd/__init__.py:40
#, python-brace-format #, python-brace-format
@ -2099,7 +2095,7 @@ msgid ""
"history of a multi-user chat room. It depends on the client settings whether " "history of a multi-user chat room. It depends on the client settings whether "
"the histories are stored as plain text or encrypted." "the histories are stored as plain text or encrypted."
msgstr "" msgstr ""
"如果启用,的{box_name}将存储聊天信息历史。这允许在多个客户端之间同步对话," "如果启用,的{box_name}将存储聊天信息历史。这允许在多个客户端之间同步对话,"
"并读取多用户聊天室的历史。聊天记录是以纯文本还是加密形式存储,这取决于客户端" "并读取多用户聊天室的历史。聊天记录是以纯文本还是加密形式存储,这取决于客户端"
"的设置。" "的设置。"
@ -2725,8 +2721,7 @@ msgid ""
"The operation of the firewall is automatic. When you enable a service it is " "The operation of the firewall is automatic. When you enable a service it is "
"also permitted in the firewall and when you disable a service it is also " "also permitted in the firewall and when you disable a service it is also "
"disabled in the firewall." "disabled in the firewall."
msgstr "" msgstr "防火墙的操作是自动的。当你启用服务时它也在防火墙中允许,当禁用一项服务时也会"
"防火墙的操作是自动的。当您启用服务时它也在防火墙中允许,当禁用一项服务时也会"
"禁用防火墙中的相应服务。" "禁用防火墙中的相应服务。"
#: modules/firewall/templates/firewall.html:88 #: modules/firewall/templates/firewall.html:88
@ -3073,7 +3068,7 @@ msgstr "成功:"
#: modules/upgrades/templates/upgrades_configure.html:31 #: modules/upgrades/templates/upgrades_configure.html:31
#, python-format #, python-format
msgid "You are running %(os_release)s and %(box_name)s version %(version)s." msgid "You are running %(os_release)s and %(box_name)s version %(version)s."
msgstr "正在运行 %(os_release)s 和 %(version)s 版的 %(box_name)s。" msgstr "正在运行 %(os_release)s 和 %(version)s 版的 %(box_name)s。"
#: modules/help/templates/help_about.html:35 #: modules/help/templates/help_about.html:35
#, python-format #, python-format
@ -3099,11 +3094,12 @@ msgid ""
"and a Tor relay, on a device that can replace your Wi-Fi router, so that " "and a Tor relay, on a device that can replace your Wi-Fi router, so that "
"your data stays with you." "your data stays with you."
msgstr "" msgstr ""
"%(box_name)s 是一个社区项目,用于开发、设计和推广运行自由软件的个人服务器,用" "%(box_name)s "
"于私人通信。它是一种网络设备,设计为允许在受保护的隐私和数据安全的条件下与其" "是一个社区项目,用于开发、设计和推广运行自由软件的个人服务器,用于私人通信。"
"他互联网设施通信。它可以替代 Wi-Fi 路由器的设备并在其上托管应用程序,如博客、" "它是一种网络设备,设计为允许在受保护的隐私和数据安全的条件下与其他互联网设施"
"wiki、网站、社交网络、电子邮件、Web 代理和 Tor 中继,以便让您的数据与您在一" "通信。它可以替代 Wi-Fi "
"起。" "路由器的设备并在其上托管应用程序如博客、wiki、网站、社交网络、电子邮件、"
"Web 代理和 Tor 中继,以便让你的数据与你在一起。"
#: modules/help/templates/help_about.html:62 #: modules/help/templates/help_about.html:62
msgid "" msgid ""
@ -4468,8 +4464,8 @@ msgid ""
"href=\"http://mumble.info\">Clients</a> to connect to Mumble from your " "href=\"http://mumble.info\">Clients</a> to connect to Mumble from your "
"desktop and mobile devices are available." "desktop and mobile devices are available."
msgstr "" msgstr ""
"您可以使用常规端口 64738 连接到您的 Mumble 服务器。您可以从桌面和移动设备连" "你可以使用常规端口 64738 连接到你的 Mumble 服务器。"
"接 Mumble <a href=\"http://mumble.info\">客户端</a>。" "你可以从桌面和移动设备连接 Mumble <a href=\"http://mumble.info\">客户端</a>。"
#: modules/mumble/__init__.py:46 modules/mumble/manifest.py:9 #: modules/mumble/__init__.py:46 modules/mumble/manifest.py:9
msgid "Mumble" msgid "Mumble"
@ -4609,10 +4605,10 @@ msgid ""
"63 characters or less. Total length of domain name must be 253 characters " "63 characters or less. Total length of domain name must be 253 characters "
"or less." "or less."
msgstr "" msgstr ""
"域名是互联网上的其他设备可以访问您的 {box_name} 的全局名称。它必须由以点分隔" "域名是互联网上的其他设备可以访问你的 {box_name} "
"的标签组成。每个标签必须以字母或数字开头和结尾,并且只有字母,数字和连字符作" "的全局名称。它必须由以点分隔的标签组成。每个标签必须以字母或数字开头和结尾,"
"为内部字符。每个标签的长度必须为 63 个字符或更少。域名总长度不得超过 253 个字" "并且只有字母,数字和连字符作为内部字符。每个标签的长度必须为 63 "
"符。" "个字符或更少。域名总长度不得超过 253 个字符。"
#: modules/names/manifest.py:13 #: modules/names/manifest.py:13
msgid "DNS Resolution" msgid "DNS Resolution"
@ -5283,9 +5279,9 @@ msgid ""
"This interface should be connected to a local network/machine. If you " "This interface should be connected to a local network/machine. If you "
"connect this interface to a public network, services meant to be available " "connect this interface to a public network, services meant to be available "
"only internally will become available externally. This is a security risk." "only internally will become available externally. This is a security risk."
msgstr "" msgstr "此接口应该连接到本地网络。 "
"此接口应该连接到本地网络。 如果您将此接口连接到公用网络,意味着只为内网提供的" "如果你将此接口连接到公用网络,意味着只为内网提供的服务将成开放给外网。这会产"
"服务将成开放给外网。这会产生安全风险。" "生安全风险。"
#: modules/networks/templates/connection_show.html:317 #: modules/networks/templates/connection_show.html:317
#: modules/networks/templates/connection_show.html:345 #: modules/networks/templates/connection_show.html:345
@ -5293,9 +5289,8 @@ msgid ""
"This interface should receive your Internet connection. If you connect it to " "This interface should receive your Internet connection. If you connect it to "
"a local network/machine, many services meant to available only internally " "a local network/machine, many services meant to available only internally "
"will not be available." "will not be available."
msgstr "" msgstr "此接口应该接收你的 Internet "
"此接口应该接收您的 Internet 连接。如果你将其连接到本地网络,这意味着很多仅在" "连接。如果你将其连接到本地网络,这意味着很多仅在内网可用的服务将不可用。"
"内网可用的服务将不可用。"
#: modules/networks/templates/connection_show.html:330 #: modules/networks/templates/connection_show.html:330
#: modules/networks/templates/connections_diagram.html:24 network.py:25 #: modules/networks/templates/connections_diagram.html:24 network.py:25
@ -5418,7 +5413,7 @@ msgstr ""
#: modules/networks/templates/internet_connectivity_main.html:9 #: modules/networks/templates/internet_connectivity_main.html:9
msgid "Your Internet Connection Type" msgid "Your Internet Connection Type"
msgstr "的互联网连接类型" msgstr "的互联网连接类型"
#: modules/networks/templates/internet_connectivity_main.html:14 #: modules/networks/templates/internet_connectivity_main.html:14
msgid "" msgid ""
@ -5914,10 +5909,10 @@ msgid ""
"You can also access the rest of the Internet via {box_name} for added " "You can also access the rest of the Internet via {box_name} for added "
"security and anonymity." "security and anonymity."
msgstr "" msgstr ""
"虚拟专用网络VPN是用于安全地连接两个设备以访问专用网络的资源的技术。当离" "虚拟专用网络VPN是用于安全地连接两个设备以访问专用网络的资源的技术。当离"
"开家时,您可以连接到您的 {box_name},以便加入您的家庭网络并访问 {box_name} 提" "开家时,你可以连接到你的 {box_name},以便加入你的家庭网络并访问 {box_name} "
"供的私人/内部服务。您还可以通过 {box_name} 访问互联网的其他部分,以增加安全性" "提供的私人/内部服务。你还可以通过 {box_name} "
"和匿名性。" "访问互联网的其他部分,以增加安全性和匿名性。"
#: modules/openvpn/__init__.py:43 #: modules/openvpn/__init__.py:43
msgid "Connect to VPN services" msgid "Connect to VPN services"
@ -5958,9 +5953,10 @@ msgid ""
"available for most platforms. Click \"Learn more...\" above for recommended " "available for most platforms. Click \"Learn more...\" above for recommended "
"clients and instructions on how to configure them." "clients and instructions on how to configure them."
msgstr "" msgstr ""
"要连接到 %(box_name)s 的VPN您需要下载配置文件并将其提供给移动或桌面计算机上" "要连接到 %(box_name)s 的VPN"
"的 OpenVPN 客户端。OpenVPN 客户端适用于大多数平台。要查看推荐的客户端及配置说" "你需要下载配置文件并将其提供给移动或桌面计算机上的 OpenVPN 客户端。OpenVPN "
"明请点击上方的 “了解更多…”。" "客户端适用于大多数平台。要查看推荐的客户端及配置说明请点击上方的 "
"“了解更多…”。"
#: modules/openvpn/templates/openvpn.html:24 #: modules/openvpn/templates/openvpn.html:24
#, python-format #, python-format
@ -5979,8 +5975,9 @@ msgid ""
"services are unreachable from the rest of the Internet. This includes the " "services are unreachable from the rest of the Internet. This includes the "
"following situations:" "following situations:"
msgstr "" msgstr ""
"PageKite 是一种在您没有直接连接到互联网时暴露 {box_name} 服务的系统。 如果您" "PageKite 是一种在你没有直接连接到互联网时暴露 {box_name} 服务的系统。 "
"的 {box_name} 服务无法从互联网访问,您只需要设置 PageKite。这包括以下情况" "如果你的 {box_name} 服务无法从互联网访问,你只需要设置 "
"PageKite。这包括以下情况"
#: modules/pagekite/__init__.py:24 #: modules/pagekite/__init__.py:24
#, python-brace-format #, python-brace-format
@ -5996,18 +5993,17 @@ msgstr "{box_name} 已连接到非你控制的(无线)路由器。"
msgid "" msgid ""
"Your ISP does not provide you an external IP address and instead provides " "Your ISP does not provide you an external IP address and instead provides "
"Internet connection through NAT." "Internet connection through NAT."
msgstr "的 ISP 没有提供外部的 IP 地址而是通过提供 NAT 连接互联网。" msgstr "的 ISP 没有提供外部的 IP 地址而是通过提供 NAT 连接互联网。"
#: modules/pagekite/__init__.py:31 #: modules/pagekite/__init__.py:31
msgid "" msgid ""
"Your ISP does not provide you a static IP address and your IP address " "Your ISP does not provide you a static IP address and your IP address "
"changes every time you connect to Internet." "changes every time you connect to Internet."
msgstr "" msgstr "你的 ISP 不提供你一个静态的 IP 地址,每次连接到互联网时 IP 地址都会更改。"
"您的 ISP 不提供你一个静态的 IP 地址,每次连接到互联网时 IP 地址都会更改。"
#: modules/pagekite/__init__.py:33 #: modules/pagekite/__init__.py:33
msgid "Your ISP limits incoming connections." msgid "Your ISP limits incoming connections."
msgstr "的 ISP 限制传入的连接。" msgstr "的 ISP 限制传入的连接。"
#: modules/pagekite/__init__.py:35 #: modules/pagekite/__init__.py:35
#, python-brace-format #, python-brace-format
@ -6017,9 +6013,9 @@ msgid ""
"provider, for example <a href=\"https://pagekite.net\">pagekite.net</a>. In " "provider, for example <a href=\"https://pagekite.net\">pagekite.net</a>. In "
"the future it might be possible to use your buddy's {box_name} for this." "the future it might be possible to use your buddy's {box_name} for this."
msgstr "" msgstr ""
"PageKite 通过使用隧道和反向代理的组合来处理 NAT防火墙和 IP 地址限制。您可以" "PageKite 通过使用隧道和反向代理的组合来处理 NAT防火墙和 IP 地址限制。"
"使用任何 pagekite 服务提供商,例如<a href=\"https://pagekite.net\">pagekite." "你可以使用任何 pagekite 服务提供商,例如<a href=\"https://pagekite.net\""
"net</a>。将来,您或许可以使用好友的 {box_name} 来使用此服务。" ">pagekite.net</a>。将来,你或许可以使用好友的 {box_name} 来使用此服务。"
#: modules/pagekite/__init__.py:59 #: modules/pagekite/__init__.py:59
msgid "PageKite" msgid "PageKite"
@ -6037,9 +6033,8 @@ msgstr "服务器域"
msgid "" msgid ""
"Select your pagekite server. Set \"pagekite.net\" to use the default " "Select your pagekite server. Set \"pagekite.net\" to use the default "
"pagekite.net server." "pagekite.net server."
msgstr "" msgstr "选择你的 pagekite 服务器。设置\"pagekite.net\"以便使用默认的 pagekite.net "
"选择您的 pagekite 服务器。设置\"pagekite.net\"以便使用默认的 pagekite.net 服" "服务器。"
"务器。"
#: modules/pagekite/forms.py:35 modules/shadowsocks/forms.py:27 #: modules/pagekite/forms.py:35 modules/shadowsocks/forms.py:27
msgid "Server port" msgid "Server port"
@ -6139,9 +6134,9 @@ msgid ""
"Your PageKite frontend server may not support all the protocol/port " "Your PageKite frontend server may not support all the protocol/port "
"combinations that you are able to define here. For example, HTTPS on ports " "combinations that you are able to define here. For example, HTTPS on ports "
"other than 443 is known to cause problems." "other than 443 is known to cause problems."
msgstr "" msgstr "你的 PageKite "
"您的 PageKite 前端服务器可能不支持您在此处定义的所有协议/端口组合。例如,已知" "前端服务器可能不支持你在此处定义的所有协议/端口组合。例如,已知443以外的端口"
"443以外的端口上的HTTPS会导致问题。" "上的HTTPS会导致问题。"
#: modules/pagekite/utils.py:45 #: modules/pagekite/utils.py:45
msgid "Web Server (HTTP)" msgid "Web Server (HTTP)"
@ -6332,10 +6327,10 @@ msgid ""
"privoxy.org\">http://config.privoxy.org/</a> or <a href=\"http://p." "privoxy.org\">http://config.privoxy.org/</a> or <a href=\"http://p."
"p\">http://p.p</a>." "p\">http://p.p</a>."
msgstr "" msgstr ""
"将浏览器代理设置修改为使用 {box_name} 的主机名(或 IP 地址)和端口 8118。仅允" "将浏览器代理设置修改为使用 {box_name} 的主机名(或 IP 地址)和端口 8118。"
"许来自本地网络 IP 地址的连接。使用 Privoxy 时,您可以在 <a href=\"http//" "仅允许来自本地网络 IP 地址的连接。使用 Privoxy 时,你可以在 <a href="
"config.privoxy.org\">http://config.privoxy.org/</a> 或 <a href=\"http://p." "\"http//config.privoxy.org\">http://config.privoxy.org/</a> 或 <a href="
"p\">http://p.p</a> 中查看其配置详细信息和文档。" "\"http://p.p\">http://p.p</a> 中查看其配置详细信息和文档。"
#: modules/privoxy/__init__.py:53 #: modules/privoxy/__init__.py:53
msgid "Privoxy" msgid "Privoxy"
@ -6365,10 +6360,11 @@ msgid ""
"one or more Quassel clients from a desktop or a mobile can be used to " "one or more Quassel clients from a desktop or a mobile can be used to "
"connect and disconnect from it." "connect and disconnect from it."
msgstr "" msgstr ""
"Quassel 是一个 IRC 应用程序,分为两个部分,一个“核心”和一个“客户端”。 这允许" "Quassel 是一个 IRC 应用程序,分为两个部分,一个“核心”和一个“客户端”。 "
"核心保持连接到 IRC 服务器,并继续接收消息,即使客户端断开连接。{box_name} 可" "这允许核心保持连接到 IRC "
"以运行 Quassel 核心服务,使您始终在线,并且可以使用桌面或移动设备上的一个或多" "服务器,并继续接收消息,即使客户端断开连接。{box_name} 可以运行 Quassel "
"个 Quassel 客户端连接和断开连接。" "核心服务,使你始终在线,并且可以使用桌面或移动设备上的一个或多个 Quassel "
"客户端连接和断开连接。"
#: modules/quassel/__init__.py:31 #: modules/quassel/__init__.py:31
msgid "" msgid ""
@ -6377,9 +6373,10 @@ msgid ""
"downloads\">desktop</a> and <a href=\"http://quasseldroid.iskrembilen.com/" "downloads\">desktop</a> and <a href=\"http://quasseldroid.iskrembilen.com/"
"\">mobile</a> devices are available." "\">mobile</a> devices are available."
msgstr "" msgstr ""
"您可以通过默认 Quassel 端口 4242 连接到 Quassel 核心。可使用<a href=\"http://" "你可以通过默认 Quassel 端口 4242 连接到 Quassel 核心。可使用<a href="
"quassel-irc.org/downloads\">桌面</a>和<a href=\"http://quasseldroid." "\"http://quassel-irc.org/downloads\">桌面</a>和<a href="
"iskrembilen.com/\">移动设备</a>客户端连接到 Quassel 的核心。" "\"http://quasseldroid.iskrembilen.com/\">移动设备</a>客户端连接到 Quassel "
"的核心。"
#: modules/quassel/__init__.py:51 modules/quassel/manifest.py:9 #: modules/quassel/__init__.py:51 modules/quassel/manifest.py:9
msgid "Quassel" msgid "Quassel"
@ -6501,9 +6498,9 @@ msgid ""
"from an email client, including MIME support, address book, folder " "from an email client, including MIME support, address book, folder "
"manipulation, message searching and spell checking." "manipulation, message searching and spell checking."
msgstr "" msgstr ""
"Roundcube 网页邮件是一个基于浏览器的多语言 IMAP 客户端,具有类似应用程序的用" "Roundcube 网页邮件是一个基于浏览器的多语言 IMAP "
"户界面。它提供您需要的从电子邮件客户端、MIME支持、地址簿、文件夹操作、消息搜" "客户端具有类似应用程序的用户界面。它提供你需要的从电子邮件客户端、MIME支持"
"索到拼写检查的完整功能。" "、地址簿、文件夹操作、消息搜索到拼写检查的完整功能。"
#: modules/roundcube/__init__.py:24 #: modules/roundcube/__init__.py:24
msgid "" msgid ""
@ -6513,9 +6510,9 @@ msgid ""
"(recommended), fill the server field like <code>imaps://imap.example.com</" "(recommended), fill the server field like <code>imaps://imap.example.com</"
"code>." "code>."
msgstr "" msgstr ""
"可以通过提供你希望访问的电子邮件账户的用户名和密码,以及的电子邮件提供商的 " "可以通过提供你希望访问的电子邮件账户的用户名和密码,以及的电子邮件提供商的 "
"IMAP 服务器域名,像是 <code>imap.example.com</code>。对于 IMAP over SSL (推" "IMAP 服务器域名,像是 <code>imap.example.com</code>。对于 IMAP over SSL "
"荐),应该填入类似 <code>imaps://imap.example.com</code> 的地址。" "(推荐),应该填入类似 <code>imaps://imap.example.com</code> 的地址。"
#: modules/roundcube/__init__.py:29 #: modules/roundcube/__init__.py:29
msgid "" msgid ""
@ -6526,10 +6523,11 @@ msgid ""
"lesssecureapps\">https://www.google.com/settings/security/lesssecureapps</" "lesssecureapps\">https://www.google.com/settings/security/lesssecureapps</"
"a>)." "a>)."
msgstr "" msgstr ""
"对于 Gmail用户名是您的 Gmail 地址,密码是您的 Google 帐户密码,服务器是 " "对于 Gmail用户名是你的 Gmail 地址,密码是你的 Google 帐户密码,服务器是 "
"<code>imaps://imap.gmail.com</code>。请注意,您还需要在 Google 帐户设置(<a " "<code>imaps://imap.gmail.com</code>。请注意,你还需要在 Google 帐户设置(<a "
"href=\"https://www.google.com/settings/security/lesssecureapps\">https://www." "href=\"https://www.google.com/settings/security/lesssecureapps\">https://"
"google.com/settings/security/lesssecureapps</a>)中启用“安全性较低的应用”。" "www.google.com/settings/security/"
"lesssecureapps</a>)中启用“安全性较低的应用”。"
#: modules/roundcube/forms.py:16 #: modules/roundcube/forms.py:16
msgid "Use only the local mail server" msgid "Use only the local mail server"
@ -6915,13 +6913,13 @@ msgstr "未运行"
#: modules/shaarli/__init__.py:18 #: modules/shaarli/__init__.py:18
msgid "Shaarli allows you to save and share bookmarks." msgid "Shaarli allows you to save and share bookmarks."
msgstr "Shaarli 允许保存和共享书签。" msgstr "Shaarli 允许保存和共享书签。"
#: modules/shaarli/__init__.py:19 #: modules/shaarli/__init__.py:19
msgid "" msgid ""
"Note that Shaarli only supports a single user account, which you will need " "Note that Shaarli only supports a single user account, which you will need "
"to setup on the initial visit." "to setup on the initial visit."
msgstr "注意Shaarli 只支持单用户帐户,需要在初次访问时设置该帐户。" msgstr "注意Shaarli 只支持单用户帐户,需要在初次访问时设置该帐户。"
#: modules/shaarli/__init__.py:36 modules/shaarli/manifest.py:25 #: modules/shaarli/__init__.py:36 modules/shaarli/manifest.py:25
msgid "Shaarli" msgid "Shaarli"
@ -7303,8 +7301,7 @@ msgid ""
"A new snapshot with the current state of the file system will be " "A new snapshot with the current state of the file system will be "
"automatically created. You will be able to undo a rollback by reverting to " "automatically created. You will be able to undo a rollback by reverting to "
"the newly created snapshot." "the newly created snapshot."
msgstr "" msgstr "将自动创建具有文件系统当前状态的新快照。你可以通过还原到新创建的快照来撤销回"
"将自动创建具有文件系统当前状态的新快照。您可以通过还原到新创建的快照来撤销回"
"滚。" "滚。"
#: modules/snapshot/templates/snapshot_rollback.html:44 #: modules/snapshot/templates/snapshot_rollback.html:44
@ -7838,10 +7835,10 @@ msgid ""
"the <a href=\"https://www.torproject.org/download/download-easy.html." "the <a href=\"https://www.torproject.org/download/download-easy.html."
"en\">Tor Browser</a>." "en\">Tor Browser</a>."
msgstr "" msgstr ""
"Tor 是一个匿名通信系统。可以从 <a href=\"https://www.torproject.org/\">Tor " "Tor 是一个匿名通信系统。可以从 <a href=\"https://www.torproject.org/\">Tor "
"项目</a>网站了解详情。为了在网上冲浪时获得最佳保护Tor 项目建议使用 <a " "项目</a>网站了解详情。为了在网上冲浪时获得最佳保护Tor 项目建议使用 <a "
"href=\"https://www.torproject.org/download/download-easy.html.en\">Tor浏览器" "href=\"https://www.torproject.org/download/download-easy.html.en\""
"</a>。" ">Tor浏览器</a>。"
#: modules/tor/__init__.py:40 #: modules/tor/__init__.py:40
msgid "" msgid ""
@ -7923,9 +7920,8 @@ msgid ""
"When enabled, your {box_name} will run a Tor relay and donate bandwidth to " "When enabled, your {box_name} will run a Tor relay and donate bandwidth to "
"the Tor network. Do this if you have more than 2 megabits/s of upload and " "the Tor network. Do this if you have more than 2 megabits/s of upload and "
"download bandwidth." "download bandwidth."
msgstr "" msgstr "启用后,你的 {box_name} 将运行 Tor 中继,并向 Tor 网络分配带宽。"
"启用后,您的 {box_name} 将运行 Tor 中继,并向 Tor 网络分配带宽。如果您的上传" "如果你的上传和下载带宽超过 2 MB/s请执行此操作。"
"和下载带宽超过 2 MB/s请执行此操作。"
#: modules/tor/forms.py:101 #: modules/tor/forms.py:101
msgid "Enable Tor bridge relay" msgid "Enable Tor bridge relay"
@ -8471,8 +8467,8 @@ msgid ""
"you cannot install apps. Also, this web interface may be temporarily " "you cannot install apps. Also, this web interface may be temporarily "
"unavailable and show an error. In that case, refresh the page to continue." "unavailable and show an error. In that case, refresh the page to continue."
msgstr "" msgstr ""
"<strong>这可能需要很长时间才能完成。</strong>在更新期间,您无法安装应用。 此" "<strong>这可能需要很长时间才能完成。</strong>在更新期间,你无法安装应用。 "
"外,此 Web 界面可能暂时不可用并显示错误。 在这种情况下,刷新页面以继续。" "外,此 Web 界面可能暂时不可用并显示错误。 在这种情况下,刷新页面以继续。"
#: modules/upgrades/templates/upgrades_configure.html:139 #: modules/upgrades/templates/upgrades_configure.html:139
msgid "Show recent update logs" msgid "Show recent update logs"
@ -8599,9 +8595,9 @@ msgid ""
"Setting an SSH public key will allow this user to securely log in to the " "Setting an SSH public key will allow this user to securely log in to the "
"system without using a password. You may enter multiple keys, one on each " "system without using a password. You may enter multiple keys, one on each "
"line. Blank lines and lines starting with # will be ignored." "line. Blank lines and lines starting with # will be ignored."
msgstr "" msgstr "设置 SSH "
"设置 SSH 公钥将允许此用户安全地登录到系统不使用密码。您可以输入多个密钥,每行" "公钥将允许此用户安全地登录到系统不使用密码。你可以输入多个密钥,每行一个。"
"一个。将忽略空行和以 # 开头的行。" "将忽略空行和以 # 开头的行。"
#: modules/users/forms.py:252 #: modules/users/forms.py:252
msgid "Delete user" msgid "Delete user"
@ -8648,7 +8644,7 @@ msgstr "未能将新用户添加到管理员组:{error}"
#: modules/users/forms.py:470 #: modules/users/forms.py:470
msgid "User account created, you are now logged in" msgid "User account created, you are now logged in"
msgstr "用户帐户已创建,现在可以登录" msgstr "用户帐户已创建,现在可以登录"
#: modules/users/manifest.py:8 #: modules/users/manifest.py:8
msgid "Manage accounts" msgid "Manage accounts"
@ -9354,9 +9350,9 @@ msgid ""
"FreedomBox Service (Plinth) project <a href=\"https://salsa.debian.org/" "FreedomBox Service (Plinth) project <a href=\"https://salsa.debian.org/"
"freedombox-team/freedombox/issues\">issue tracker</a>." "freedombox-team/freedombox/issues\">issue tracker</a>."
msgstr "" msgstr ""
"如果认为这个缺失的页面应该存在,请在 FreedomBox Service (Plinth) 项目 <a " "如果认为这个缺失的页面应该存在,请在 FreedomBox Service (Plinth) 项目 <a "
"href=\"https://salsa.debian.org/freedombox-team/freedombox/issues\">问题跟踪" "href=\"https://salsa.debian.org/freedombox-team/freedombox/issues\""
"器</a>页面提交缺陷报告。" ">问题跟踪器</a>页面提交缺陷报告。"
#: templates/500.html:10 #: templates/500.html:10
msgid "500" msgid "500"
@ -9581,7 +9577,7 @@ msgstr "此应用程序需要一次更新。立即更新?"
#: templates/setup.html:43 #: templates/setup.html:43
msgid "This application is currently not available in your distribution." msgid "This application is currently not available in your distribution."
msgstr "此应用程序目前在的发行版中不可用。" msgstr "此应用程序目前在的发行版中不可用。"
#: templates/setup.html:51 #: templates/setup.html:51
msgid "Checking app availability..." msgid "Checking app availability..."

View File

@ -292,7 +292,8 @@ def _run_diagnostics():
severity = 'error' severity = 'error'
else: else:
for check in app_data['diagnosis']: for check in app_data['diagnosis']:
if check.result != Result.PASSED: if check.result not in (Result.PASSED, Result.NOT_DONE,
Result.SKIPPED):
apps_with_issues.add(app_id) apps_with_issues.add(app_id)
issue_count += 1 issue_count += 1
if check.result != Result.WARNING: if check.result != Result.WARNING:

View File

@ -464,6 +464,10 @@ def install(browser, app_name):
browser.visit(browser.url) browser.visit(browser.url)
elif browser.is_element_present_by_css('.alert-danger'): elif browser.is_element_present_by_css('.alert-danger'):
break break
elif (browser.is_element_present_by_css('.app-checking-availability')
and not browser.find_by_css(
'.app-checking-availability').has_class('d-none')):
time.sleep(0.1)
elif browser.is_element_present_by_css(install_button_css): elif browser.is_element_present_by_css(install_button_css):
install_button = browser.find_by_css(install_button_css).first install_button = browser.find_by_css(install_button_css).first
if install_button['disabled']: if install_button['disabled']:

View File

@ -226,7 +226,7 @@ document.addEventListener('DOMContentLoaded', async () => {
function setInstallButtonState(enable) { function setInstallButtonState(enable) {
const installButton = document.querySelector('.install-button'); const installButton = document.querySelector('.install-button');
if (enable) if (enable)
installButton?.removeAttribute('disabled') installButton?.removeAttribute('disabled');
else else
installButton?.setAttribute('disabled', 'disabled'); installButton?.setAttribute('disabled', 'disabled');
} }