diff --git a/.gitignore b/.gitignore index 71c9624..f5ffd9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /db/niver.db +/locales/*/C/LC_MESSAGES/messages.mo diff --git a/DOCS/translation.md b/DOCS/translation.md new file mode 100644 index 0000000..f792f7a --- /dev/null +++ b/DOCS/translation.md @@ -0,0 +1,38 @@ +# Translation with gettext + +## As a developer + +Extract messages to be translated from the source files and into a Portable Object Template file: +``` +xgettext --from-code=UTF-8 --no-wrap -d messages -p locales/ --from-code=UTF-8 *.php */*.php */*/*.php +mv locales/messages.po locales/messages.pot +``` + +Merge messages into existing Portable Objects: +``` +msgmerge --no-wrap locales/fr/C/LC_MESSAGES/messages.po locales/messages.pot -o locales/fr/C/LC_MESSAGES/messages.po +``` + +## As a translator + +### To start a new translation + +``` +mkdir -p locales/fr/C/LC_MESSAGES/ +msginit -i locales/messages.pot -o locales/fr/C/LC_MESSAGES/messages.po +``` + +### To translate + +Edit `locales/fr/C/LC_MESSAGES/messages.po` using either +* any text editor +* a dedicated translation software like [Poedit](https://poedit.net/), [KDE's Lokalize](https://apps.kde.org/lokalize/) or [GNOME Translation Editor](https://wiki.gnome.org/Apps/Gtranslator). + +## As an administrator + +To compile Portable Objects into Machine Objects: +``` +msgfmt locales/fr/C/LC_MESSAGES/messages.po -o locales/fr/C/LC_MESSAGES/messages.mo +``` + +Machine Objects files are kept in cache by the Gettext extension, so PHP-FPM needs to be restarted to update translations. diff --git a/config.ini b/config.ini index cc94ba0..896033d 100644 --- a/config.ini +++ b/config.ini @@ -4,6 +4,8 @@ docs_prefix = "/docs/" ; Prefix in URL, if any prefix = "" public_domains[] = "niver.test" +service_name = "Niver" +service_emoji = "đȘ" [dns] knotc_path = "/usr/sbin/knotc" diff --git a/fn/common.php b/fn/common.php index 9c3a911..be2cee9 100644 --- a/fn/common.php +++ b/fn/common.php @@ -6,9 +6,9 @@ function output($code, $msg = '', $logs = ['']) { if ($shortCode === 5) error_log('Niver internal error: ' . strip_tags($msg) . implode(LF, $logs)); $final_message = match ($shortCode) { - 2 => ($msg === '') ? '' : '
' . LF, - 4 => '' . LF, - 5 => '' . LF, + 2 => ($msg === '') ? '' : '' . LF, + 4 => '' . LF, + 5 => '' . LF, }; displayPage(['final_message' => $final_message]); } @@ -130,5 +130,5 @@ function getAuthToken() { function checkAuthToken($salt, $hash) { $correctProof = substr(hash_hmac('sha256', $salt . $_SESSION['id'], SECRET_KEY), 0, 32); if (hash_equals($correctProof, $hash) !== true) - output(403, 'Preuve incorrecte'); + output(403, _('Wrong proof.')); } diff --git a/fn/dns.php b/fn/dns.php index 7006780..3b3ef57 100644 --- a/fn/dns.php +++ b/fn/dns.php @@ -59,12 +59,12 @@ function checkIpFormat($ip) { return 'A'; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) return 'AAAA'; - output(403, 'IP address malformed.'); + output(403, _('IP address malformed.')); } function checkAbsoluteDomainFormat($domain) { // If the domain must end with a dot if (!filter_var($domain, FILTER_VALIDATE_DOMAIN) OR preg_match('/^([a-z0-9_-]{1,63}\.){2,127}$/D', $domain) !== 1) - output(403, 'Domain malformed.'); + output(403, _('Domain malformed.')); } function formatEndWithDot($str) { diff --git a/fn/ht.php b/fn/ht.php index 9a90044..b0f4d0a 100644 --- a/fn/ht.php +++ b/fn/ht.php @@ -3,7 +3,7 @@ function checkDomainFormat($domain) { // If the domain must end without a dot if (!filter_var($domain, FILTER_VALIDATE_DOMAIN) OR !preg_match('/^([a-z0-9_-]{1,63}\.){1,126}[a-z0-9]{1,63}$/D', $domain)) - output(403, 'Domain malformed.'); + output(403, _('Domain malformed.')); } function formatDomain($domain) { diff --git a/fn/ns.php b/fn/ns.php index a932659..4dbea0f 100644 --- a/fn/ns.php +++ b/fn/ns.php @@ -37,9 +37,9 @@ function nsParseCommonRequirements() { $values['ttl'] = $_POST['ttl-value'] * $_POST['ttl-multiplier']; if ($values['ttl'] < MIN_TTL) - output(403, 'Les TTLs infĂ©rieurs Ă ' . MIN_TTL . ' secondes ne sont pas autorisĂ©s.'); + output(403, sprintf(_('TTLs shorter than %s seconds are forbidden.'), MIN_TTL)); if ($values['ttl'] > MAX_TTL) - output(403, 'Les TTLs supĂ©rieurs Ă ' . MAX_TTL . ' secondes ne sont pas autorisĂ©s.'); + output(403, sprintf(_('TTLs longer than %s seconds are forbidden.'), MAX_TTL)); return $values; } @@ -53,8 +53,8 @@ function nsListUserZones() { function nsCheckZonePossession($zone) { checkAbsoluteDomainFormat($zone); - if (!in_array($zone, query('select', 'zones', ['username' => $_SESSION['id']], 'zone'), true)) - output(403, 'You don\'t own this zone on the nameserver.'); + if (!in_array($zone, nsListUserZones(), true)) + output(403, 'You don\'t own this zone on the name server.'); } function nsDeleteZone($zone) { @@ -62,7 +62,7 @@ function nsDeleteZone($zone) { knotcConfExec(["unset 'zone[$zone]'"]); // Remove Knot zone file - if(unlink(CONF['ns']['knot_zones_path'] . '/' . $zone . 'zone') !== true) + if (unlink(CONF['ns']['knot_zones_path'] . '/' . $zone . 'zone') !== true) output(500, 'Failed to remove Knot zone file.'); // Remove Knot related data diff --git a/fn/reg.php b/fn/reg.php index df4b111..26db8e0 100644 --- a/fn/reg.php +++ b/fn/reg.php @@ -10,7 +10,7 @@ function regListUserDomains() { function regCheckDomainPossession($domain) { if (in_array($domain, regListUserDomains(), true) !== true) - output(403, 'You don\'t own this domain.'); + output(403, 'You don\'t own this domain on the registry.'); } function regDeleteDomain($domain) { diff --git a/locales/fr/C/LC_MESSAGES/messages.po b/locales/fr/C/LC_MESSAGES/messages.po new file mode 100644 index 0000000..0540b16 --- /dev/null +++ b/locales/fr/C/LC_MESSAGES/messages.po @@ -0,0 +1,1094 @@ +#: pages.php:9 +msgid "Authentication" +msgstr "Authentification" + +#: pages.php:10 +msgid "Manage account" +msgstr "GĂ©rer son compte" + +#: pages.php:13 view.php:21 pg-view/auth/login.php:12 +#: pg-view/auth/register.php:1 +msgid "Log in" +msgstr "Se connecter" + +#: pages.php:14 +msgid "Start a new navigation session with an existing account" +msgstr "DĂ©marrer une nouvelle session avec un compte existant" + +#: pages.php:18 view.php:19 +msgid "Log out" +msgstr "Se dĂ©connecter" + +#: pages.php:19 +msgid "End the current session and delete cookies and cache" +msgstr "Terminer la session actuelle et supprimer les cookies et le cache" + +#: pages.php:22 +msgid "Create account" +msgstr "CrĂ©er un compte" + +#: pages.php:23 +msgid "Create a new account, and log in with it" +msgstr "CrĂ©er un nouveau compte, et se connecter avec" + +#: pages.php:28 +msgid "Delete account" +msgstr "Supprimer son compte" + +#: pages.php:29 +msgid "Erase all current account's data" +msgstr "Effacer toutes les donnĂ©es du compte actuel" + +#: pages.php:32 +msgid "Switch to an approved account" +msgstr "Passer Ă un compte approuvĂ©" + +#: pages.php:33 +msgid "Switch to an approved account using an approval key" +msgstr "Utiliser une clĂ© d'approbation pour passer Ă un compte approuvĂ©" + +#: pages.php:36 +msgid "Change password" +msgstr "Changer la clĂ© de passe" + +#: pages.php:37 +msgid "Change the character string used to authenticate yourself" +msgstr "Changer la chaĂźne de caractĂšres utilisĂ©e pour s'authentifier" + +#: pages.php:40 +msgid "Change username" +msgstr "Changer l'identifiant" + +#: pages.php:41 +msgid "Change the name used to identify your account when logging in and displayed at the start of every page" +msgstr "Changer le nom utilisĂ© pour identifier le compte Ă la connexion et affichĂ© au dĂ©but de toutes les pages" + +#: pages.php:46 +#, php-format +msgid "%s registry" +msgstr "Registre %s" + +#: pages.php:47 +#, php-format +msgid "Register and delegate a %s subdomain" +msgstr "Obtenir et dĂ©lĂ©guer un domaine %s" + +#: pages.php:50 +msgid "Register domain" +msgstr "Enregistrer un domaine" + +#: pages.php:51 +#, php-format +msgid "Get a %s subdomain" +msgstr "Obtenir un sous-domaine de %s" + +#: pages.php:55 +msgid "Unregister domain" +msgstr "DĂ©senregistrer un domaine" + +#: pages.php:56 +msgid "Delete all data related to a domain and make it available to the public again" +msgstr "Supprimer toutes les informations liĂ©es Ă un domaine et le redisponibiliser au public" + +#: pages.php:59 +msgid "Display domain records" +msgstr "Afficher les enregistrements" + +#: pages.php:60 +msgid "Print every record related to a domain and served by the registry" +msgstr "Montrer tous les enregistrements liĂ©s Ă un domaine et servis par le registre" + +#: pages.php:63 pages.php:67 pages.php:107 pages.php:111 pages.php:115 +#: pages.php:119 pages.php:123 pages.php:127 pages.php:131 pages.php:135 +#: pages.php:139 pages.php:143 +#, php-format +msgid "%s records" +msgstr "Enregistrements %s" + +#: pages.php:64 +#, php-format +msgid "Indicate the name servers of a %s subdomain" +msgstr "Indiquer les serveurs de nom d'un sous-domaine de %s" + +#: pages.php:68 +msgid "Delegate DNSSEC trust" +msgstr "DĂ©lĂ©guer la confiance DNSSEC" + +#: pages.php:71 +msgid "Receive a domain transfer" +msgstr "Recevoir un transfert de domaine" + +#: pages.php:72 +msgid "Transfer a domain owned by another account to the current account" +msgstr "TransfĂ©rer vers le compte actuel un domaine possĂ©dĂ© par un autre compte" + +#: pages.php:75 +msgid "Glue records" +msgstr "Glue records" + +#: pages.php:76 +msgid "Advanced: store the IP address of a name server whose domain is inside the domain it serves" +msgstr "AvancĂ© : indiquer l'adresse IP d'un serveur de nom dont le domaine descend de la zone qu'il sert" + +#: pages.php:81 pg-view/ns/index.php:24 +msgid "Name servers" +msgstr "Serveurs de nom" + +#: pages.php:82 +msgid "Host and manage domain's records" +msgstr "HĂ©berger et gĂ©rer les enregistrements d'un domaine" + +#: pages.php:85 +msgid "Add zone" +msgstr "Ajouter une zone" + +#: pages.php:86 +#, php-format +msgid "The zone will be managed by %s name servers" +msgstr "La zone sera gĂ©rĂ©e par les serveurs de nom de %s" + +#: pages.php:90 +msgid "Delete zone" +msgstr "Supprimer une zone" + +#: pages.php:91 +msgid "Erase all zone data" +msgstr "Effacer tous les enregistrements d'une zone" + +#: pages.php:94 +msgid "Display zone" +msgstr "Afficher une zone" + +#: pages.php:95 +msgid "Print zonefile content" +msgstr "Montrer le contenu d'un fichier de zone" + +#: pages.php:98 +msgid "Edit zone" +msgstr "Modifier une zone" + +#: pages.php:99 +msgid "Change zonefile content" +msgstr "Ăditer le contenu d'un fichier de zone" + +#: pages.php:103 +msgid "AAAA and A records" +msgstr "Enregistrements AAAA et A" + +#: pages.php:104 +msgid "Store domain's IP address" +msgstr "Indiquer l'adresse IP d'un domaine" + +#: pages.php:108 +msgid "Store zone's name server" +msgstr "Indiquer les serveurs de nom d'une zone" + +#: pages.php:112 +msgid "Associate text to domain" +msgstr "Associer du texte Ă un domaine" + +#: pages.php:116 +msgid "Limit the certificate authorities allowed to certify the domain" +msgstr "Limiter les autoritĂ©s de certification autorisĂ©es Ă certifier un domaine" + +#: pages.php:120 +msgid "Store the location of a domain's service" +msgstr "Indiquer l'adresse exacte d'un service pour un domaine" + +#: pages.php:124 +msgid "Store the email server's address" +msgstr "Indiquer l'adresse d'un serveur de courriels" + +#: pages.php:128 +msgid "Store SSH public keys fingerprints" +msgstr "Indiquer les empreintes de clĂ©s publiques SSH" + +#: pages.php:132 +msgid "Setup DANE by publishing the TLS certificate fingerprint" +msgstr "Mettre en place DANE et publiant l'empreinte d'un certificat TLS" + +#: pages.php:136 +msgid "Define a domain as an alias of another" +msgstr "DĂ©finir un domaine comme Ă©tant l'alias d'un autre" + +#: pages.php:140 +msgid "Define all subdomains of a domain as aliases of subdomains of another domain" +msgstr "DĂ©finir la descendance d'un domain comme alias de la descendance d'un autre domaine" + +#: pages.php:144 +msgid "Store geographic coordinates" +msgstr "Indiquer des coordonnĂ©es gĂ©ographiques" + +#: pages.php:149 +msgid "Web" +msgstr "Web" + +#: pages.php:150 +msgid "Upload a static website into an SFTP space" +msgstr "TĂ©lĂ©verser un site statique dans un espace SFTP" + +#: pages.php:153 +#, php-format +msgid "%s subpath access" +msgstr "AccĂšs par sous-chemin de %s" + +#: pages.php:154 pages.php:159 pages.php:164 +#, php-format +msgid "Its URL will look like %s" +msgstr "Son URL ressemblera Ă %s" + +#: pages.php:154 pages.php:159 pages.php:164 +msgid "mysite" +msgstr "monsite" + +#: pages.php:158 +#, php-format +msgid "%s subdomain access" +msgstr "AccĂšs par sous-domaine de %s" + +#: pages.php:163 +msgid "Dedicated domain with Let's Encrypt certificate access" +msgstr "AccĂšs par domaine dĂ©diĂ© avec certificat Let's Encrypt" + +#: pages.php:168 +msgid "Onion service access" +msgstr "AccĂšs par service Onion" + +#: pages.php:169 +#, php-format +msgid "Its URL will look like %s, and work only through the Tor network" +msgstr "Son URL ressemblera Ă %s, et ne fonctionnera que par le rĂ©seau Tor" + +#: pages.php:173 pg-view/ht/del.php:18 +msgid "Delete access" +msgstr "Supprimer un accĂšs" + +#: pages.php:174 +msgid "Delete an existing HTTP access from a subdirectory of the SFTP space" +msgstr "Retirer un accĂšs HTTP existant d'un sous-dossier de l'espace SFTP" + +#: router.php:120 +msgid "You need to be logged in to do this." +msgstr "Vous devez ĂȘtre connecté·e Ă un compte pour faire cela." + +#: router.php:122 +msgid "This account doesn't exist anymore. Log out to end this ghost session." +msgstr "Ce compte n'existe plus. DĂ©connectez-vous pour terminer cette session fantĂŽme." + +#: view.php:21 +msgid "Anonymous" +msgstr "Anonyme" + +#: view.php:41 +#, php-format +msgid "This form won't be accepted because you need to %slog in%s first." +msgstr "Ce forumulaire ne sera pas acceptĂ© car il faut %sse connecter%s d'abord." + +#: view.php:48 +#, php-format +msgid "%sSource code%s available under %s." +msgstr "%sCode source%s disponible sous %s." + +#: fn/auth.php:108 +msgid "Account rate limit reached, try again later." +msgstr "Limite de taux pour ce compte atteinte, rĂ©essayez plus tard." + +#: fn/auth.php:130 +msgid "Global rate limit reached, try again later." +msgstr "Limite de taux globale atteinte, rĂ©essayez plus tard." + +#: fn/common.php:9 +msgid "Success: " +msgstr "SuccĂšs : " + +#: fn/common.php:10 +msgid "User error: " +msgstr "Erreur de l'utilisataire : " + +#: fn/common.php:11 +msgid "Server error: " +msgstr "Erreur du serveur : " + +#: fn/common.php:133 +msgid "Wrong proof." +msgstr "Preuve incorrecte." + +#: fn/dns.php:62 +msgid "IP address malformed." +msgstr "Adresse IP malformĂ©e." + +#: fn/dns.php:67 fn/ht.php:6 +msgid "Domain malformed." +msgstr "Domaine malformĂ©." + +#: fn/ns.php:40 pg-act/ns/edit.php:25 +#, php-format +msgid "TTLs shorter than %s seconds are forbidden." +msgstr "Les TTLs plus courts que %s secondes sont interdits." + +#: fn/ns.php:42 pg-act/ns/edit.php:27 +#, php-format +msgid "TTLs longer than %s seconds are forbidden." +msgstr "Les TTLs plus longs que %s secondes sont interdits." + +#: pg-act/auth/approval.php:4 +msgid "This account is already approved." +msgstr "Ce compte est dĂ©jĂ approuvĂ©." + +#: pg-act/auth/approval.php:7 +msgid "This approval key is not available. It has been mistyped, used for another account, or has expired." +msgstr "Cette clĂ© d'approbation n'est pas disponible. Elle a pu ĂȘtre mal saisie, utilisĂ©e pour un autre compte, ou a expirĂ©." + +#: pg-act/auth/approval.php:18 +msgid "Account approved." +msgstr "Compte approuvĂ©." + +#: pg-act/auth/login.php:10 +msgid "This account does not exist." +msgstr "Ce compte n'existe pas." + +#: pg-act/auth/login.php:15 +msgid "Wrong password." +msgstr "ClĂ© de passe incorrecte." + +#: pg-act/auth/password.php:6 +msgid "Wrong current password." +msgstr "ClĂ© de passe actuelle incorrecte." + +#: pg-act/auth/password.php:10 +msgid "Password updated." +msgstr "ClĂ© de passe mise Ă jour." + +#: pg-act/auth/register.php:10 pg-act/auth/username.php:8 +msgid "This username is already taken." +msgstr "Cet identifiant est dĂ©jĂ pris." + +#: pg-act/auth/unregister.php:4 +msgid "Account deletion must be confirmed." +msgstr "La suppression du compte doit ĂȘtre confirmĂ©e." + +#: pg-act/auth/unregister.php:29 +msgid "Account deleted." +msgstr "Compte supprimĂ©." + +#: pg-act/auth/username.php:17 +msgid "Username updated." +msgstr "Identifiant mis Ă jour." + +#: pg-act/ht/add-dns.php:9 pg-act/ht/add-subdomain.php:10 +msgid "This domain already exists on this service. Use another one." +msgstr "Ce domaine existe dĂ©jĂ sur ce service. Utilisez-en un autre." + +#: pg-act/ht/add-dns.php:13 pg-act/ht/add-dns.php:19 pg-act/ht/add-dns.php:25 +#, php-format +msgid "Can't retrieve the %s record." +msgstr "Impossible de rĂ©cupĂ©rer l'enregistrement %s." + +#: pg-act/ht/add-dns.php:15 pg-act/ht/add-dns.php:21 +#, php-format +msgid "This domain must have %2$s as its only %1$s record." +msgstr "Ce domain doit avoir %2$s pour unique enregistrement %1$s." + +#: pg-act/ht/add-dns.php:27 +msgid "No TXT record with the expected format has been found." +msgstr "Aucun enregistrement TXT avec le format attendu n'a Ă©tĂ© trouvĂ©." + +#: pg-act/ht/add-dns.php:59 pg-act/ht/add-onion.php:47 +#: pg-act/ht/add-subdomain.php:19 pg-act/ht/add-subpath.php:19 +#, php-format +msgid "%s added on this directory." +msgstr "%s ajoutĂ© sur ce dossier." + +#: pg-act/ht/add-onion.php:47 +#, php-format +msgid "Its address is: %s" +msgstr "Son adresse est : %s" + +#: pg-act/ht/add-subdomain.php:7 +msgid "Invalid domain label." +msgstr "Label de domaine invalide." + +#: pg-act/ht/add-subpath.php:7 +msgid "Invalid path." +msgstr "Chemin invalide." + +#: pg-act/ht/add-subpath.php:10 +msgid "This path already exists on this service. Use another one." +msgstr "Ce chemin est dĂ©jĂ pris sur ce service. Utilisez-en un autre." + +#: pg-act/ht/del.php:11 +msgid "Access removed." +msgstr "AccĂšs retirĂ©." + +#: pg-act/ns/caa.php:23 pg-act/ns/cname.php:14 pg-act/ns/dname.php:14 +#: pg-act/ns/ip.php:14 pg-act/ns/loc.php:70 pg-act/ns/mx.php:18 +#: pg-act/ns/ns.php:14 pg-act/ns/srv.php:26 pg-act/ns/sshfp.php:23 +#: pg-act/ns/tlsa.php:27 pg-act/ns/txt.php:15 pg-act/reg/ds.php:30 +#: pg-act/reg/glue.php:16 pg-act/reg/ns.php:13 +msgid "Modification done." +msgstr "Modification effectuĂ©e." + +#: pg-act/ns/edit.php:17 +#, php-format +msgid "The zone is limited to %s characters." +msgstr "La zone est limitĂ©e Ă %s caractĂšres." + +#: pg-act/ns/edit.php:21 +msgid "The following line does not match the expected format: " +msgstr "La ligne suivante ne correspond pas au format attendu : " + +#: pg-act/ns/edit.php:23 +#, php-format +msgid "The %s type is not allowed." +msgstr "Le type %s n'est pas autorisĂ©." + +#: pg-act/ns/edit.php:38 +msgid "Sent zone content is not correct (according tokzonecheck
)."
+msgstr "Le contenu de zone envoyé n'est pas correct (selon kzonecheck
)."
+
+#: pg-act/ns/zone-add.php:6
+msgid "This zone already exists on the service."
+msgstr "Cette zone existe déjà sur ce service."
+
+#: pg-act/ns/zone-add.php:10
+msgid "Parent zone's name servers not found."
+msgstr "Serveurs de nom de la zone parente introuvables."
+
+#: pg-act/ns/zone-add.php:16 pg-act/reg/transfer.php:13
+msgid "NS authentication record not found."
+msgstr "Enregistrement d'authentification NS introuvable."
+
+#: pg-act/ns/zone-add.php:52
+msgid "Zone created."
+msgstr "Zone créée."
+
+#: pg-act/ns/zone-del.php:7
+msgid "Zone deleted."
+msgstr "Zone supprimée."
+
+#: pg-act/reg/register.php:4
+msgid "This format of subdomain is not allowed."
+msgstr "Ce format de sous-domaine n'est pas autorisé."
+
+#: pg-act/reg/register.php:9
+msgid "This domain is already registered."
+msgstr "Ce domain est déjà enregistré."
+
+#: pg-act/reg/register.php:12
+msgid "This domain is reserved."
+msgstr "Ce domain est réservé."
+
+#: pg-act/reg/register.php:22
+msgid "Domain registered."
+msgstr "Domaine enregistré."
+
+#: pg-act/reg/transfer.php:9
+msgid "The current account already owns this domain."
+msgstr "Le compte actuel possÚde déjà ce domaine."
+
+#: pg-act/reg/transfer.php:26
+msgid "The domain has been transferred to the current account ; the NS authentication record has been automatically deleted."
+msgstr "Le domaine a été transféré vers le compte actuel ; l'enregistrement d'authentification NS a été automatiquement supprimé."
+
+#: pg-act/reg/unregister.php:7
+msgid "Domain unregistered."
+msgstr "Domaine désenregistré."
+
+#: pg-view/auth/approval.php:2
+msgid "This form allows to use an approval key to validate your account. Approval keys are distributed by an administrator upon request."
+msgstr "Ce formulaire permet d'utiliser une clé d'approbation pour valider son compte. Les clés d'approbation sont distribuées par ane administrataire sur demande."
+
+#: pg-view/auth/approval.php:6
+msgid "Approval key"
+msgstr "Clé d'approbation"
+
+#: pg-view/auth/approval.php:9
+msgid "Use for this account"
+msgstr "Utiliser pour ce compte"
+
+#: pg-view/auth/index.php:5
+msgid "You are currently using a testing account."
+msgstr "Vous utilisez actuellement un compte de test."
+
+#: pg-view/auth/index.php:6
+msgid "You are currently using an approved account."
+msgstr "Vous utilisez actuellement un compte approuvé."
+
+#: pg-view/auth/index.php:7
+#, php-format
+msgid "It's internal ID is %s."
+msgstr "Son identifiant interne est %s."
+
+#: pg-view/auth/index.php:9
+msgid "You are not logged in."
+msgstr "Vous n'ĂȘtes connecté·e Ă aucun compte."
+
+#: pg-view/auth/index.php:13
+msgid "Account types"
+msgstr "Types de comptes"
+
+#: pg-view/auth/index.php:16
+msgid "Testing"
+msgstr "De test"
+
+#: pg-view/auth/index.php:18
+msgid "It's the default account type, with limited capabilities in order to avoid abuses:"
+msgstr "C'est le type de compte par défaut, avec des capacités limitées afin de limiter les abus :"
+
+#: pg-view/auth/index.php:20
+msgid "May be deleted anytime"
+msgstr "Peut ĂȘtre supprimĂ© n'importe quand"
+
+#: pg-view/auth/index.php:21 pg-view/auth/index.php:29
+#, php-format
+msgid "%s of SFTP quota"
+msgstr "Quota SFTP de %s"
+
+#: pg-view/auth/index.php:21 pg-view/auth/index.php:29 pg-view/ht/index.php:51
+msgid "GiB"
+msgstr "Gio"
+
+#: pg-view/auth/index.php:21 pg-view/auth/index.php:29 pg-view/ht/index.php:51
+msgid "MiB"
+msgstr "Mio"
+
+#: pg-view/auth/index.php:22
+msgid "Let's Encrypt certificate from the staging environment (not trusted by clients)"
+msgstr "Certificat Let's Encrypt de test (n'est pas reconnu par les clients)"
+
+#: pg-view/auth/index.php:25
+msgid "Approved"
+msgstr "Approuvé"
+
+#: pg-view/auth/index.php:27
+msgid "It was originally a testing account, but has been approved by an administrator, and is suited for stable usecases:"
+msgstr "C'est originellement un compte de test, mais qui a été approuvé par ane administrataire, et qui permet une utilisation stable :"
+
+#: pg-view/auth/index.php:30
+msgid "Stable Let's Encrypt certificates"
+msgstr "Vrai certificat Let's Encrypt"
+
+#: pg-view/auth/login.php:1
+msgid "Need an accout?"
+msgstr "Nouvele ?"
+
+#: pg-view/auth/login.php:1 pg-view/reg/register.php:10
+msgid "Register"
+msgstr "Créer un compte"
+
+#: pg-view/auth/login.php:4 pg-view/auth/register.php:4 pg-view/ht/index.php:94
+msgid "Username"
+msgstr "Identifiant"
+
+#: pg-view/auth/login.php:8 pg-view/auth/register.php:9 pg-view/ht/index.php:98
+msgid "Password"
+msgstr "Clé de passe"
+
+#: pg-view/auth/password.php:2
+msgid "Current password"
+msgstr "Clé de passe actuelle"
+
+#: pg-view/auth/password.php:5
+msgid "New password"
+msgstr "Nouvelle clé de passe"
+
+#: pg-view/auth/password.php:8
+msgid "Update password"
+msgstr "Mettre à jour la clé de passe"
+
+#: pg-view/auth/register.php:1
+msgid "Already have an account?"
+msgstr "DĂ©jĂ un compte ?"
+
+#: pg-view/auth/register.php:10
+#, php-format
+msgid "Minimum %1$s characters, or %2$s characters if it contains lowercase, uppercase and digit."
+msgstr "Minimum %1$s caractĂšres, ou %2$s caractĂšres si elle contient minuscule, majuscule et chiffre."
+
+#: pg-view/auth/register.php:14
+msgid "Create an account"
+msgstr "Se créer un nouveau compte"
+
+#: pg-view/auth/unregister.php:2
+msgid "This will delete every resource managed by the current account, including registered domains, hosted DNS records, websites files and cryptographic keys for Onion services and DNSSEC."
+msgstr "Ceci supprimera toutes les ressources gérées par le compte actuel, y compris les domaines enregistrés, les enregistrements DNS hébergés, les fichiers des sites et les clés cryptographiques des services Onion et de DNSSEC."
+
+#: pg-view/auth/unregister.php:7
+msgid "Delete the current account and everything related (required)"
+msgstr "Supprimer le compte actuel et tout ce qui y est lié (requis)"
+
+#: pg-view/auth/unregister.php:9 pg-view/ns/form.ns.php:4 pg-view/reg/ds.php:5
+#: pg-view/reg/glue.php:5 pg-view/reg/ns.php:5
+msgid "Delete"
+msgstr "Supprimer"
+
+#: pg-view/auth/username.php:2
+msgid "New username"
+msgstr "Nouvel identifiant"
+
+#: pg-view/auth/username.php:5
+msgid "Update username"
+msgstr "Mettre Ă jour l'identifiant"
+
+#: pg-view/ht/add-dns.php:2
+msgid "A Let's Encrypt certificate will be obtained."
+msgstr "Un certificat Let's Encrypt sera obtenu."
+
+#: pg-view/ht/add-dns.php:6
+msgid "The domain must have the following records when the form is being processed."
+msgstr "Le domaine doit avoir les enregistrements suivant pendant le traitement du formulaire."
+
+#: pg-view/ht/add-dns.php:25 pg-view/ns/form.ns.php:8 pg-view/ns/print.php:32
+#: pg-view/ns/zone-add.php:6 pg-view/reg/ds.php:8 pg-view/reg/glue.php:8
+#: pg-view/reg/glue.php:15 pg-view/reg/ns.php:8 pg-view/reg/print.php:2
+#: pg-view/reg/print.php:16 pg-view/reg/unregister.php:6
+msgid "Domain"
+msgstr "Domaine"
+
+#: pg-view/ht/add-dns.php:27 pg-view/ht/add-onion.php:2
+#: pg-view/ht/add-subdomain.php:4 pg-view/ht/add-subpath.php:4
+msgid "Target directory"
+msgstr "Dossier ciblé"
+
+#: pg-view/ht/add-dns.php:36 pg-view/ht/add-onion.php:11
+#: pg-view/ht/add-subdomain.php:13 pg-view/ht/add-subpath.php:13
+msgid "Setup access"
+msgstr "Créer l'accÚs"
+
+#: pg-view/ht/add-subdomain.php:2 pg-view/ns/form.ns.php:10
+#: pg-view/reg/glue.php:10 pg-view/reg/register.php:6
+msgid "Subdomain"
+msgstr "Sous-domaine"
+
+#: pg-view/ht/add-subpath.php:2
+msgid "Path"
+msgstr "Chemin"
+
+#: pg-view/ht/del.php:2
+msgid "Access to delete"
+msgstr "AccĂšs Ă retirer"
+
+#: pg-view/ht/index.php:2
+msgid "This service allows you to send files on the server using SFTP, and to make them publicly available with HTTP."
+msgstr "Ce service permet d'envoyer des fichiers sur le serveur par SFTP, et de les rendre publiquement accessibles par HTTP."
+
+#: pg-view/ht/index.php:8
+msgid "Currently hosted sites"
+msgstr "Sites actuellement hébergés"
+
+#: pg-view/ht/index.php:38
+msgid "Adding a site access"
+msgstr "Ajouter un accĂšs de site"
+
+#: pg-view/ht/index.php:40
+#, php-format
+msgid "In order to be able to setup an HTTP site with this service, a subdirectory for this site must be created inside the SFTP space first. The name of this subdirectory can only contain %1$s, %2$s, %3$s, %4$s and %5$s."
+msgstr "Pour pouvoir crĂ©er un site HTTP avec ce service, un sous-dossier pour ce site doit d'abord ĂȘtre crĂ©Ă© dans l'espace SFTP. Le nom de ce sous-dossier ne peut contenir que %1$s, %2$s, %3$s, %4$s et %5$s."
+
+#: pg-view/ht/index.php:51
+#, php-format
+msgid "The SFTP space is limited to %s. Indicate the following values to your SFTP client to access it."
+msgstr "L'espace SFTP est limité à %s. Indiquez les valeurs suivantes à votre client pour y accéder."
+
+#: pg-view/ht/index.php:55
+msgid "Authenticating the server"
+msgstr "Authentifier le serveur"
+
+#: pg-view/ht/index.php:57
+msgid "An SSHFP record is available."
+msgstr "Un enregistrement SSHFP est disponible."
+
+#: pg-view/ht/index.php:60
+msgid "Plain public key"
+msgstr "Clé publique"
+
+#: pg-view/ht/index.php:65
+msgid "Public key fingerprint"
+msgstr "Empreinte de la clé publique"
+
+#: pg-view/ht/index.php:70
+msgid "ASCII art"
+msgstr "Art ASCII"
+
+#: pg-view/ht/index.php:77
+msgid "Connecting to the server"
+msgstr "Se connecter au serveur"
+
+#: pg-view/ht/index.php:82
+msgid "Server"
+msgstr "Serveur"
+
+#: pg-view/ht/index.php:86 pg-view/ns/srv.php:16
+msgid "Port"
+msgstr "Port"
+
+#: pg-view/ht/index.php:90
+msgid "Directory"
+msgstr "Dossier"
+
+#: pg-view/ht/index.php:100
+msgid "The one of your account"
+msgstr "Celle de votre compte"
+
+#: pg-view/ht/index.php:111
+msgid "A content security policy (CSP) forbids Web browsers from loading JavaScript or third-party resources."
+msgstr "Une politique de sécurité du contenu (CSP) interdit l'intégration de ressources tierces ou de JavaScript."
+
+#: pg-view/ht/index.php:114
+msgid "gzip compression"
+msgstr "Compression gzip"
+
+#: pg-view/ht/index.php:116
+msgid "Static gzip compression is supported: if the client supports it and the file is available, path.gz
is served instead of path
."
+msgstr "La compression gzip statique est supportée : si le client le supporte et que le fichier est disponible, chemin.gz
est servi au lieu de chemin
."
+
+#: pg-view/ht/index.php:119
+msgid "Index page"
+msgstr "Page d'index"
+
+#: pg-view/ht/index.php:121
+msgid "When a request hits a directory, the first of the following files that exists inside this directory is served:"
+msgstr "Lors d'une requĂȘte sur un dossier, le premier des fichiers suivants qui existe dans ce dossier est rĂ©pondu :"
+
+#: pg-view/ht/index.php:129
+msgid "404 error page"
+msgstr "Page d'erreur 404"
+
+#: pg-view/ht/index.php:131
+msgid "When a request ends in a 404
error, the first of the following files that exists at the root of the site is served:"
+msgstr "Lors d'une requĂȘte aboutissant Ă une erreur 404
, le premier des fichiers suivants qui existe à la racine du site est répondu :"
+
+#: pg-view/ns/caa.php:3
+msgid "Flag"
+msgstr "Flag"
+
+#: pg-view/ns/caa.php:7 pg-view/ns/print.php:56
+msgid "Tag"
+msgstr "Tag"
+
+#: pg-view/ns/caa.php:11 pg-view/ns/form.ns.php:31 pg-view/ns/print.php:35
+#: pg-view/ns/tlsa.php:37 pg-view/reg/print.php:19
+msgid "Value"
+msgstr "Valeur"
+
+#: pg-view/ns/caa.php:15 pg-view/ns/cname.php:7 pg-view/ns/dname.php:7
+#: pg-view/ns/ip.php:5 pg-view/ns/loc.php:75 pg-view/ns/mx.php:11
+#: pg-view/ns/ns.php:7 pg-view/ns/srv.php:27 pg-view/ns/sshfp.php:29
+#: pg-view/ns/tlsa.php:43 pg-view/ns/txt.php:7 pg-view/reg/ds.php:56
+#: pg-view/reg/glue.php:29 pg-view/reg/ns.php:22
+msgid "Apply"
+msgstr "Appliquer"
+
+#: pg-view/ns/cname.php:3
+msgid "Canonical name"
+msgstr "Nom canonique"
+
+#: pg-view/ns/dname.php:3
+msgid "Delegation name"
+msgstr "Nom délégué"
+
+#: pg-view/ns/edit.php:2
+msgid "Zone to be changed"
+msgstr "Zone Ă modifier"
+
+#: pg-view/ns/edit.php:12 pg-view/ns/print.php:20 pg-view/reg/print.php:11
+msgid "Display"
+msgstr "Afficher"
+
+#: pg-view/ns/edit.php:23
+#, php-format
+msgid "New content of the %s zone"
+msgstr "Nouveau contenu de la zone %s"
+
+#: pg-view/ns/edit.php:27
+msgid "Replace"
+msgstr "Remplacer"
+
+#: pg-view/ns/edit.php:38
+msgid "Default values"
+msgstr "Valeurs par défaut"
+
+#: pg-view/ns/edit.php:40
+#, php-format
+msgid "If the TTL is omitted, it will default to %s seconds."
+msgstr "Si le TTL est omis, is sera définit à %s secondes."
+
+#: pg-view/ns/edit.php:42
+msgid "Precising the class (IN
) is optional."
+msgstr "La précision de la classe (IN
) est facultative."
+
+#: pg-view/ns/edit.php:44
+msgid "Allowed values"
+msgstr "Valeurs autorisées"
+
+#: pg-view/ns/edit.php:46
+#, php-format
+msgid "Submitted zone content is limited to %s characters."
+msgstr "La zone n'est pas autorisée à dépasser %s caractÚres."
+
+#: pg-view/ns/edit.php:48
+#, php-format
+msgid "TTLs must last between %1$s and %2$s seconds."
+msgstr "Les TTLs ne sont autorisés qu'entre %1$s et %2$s secondes."
+
+#: pg-view/ns/edit.php:50
+msgid "The only types that can be defined are:"
+msgstr "Les seuls types dont l'édition est autorisée sont :"
+
+#: pg-view/ns/form.ns.php:1 pg-view/reg/ds.php:2 pg-view/reg/glue.php:2
+#: pg-view/reg/ns.php:2
+msgid "Action"
+msgstr "Action"
+
+#: pg-view/ns/form.ns.php:3 pg-view/ns/zone-add.php:8 pg-view/reg/ds.php:4
+#: pg-view/reg/glue.php:4 pg-view/reg/ns.php:4
+msgid "Add"
+msgstr "Ajouter"
+
+#: pg-view/ns/form.ns.php:15 pg-view/ns/print.php:52 pg-view/ns/zone-del.php:2
+msgid "Zone"
+msgstr "Zone"
+
+#: pg-view/ns/form.ns.php:29 pg-view/ns/print.php:33 pg-view/reg/print.php:17
+msgid "TTL"
+msgstr "TTL"
+
+#: pg-view/ns/form.ns.php:45
+msgid "Unit"
+msgstr "Unité"
+
+#: pg-view/ns/form.ns.php:48
+msgid "second"
+msgstr "seconde"
+
+#: pg-view/ns/form.ns.php:49
+msgid "minute"
+msgstr "minute"
+
+#: pg-view/ns/form.ns.php:50
+msgid "hour"
+msgstr "heure"
+
+#: pg-view/ns/form.ns.php:51
+msgid "day"
+msgstr "jour"
+
+#: pg-view/ns/index.php:2
+msgid "This service allows to host and manage DNS records inside a DNS zone."
+msgstr "Ce service permet d'héberger et de gérer les enregistrements DNS à l'intérieur d'une zone DNS."
+
+#: pg-view/ns/index.php:8
+msgid "Currently hosted zones"
+msgstr "Zones actuellement hébergées"
+
+#: pg-view/ns/index.php:26
+msgid "A zone hosted on this service is served by these name servers:"
+msgstr "Une zone hébergée sur ce service est servie par les serveurs suivants :"
+
+#: pg-view/ns/ip.php:3 pg-view/reg/glue.php:26
+msgid "IP address"
+msgstr "Adresse IP"
+
+#: pg-view/ns/loc.php:4
+msgid "Latitude"
+msgstr "Latitude"
+
+#: pg-view/ns/loc.php:6 pg-view/ns/loc.php:34
+msgid "Degrees"
+msgstr "Dégrés"
+
+#: pg-view/ns/loc.php:11 pg-view/ns/loc.php:39
+msgid "Minutes"
+msgstr "Minutes"
+
+#: pg-view/ns/loc.php:16 pg-view/ns/loc.php:44
+msgid "Seconds"
+msgstr "Secondes"
+
+#: pg-view/ns/loc.php:21 pg-view/ns/loc.php:49
+msgid "Direction"
+msgstr "Direction"
+
+#: pg-view/ns/loc.php:25
+msgid "North"
+msgstr "Nord"
+
+#: pg-view/ns/loc.php:26
+msgid "South"
+msgstr "Sud"
+
+#: pg-view/ns/loc.php:32
+msgid "Longitude"
+msgstr "Longitude"
+
+#: pg-view/ns/loc.php:53
+msgid "East"
+msgstr "Est"
+
+#: pg-view/ns/loc.php:54
+msgid "West"
+msgstr "Ouest"
+
+#: pg-view/ns/loc.php:59
+msgid "Altitude"
+msgstr "Altitude"
+
+#: pg-view/ns/loc.php:63
+msgid "Size"
+msgstr "Taille"
+
+#: pg-view/ns/loc.php:67
+msgid "Horizontal precision"
+msgstr "Précision horizontale"
+
+#: pg-view/ns/loc.php:71
+msgid "Vertical precision"
+msgstr "Précision verticale"
+
+#: pg-view/ns/mx.php:3 pg-view/ns/srv.php:4
+msgid "Priority"
+msgstr "Priorité"
+
+#: pg-view/ns/mx.php:7
+msgid "Host"
+msgstr "HĂŽte"
+
+#: pg-view/ns/ns.php:3 pg-view/reg/ns.php:18
+msgid "Name server"
+msgstr "Serveur de nom"
+
+#: pg-view/ns/print.php:3
+msgid "Records table"
+msgstr "Tableau des enregistrements"
+
+#: pg-view/ns/print.php:6
+msgid "DS record"
+msgstr "Enregistrement DS"
+
+#: pg-view/ns/print.php:9
+msgid "Raw zonefile"
+msgstr "Fichier de zone brut"
+
+#: pg-view/ns/print.php:11
+msgid "Selected zone"
+msgstr "Zone"
+
+#: pg-view/ns/print.php:34 pg-view/reg/print.php:18
+msgid "Type"
+msgstr "Type"
+
+#: pg-view/ns/print.php:60 pg-view/ns/sshfp.php:4 pg-view/reg/ds.php:22
+msgid "Algorithm"
+msgstr "Algorithme"
+
+#: pg-view/ns/print.php:64 pg-view/reg/ds.php:41
+msgid "Digest type"
+msgstr "Type de condensat"
+
+#: pg-view/ns/print.php:68
+msgid "Digest"
+msgstr "Condensat"
+
+#: pg-view/ns/srv.php:10
+msgid "Weight"
+msgstr "Poids"
+
+#: pg-view/ns/srv.php:22
+msgid "Target"
+msgstr "Cible"
+
+#: pg-view/ns/sshfp.php:15
+msgid "Hash type"
+msgstr "Type de hash"
+
+#: pg-view/ns/sshfp.php:24
+msgid "Fingerprint"
+msgstr "Empreinte"
+
+#: pg-view/ns/tlsa.php:4
+msgid "Use"
+msgstr "Utilisation"
+
+#: pg-view/ns/tlsa.php:16
+msgid "Selector"
+msgstr "Selecteur"
+
+#: pg-view/ns/tlsa.php:20
+msgid "the full certificate must match"
+msgstr "le certificat entier doit correspondre"
+
+#: pg-view/ns/tlsa.php:21
+msgid "the certificate public key must match"
+msgstr "la clé publique du certificat doit correspondre"
+
+#: pg-view/ns/tlsa.php:26
+msgid "Match type"
+msgstr "Type de correspondance"
+
+#: pg-view/ns/tlsa.php:30
+msgid "full certificate"
+msgstr "certificat entier"
+
+#: pg-view/ns/txt.php:3
+msgid "Text"
+msgstr "Texte"
+
+#: pg-view/ns/txt.php:5
+msgid "Some textâŠ"
+msgstr "Du texteâŠ"
+
+#: pg-view/ns/zone-add.php:2
+#, php-format
+msgid "To prove that you own this domain, it must have a NS record equal to %s when the form is being processed."
+msgstr "Pour prouver que vous possédez bien ce domaine, il doit posséder un enregistrement NS égal à %s lors du traitement de ce formulaire."
+
+#: pg-view/ns/zone-del.php:11
+msgid "Delete everything related to this zone"
+msgstr "Supprimer tout de cette zone"
+
+#: pg-view/reg/ds.php:18
+msgid "Key tag"
+msgstr "Tag de la clé"
+
+#: pg-view/reg/ds.php:52
+msgid "Key"
+msgstr "Condensat"
+
+#: pg-view/reg/glue.php:27
+#, php-format
+msgid "%1$s or %2$s"
+msgstr "%1$s ou %2$s"
+
+#: pg-view/reg/index.php:2
+#, php-format
+msgid "This domain name registry allows to register domains ending with %1$s
, for instance domain%1$s
."
+msgstr "Ce registre de noms de domaine permet d'enregistrer des domaines se terminant par %1$s
, par exemple domaine%1$s
."
+
+#: pg-view/reg/index.php:7
+msgid "Currently registered domains"
+msgstr "Domaines actuellement enregistrés"
+
+#: pg-view/reg/register.php:2
+msgid "Register a new domain on your account. It must consist of between 4 and 63 letters and digits."
+msgstr "Enregistrer un nouveau domaine sur son compte. Il doit ĂȘtre composĂ© d'entre 4 et 63 lettres et chiffres."
+
+#: pg-view/reg/transfer.php:2
+#, php-format
+msgid "To prove that you are allowed to receive the domain by its current owner, the domain must have an NS record equal to %s when the form is being processed. The NS record will be automatically deleted once validated."
+msgstr "Pour prouver que vous ĂȘtes autorisĂ© Ă recevoir le domaine par san possessaire actuele, ledit domaine doit possĂ©der un enregistrement NS Ă©gal Ă %s lors du traitement de ce formulaire. Cet enregistrement sera automatiquement retirĂ© une fois validĂ©."
+
+#: pg-view/reg/transfer.php:6
+msgid "Subdomain that will be transferred to this account"
+msgstr "Sous-domaine à transférer vers ce compte"
+
+#: pg-view/reg/transfer.php:10
+msgid "Receive the domain"
+msgstr "Recevoir le domaine"
+
+#: pg-view/reg/unregister.php:2
+msgid "This will unregister the domain, making it registerable by anyone again."
+msgstr "Ceci désenregistrera le domaine, ce qui le re-disponibilisera à tout le monde."
+
+#: pg-view/reg/unregister.php:16
+msgid "Unregister"
+msgstr "DĂ©senregistrer"
diff --git a/locales/messages.pot b/locales/messages.pot
new file mode 100644
index 0000000..0cf299d
--- /dev/null
+++ b/locales/messages.pot
@@ -0,0 +1,1094 @@
+#: pages.php:9
+msgid "Authentication"
+msgstr ""
+
+#: pages.php:10
+msgid "Manage account"
+msgstr ""
+
+#: pages.php:13 view.php:21 pg-view/auth/login.php:12
+#: pg-view/auth/register.php:1
+msgid "Log in"
+msgstr ""
+
+#: pages.php:14
+msgid "Start a new navigation session with an existing account"
+msgstr ""
+
+#: pages.php:18 view.php:19
+msgid "Log out"
+msgstr ""
+
+#: pages.php:19
+msgid "End the current session and delete cookies and cache"
+msgstr ""
+
+#: pages.php:22
+msgid "Create account"
+msgstr ""
+
+#: pages.php:23
+msgid "Create a new account, and log in with it"
+msgstr ""
+
+#: pages.php:28
+msgid "Delete account"
+msgstr ""
+
+#: pages.php:29
+msgid "Erase all current account's data"
+msgstr ""
+
+#: pages.php:32
+msgid "Switch to an approved account"
+msgstr ""
+
+#: pages.php:33
+msgid "Switch to an approved account using an approval key"
+msgstr ""
+
+#: pages.php:36
+msgid "Change password"
+msgstr ""
+
+#: pages.php:37
+msgid "Change the character string used to authenticate yourself"
+msgstr ""
+
+#: pages.php:40
+msgid "Change username"
+msgstr ""
+
+#: pages.php:41
+msgid "Change the name used to identify your account when logging in and displayed at the start of every page"
+msgstr ""
+
+#: pages.php:46
+#, php-format
+msgid "%s registry"
+msgstr ""
+
+#: pages.php:47
+#, php-format
+msgid "Register and delegate a %s subdomain"
+msgstr ""
+
+#: pages.php:50
+msgid "Register domain"
+msgstr ""
+
+#: pages.php:51
+#, php-format
+msgid "Get a %s subdomain"
+msgstr ""
+
+#: pages.php:55
+msgid "Unregister domain"
+msgstr ""
+
+#: pages.php:56
+msgid "Delete all data related to a domain and make it available to the public again"
+msgstr ""
+
+#: pages.php:59
+msgid "Display domain records"
+msgstr ""
+
+#: pages.php:60
+msgid "Print every record related to a domain and served by the registry"
+msgstr ""
+
+#: pages.php:63 pages.php:67 pages.php:107 pages.php:111 pages.php:115
+#: pages.php:119 pages.php:123 pages.php:127 pages.php:131 pages.php:135
+#: pages.php:139 pages.php:143
+#, php-format
+msgid "%s records"
+msgstr ""
+
+#: pages.php:64
+#, php-format
+msgid "Indicate the name servers of a %s subdomain"
+msgstr ""
+
+#: pages.php:68
+msgid "Delegate DNSSEC trust"
+msgstr ""
+
+#: pages.php:71
+msgid "Receive a domain transfer"
+msgstr ""
+
+#: pages.php:72
+msgid "Transfer a domain owned by another account to the current account"
+msgstr ""
+
+#: pages.php:75
+msgid "Glue records"
+msgstr ""
+
+#: pages.php:76
+msgid "Advanced: store the IP address of a name server whose domain is inside the domain it serves"
+msgstr ""
+
+#: pages.php:81 pg-view/ns/index.php:24
+msgid "Name servers"
+msgstr ""
+
+#: pages.php:82
+msgid "Host and manage domain's records"
+msgstr ""
+
+#: pages.php:85
+msgid "Add zone"
+msgstr ""
+
+#: pages.php:86
+#, php-format
+msgid "The zone will be managed by %s name servers"
+msgstr ""
+
+#: pages.php:90
+msgid "Delete zone"
+msgstr ""
+
+#: pages.php:91
+msgid "Erase all zone data"
+msgstr ""
+
+#: pages.php:94
+msgid "Display zone"
+msgstr ""
+
+#: pages.php:95
+msgid "Print zonefile content"
+msgstr ""
+
+#: pages.php:98
+msgid "Edit zone"
+msgstr ""
+
+#: pages.php:99
+msgid "Change zonefile content"
+msgstr ""
+
+#: pages.php:103
+msgid "AAAA and A records"
+msgstr ""
+
+#: pages.php:104
+msgid "Store domain's IP address"
+msgstr ""
+
+#: pages.php:108
+msgid "Store zone's name server"
+msgstr ""
+
+#: pages.php:112
+msgid "Associate text to domain"
+msgstr ""
+
+#: pages.php:116
+msgid "Limit the certificate authorities allowed to certify the domain"
+msgstr ""
+
+#: pages.php:120
+msgid "Store the location of a domain's service"
+msgstr ""
+
+#: pages.php:124
+msgid "Store the email server's address"
+msgstr ""
+
+#: pages.php:128
+msgid "Store SSH public keys fingerprints"
+msgstr ""
+
+#: pages.php:132
+msgid "Setup DANE by publishing the TLS certificate fingerprint"
+msgstr ""
+
+#: pages.php:136
+msgid "Define a domain as an alias of another"
+msgstr ""
+
+#: pages.php:140
+msgid "Define all subdomains of a domain as aliases of subdomains of another domain"
+msgstr ""
+
+#: pages.php:144
+msgid "Store geographic coordinates"
+msgstr ""
+
+#: pages.php:149
+msgid "Web"
+msgstr ""
+
+#: pages.php:150
+msgid "Upload a static website into an SFTP space"
+msgstr ""
+
+#: pages.php:153
+#, php-format
+msgid "%s subpath access"
+msgstr ""
+
+#: pages.php:154 pages.php:159 pages.php:164
+#, php-format
+msgid "Its URL will look like %s"
+msgstr ""
+
+#: pages.php:154 pages.php:159 pages.php:164
+msgid "mysite"
+msgstr ""
+
+#: pages.php:158
+#, php-format
+msgid "%s subdomain access"
+msgstr ""
+
+#: pages.php:163
+msgid "Dedicated domain with Let's Encrypt certificate access"
+msgstr ""
+
+#: pages.php:168
+msgid "Onion service access"
+msgstr ""
+
+#: pages.php:169
+#, php-format
+msgid "Its URL will look like %s, and work only through the Tor network"
+msgstr ""
+
+#: pages.php:173 pg-view/ht/del.php:18
+msgid "Delete access"
+msgstr ""
+
+#: pages.php:174
+msgid "Delete an existing HTTP access from a subdirectory of the SFTP space"
+msgstr ""
+
+#: router.php:120
+msgid "You need to be logged in to do this."
+msgstr ""
+
+#: router.php:122
+msgid "This account doesn't exist anymore. Log out to end this ghost session."
+msgstr ""
+
+#: view.php:21
+msgid "Anonymous"
+msgstr ""
+
+#: view.php:41
+#, php-format
+msgid "This form won't be accepted because you need to %slog in%s first."
+msgstr ""
+
+#: view.php:48
+#, php-format
+msgid "%sSource code%s available under %s."
+msgstr ""
+
+#: fn/auth.php:108
+msgid "Account rate limit reached, try again later."
+msgstr ""
+
+#: fn/auth.php:130
+msgid "Global rate limit reached, try again later."
+msgstr ""
+
+#: fn/common.php:9
+msgid "Success: "
+msgstr ""
+
+#: fn/common.php:10
+msgid "User error: "
+msgstr ""
+
+#: fn/common.php:11
+msgid "Server error: "
+msgstr ""
+
+#: fn/common.php:133
+msgid "Wrong proof."
+msgstr ""
+
+#: fn/dns.php:62
+msgid "IP address malformed."
+msgstr ""
+
+#: fn/dns.php:67 fn/ht.php:6
+msgid "Domain malformed."
+msgstr ""
+
+#: fn/ns.php:40 pg-act/ns/edit.php:25
+#, php-format
+msgid "TTLs shorter than %s seconds are forbidden."
+msgstr ""
+
+#: fn/ns.php:42 pg-act/ns/edit.php:27
+#, php-format
+msgid "TTLs longer than %s seconds are forbidden."
+msgstr ""
+
+#: pg-act/auth/approval.php:4
+msgid "This account is already approved."
+msgstr ""
+
+#: pg-act/auth/approval.php:7
+msgid "This approval key is not available. It has been mistyped, used for another account, or has expired."
+msgstr ""
+
+#: pg-act/auth/approval.php:18
+msgid "Account approved."
+msgstr ""
+
+#: pg-act/auth/login.php:10
+msgid "This account does not exist."
+msgstr ""
+
+#: pg-act/auth/login.php:15
+msgid "Wrong password."
+msgstr ""
+
+#: pg-act/auth/password.php:6
+msgid "Wrong current password."
+msgstr ""
+
+#: pg-act/auth/password.php:10
+msgid "Password updated."
+msgstr ""
+
+#: pg-act/auth/register.php:10 pg-act/auth/username.php:8
+msgid "This username is already taken."
+msgstr ""
+
+#: pg-act/auth/unregister.php:4
+msgid "Account deletion must be confirmed."
+msgstr ""
+
+#: pg-act/auth/unregister.php:29
+msgid "Account deleted."
+msgstr ""
+
+#: pg-act/auth/username.php:17
+msgid "Username updated."
+msgstr ""
+
+#: pg-act/ht/add-dns.php:9 pg-act/ht/add-subdomain.php:10
+msgid "This domain already exists on this service. Use another one."
+msgstr ""
+
+#: pg-act/ht/add-dns.php:13 pg-act/ht/add-dns.php:19 pg-act/ht/add-dns.php:25
+#, php-format
+msgid "Can't retrieve the %s record."
+msgstr ""
+
+#: pg-act/ht/add-dns.php:15 pg-act/ht/add-dns.php:21
+#, php-format
+msgid "This domain must have %2$s as its only %1$s record."
+msgstr ""
+
+#: pg-act/ht/add-dns.php:27
+msgid "No TXT record with the expected format has been found."
+msgstr ""
+
+#: pg-act/ht/add-dns.php:59 pg-act/ht/add-onion.php:47
+#: pg-act/ht/add-subdomain.php:19 pg-act/ht/add-subpath.php:19
+#, php-format
+msgid "%s added on this directory."
+msgstr ""
+
+#: pg-act/ht/add-onion.php:47
+#, php-format
+msgid "Its address is: %s"
+msgstr ""
+
+#: pg-act/ht/add-subdomain.php:7
+msgid "Invalid domain label."
+msgstr ""
+
+#: pg-act/ht/add-subpath.php:7
+msgid "Invalid path."
+msgstr ""
+
+#: pg-act/ht/add-subpath.php:10
+msgid "This path already exists on this service. Use another one."
+msgstr ""
+
+#: pg-act/ht/del.php:11
+msgid "Access removed."
+msgstr ""
+
+#: pg-act/ns/caa.php:23 pg-act/ns/cname.php:14 pg-act/ns/dname.php:14
+#: pg-act/ns/ip.php:14 pg-act/ns/loc.php:70 pg-act/ns/mx.php:18
+#: pg-act/ns/ns.php:14 pg-act/ns/srv.php:26 pg-act/ns/sshfp.php:23
+#: pg-act/ns/tlsa.php:27 pg-act/ns/txt.php:15 pg-act/reg/ds.php:30
+#: pg-act/reg/glue.php:16 pg-act/reg/ns.php:13
+msgid "Modification done."
+msgstr ""
+
+#: pg-act/ns/edit.php:17
+#, php-format
+msgid "The zone is limited to %s characters."
+msgstr ""
+
+#: pg-act/ns/edit.php:21
+msgid "The following line does not match the expected format: "
+msgstr ""
+
+#: pg-act/ns/edit.php:23
+#, php-format
+msgid "The %s type is not allowed."
+msgstr ""
+
+#: pg-act/ns/edit.php:38
+msgid "Sent zone content is not correct (according to kzonecheck
)."
+msgstr ""
+
+#: pg-act/ns/zone-add.php:6
+msgid "This zone already exists on the service."
+msgstr ""
+
+#: pg-act/ns/zone-add.php:10
+msgid "Parent zone's name servers not found."
+msgstr ""
+
+#: pg-act/ns/zone-add.php:16 pg-act/reg/transfer.php:13
+msgid "NS authentication record not found."
+msgstr ""
+
+#: pg-act/ns/zone-add.php:52
+msgid "Zone created."
+msgstr ""
+
+#: pg-act/ns/zone-del.php:7
+msgid "Zone deleted."
+msgstr ""
+
+#: pg-act/reg/register.php:4
+msgid "This format of subdomain is not allowed."
+msgstr ""
+
+#: pg-act/reg/register.php:9
+msgid "This domain is already registered."
+msgstr ""
+
+#: pg-act/reg/register.php:12
+msgid "This domain is reserved."
+msgstr ""
+
+#: pg-act/reg/register.php:22
+msgid "Domain registered."
+msgstr ""
+
+#: pg-act/reg/transfer.php:9
+msgid "The current account already owns this domain."
+msgstr ""
+
+#: pg-act/reg/transfer.php:26
+msgid "The domain has been transferred to the current account ; the NS authentication record has been automatically deleted."
+msgstr ""
+
+#: pg-act/reg/unregister.php:7
+msgid "Domain unregistered."
+msgstr ""
+
+#: pg-view/auth/approval.php:2
+msgid "This form allows to use an approval key to validate your account. Approval keys are distributed by an administrator upon request."
+msgstr ""
+
+#: pg-view/auth/approval.php:6
+msgid "Approval key"
+msgstr ""
+
+#: pg-view/auth/approval.php:9
+msgid "Use for this account"
+msgstr ""
+
+#: pg-view/auth/index.php:5
+msgid "You are currently using a testing account."
+msgstr ""
+
+#: pg-view/auth/index.php:6
+msgid "You are currently using an approved account."
+msgstr ""
+
+#: pg-view/auth/index.php:7
+#, php-format
+msgid "It's internal ID is %s."
+msgstr ""
+
+#: pg-view/auth/index.php:9
+msgid "You are not logged in."
+msgstr ""
+
+#: pg-view/auth/index.php:13
+msgid "Account types"
+msgstr ""
+
+#: pg-view/auth/index.php:16
+msgid "Testing"
+msgstr ""
+
+#: pg-view/auth/index.php:18
+msgid "It's the default account type, with limited capabilities in order to avoid abuses:"
+msgstr ""
+
+#: pg-view/auth/index.php:20
+msgid "May be deleted anytime"
+msgstr ""
+
+#: pg-view/auth/index.php:21 pg-view/auth/index.php:29
+#, php-format
+msgid "%s of SFTP quota"
+msgstr ""
+
+#: pg-view/auth/index.php:21 pg-view/auth/index.php:29 pg-view/ht/index.php:51
+msgid "GiB"
+msgstr ""
+
+#: pg-view/auth/index.php:21 pg-view/auth/index.php:29 pg-view/ht/index.php:51
+msgid "MiB"
+msgstr ""
+
+#: pg-view/auth/index.php:22
+msgid "Let's Encrypt certificate from the staging environment (not trusted by clients)"
+msgstr ""
+
+#: pg-view/auth/index.php:25
+msgid "Approved"
+msgstr ""
+
+#: pg-view/auth/index.php:27
+msgid "It was originally a testing account, but has been approved by an administrator, and is suited for stable usecases:"
+msgstr ""
+
+#: pg-view/auth/index.php:30
+msgid "Stable Let's Encrypt certificates"
+msgstr ""
+
+#: pg-view/auth/login.php:1
+msgid "Need an accout?"
+msgstr ""
+
+#: pg-view/auth/login.php:1 pg-view/reg/register.php:10
+msgid "Register"
+msgstr ""
+
+#: pg-view/auth/login.php:4 pg-view/auth/register.php:4 pg-view/ht/index.php:94
+msgid "Username"
+msgstr ""
+
+#: pg-view/auth/login.php:8 pg-view/auth/register.php:9 pg-view/ht/index.php:98
+msgid "Password"
+msgstr ""
+
+#: pg-view/auth/password.php:2
+msgid "Current password"
+msgstr ""
+
+#: pg-view/auth/password.php:5
+msgid "New password"
+msgstr ""
+
+#: pg-view/auth/password.php:8
+msgid "Update password"
+msgstr ""
+
+#: pg-view/auth/register.php:1
+msgid "Already have an account?"
+msgstr ""
+
+#: pg-view/auth/register.php:10
+#, php-format
+msgid "Minimum %1$s characters, or %2$s characters if it contains lowercase, uppercase and digit."
+msgstr ""
+
+#: pg-view/auth/register.php:14
+msgid "Create an account"
+msgstr ""
+
+#: pg-view/auth/unregister.php:2
+msgid "This will delete every resource managed by the current account, including registered domains, hosted DNS records, websites files and cryptographic keys for Onion services and DNSSEC."
+msgstr ""
+
+#: pg-view/auth/unregister.php:7
+msgid "Delete the current account and everything related (required)"
+msgstr ""
+
+#: pg-view/auth/unregister.php:9 pg-view/ns/form.ns.php:4 pg-view/reg/ds.php:5
+#: pg-view/reg/glue.php:5 pg-view/reg/ns.php:5
+msgid "Delete"
+msgstr ""
+
+#: pg-view/auth/username.php:2
+msgid "New username"
+msgstr ""
+
+#: pg-view/auth/username.php:5
+msgid "Update username"
+msgstr ""
+
+#: pg-view/ht/add-dns.php:2
+msgid "A Let's Encrypt certificate will be obtained."
+msgstr ""
+
+#: pg-view/ht/add-dns.php:6
+msgid "The domain must have the following records when the form is being processed."
+msgstr ""
+
+#: pg-view/ht/add-dns.php:25 pg-view/ns/form.ns.php:8 pg-view/ns/print.php:32
+#: pg-view/ns/zone-add.php:6 pg-view/reg/ds.php:8 pg-view/reg/glue.php:8
+#: pg-view/reg/glue.php:15 pg-view/reg/ns.php:8 pg-view/reg/print.php:2
+#: pg-view/reg/print.php:16 pg-view/reg/unregister.php:6
+msgid "Domain"
+msgstr ""
+
+#: pg-view/ht/add-dns.php:27 pg-view/ht/add-onion.php:2
+#: pg-view/ht/add-subdomain.php:4 pg-view/ht/add-subpath.php:4
+msgid "Target directory"
+msgstr ""
+
+#: pg-view/ht/add-dns.php:36 pg-view/ht/add-onion.php:11
+#: pg-view/ht/add-subdomain.php:13 pg-view/ht/add-subpath.php:13
+msgid "Setup access"
+msgstr ""
+
+#: pg-view/ht/add-subdomain.php:2 pg-view/ns/form.ns.php:10
+#: pg-view/reg/glue.php:10 pg-view/reg/register.php:6
+msgid "Subdomain"
+msgstr ""
+
+#: pg-view/ht/add-subpath.php:2
+msgid "Path"
+msgstr ""
+
+#: pg-view/ht/del.php:2
+msgid "Access to delete"
+msgstr ""
+
+#: pg-view/ht/index.php:2
+msgid "This service allows you to send files on the server using SFTP, and to make them publicly available with HTTP."
+msgstr ""
+
+#: pg-view/ht/index.php:8
+msgid "Currently hosted sites"
+msgstr ""
+
+#: pg-view/ht/index.php:38
+msgid "Adding a site access"
+msgstr ""
+
+#: pg-view/ht/index.php:40
+#, php-format
+msgid "In order to be able to setup an HTTP site with this service, a subdirectory for this site must be created inside the SFTP space first. The name of this subdirectory can only contain %1$s, %2$s, %3$s, %4$s and %5$s."
+msgstr ""
+
+#: pg-view/ht/index.php:51
+#, php-format
+msgid "The SFTP space is limited to %s. Indicate the following values to your SFTP client to access it."
+msgstr ""
+
+#: pg-view/ht/index.php:55
+msgid "Authenticating the server"
+msgstr ""
+
+#: pg-view/ht/index.php:57
+msgid "An SSHFP record is available."
+msgstr ""
+
+#: pg-view/ht/index.php:60
+msgid "Plain public key"
+msgstr ""
+
+#: pg-view/ht/index.php:65
+msgid "Public key fingerprint"
+msgstr ""
+
+#: pg-view/ht/index.php:70
+msgid "ASCII art"
+msgstr ""
+
+#: pg-view/ht/index.php:77
+msgid "Connecting to the server"
+msgstr ""
+
+#: pg-view/ht/index.php:82
+msgid "Server"
+msgstr ""
+
+#: pg-view/ht/index.php:86 pg-view/ns/srv.php:16
+msgid "Port"
+msgstr ""
+
+#: pg-view/ht/index.php:90
+msgid "Directory"
+msgstr ""
+
+#: pg-view/ht/index.php:100
+msgid "The one of your account"
+msgstr ""
+
+#: pg-view/ht/index.php:111
+msgid "A content security policy (CSP) forbids Web browsers from loading JavaScript or third-party resources."
+msgstr ""
+
+#: pg-view/ht/index.php:114
+msgid "gzip compression"
+msgstr ""
+
+#: pg-view/ht/index.php:116
+msgid "Static gzip compression is supported: if the client supports it and the file is available, path.gz
is served instead of path
."
+msgstr ""
+
+#: pg-view/ht/index.php:119
+msgid "Index page"
+msgstr ""
+
+#: pg-view/ht/index.php:121
+msgid "When a request hits a directory, the first of the following files that exists inside this directory is served:"
+msgstr ""
+
+#: pg-view/ht/index.php:129
+msgid "404 error page"
+msgstr ""
+
+#: pg-view/ht/index.php:131
+msgid "When a request ends in a 404
error, the first of the following files that exists at the root of the site is served:"
+msgstr ""
+
+#: pg-view/ns/caa.php:3
+msgid "Flag"
+msgstr ""
+
+#: pg-view/ns/caa.php:7 pg-view/ns/print.php:56
+msgid "Tag"
+msgstr ""
+
+#: pg-view/ns/caa.php:11 pg-view/ns/form.ns.php:31 pg-view/ns/print.php:35
+#: pg-view/ns/tlsa.php:37 pg-view/reg/print.php:19
+msgid "Value"
+msgstr ""
+
+#: pg-view/ns/caa.php:15 pg-view/ns/cname.php:7 pg-view/ns/dname.php:7
+#: pg-view/ns/ip.php:5 pg-view/ns/loc.php:75 pg-view/ns/mx.php:11
+#: pg-view/ns/ns.php:7 pg-view/ns/srv.php:27 pg-view/ns/sshfp.php:29
+#: pg-view/ns/tlsa.php:43 pg-view/ns/txt.php:7 pg-view/reg/ds.php:56
+#: pg-view/reg/glue.php:29 pg-view/reg/ns.php:22
+msgid "Apply"
+msgstr ""
+
+#: pg-view/ns/cname.php:3
+msgid "Canonical name"
+msgstr ""
+
+#: pg-view/ns/dname.php:3
+msgid "Delegation name"
+msgstr ""
+
+#: pg-view/ns/edit.php:2
+msgid "Zone to be changed"
+msgstr ""
+
+#: pg-view/ns/edit.php:12 pg-view/ns/print.php:20 pg-view/reg/print.php:11
+msgid "Display"
+msgstr ""
+
+#: pg-view/ns/edit.php:23
+#, php-format
+msgid "New content of the %s zone"
+msgstr ""
+
+#: pg-view/ns/edit.php:27
+msgid "Replace"
+msgstr ""
+
+#: pg-view/ns/edit.php:38
+msgid "Default values"
+msgstr ""
+
+#: pg-view/ns/edit.php:40
+#, php-format
+msgid "If the TTL is omitted, it will default to %s seconds."
+msgstr ""
+
+#: pg-view/ns/edit.php:42
+msgid "Precising the class (IN
) is optional."
+msgstr ""
+
+#: pg-view/ns/edit.php:44
+msgid "Allowed values"
+msgstr ""
+
+#: pg-view/ns/edit.php:46
+#, php-format
+msgid "Submitted zone content is limited to %s characters."
+msgstr ""
+
+#: pg-view/ns/edit.php:48
+#, php-format
+msgid "TTLs must last between %1$s and %2$s seconds."
+msgstr ""
+
+#: pg-view/ns/edit.php:50
+msgid "The only types that can be defined are:"
+msgstr ""
+
+#: pg-view/ns/form.ns.php:1 pg-view/reg/ds.php:2 pg-view/reg/glue.php:2
+#: pg-view/reg/ns.php:2
+msgid "Action"
+msgstr ""
+
+#: pg-view/ns/form.ns.php:3 pg-view/ns/zone-add.php:8 pg-view/reg/ds.php:4
+#: pg-view/reg/glue.php:4 pg-view/reg/ns.php:4
+msgid "Add"
+msgstr ""
+
+#: pg-view/ns/form.ns.php:15 pg-view/ns/print.php:52 pg-view/ns/zone-del.php:2
+msgid "Zone"
+msgstr ""
+
+#: pg-view/ns/form.ns.php:29 pg-view/ns/print.php:33 pg-view/reg/print.php:17
+msgid "TTL"
+msgstr ""
+
+#: pg-view/ns/form.ns.php:45
+msgid "Unit"
+msgstr ""
+
+#: pg-view/ns/form.ns.php:48
+msgid "second"
+msgstr ""
+
+#: pg-view/ns/form.ns.php:49
+msgid "minute"
+msgstr ""
+
+#: pg-view/ns/form.ns.php:50
+msgid "hour"
+msgstr ""
+
+#: pg-view/ns/form.ns.php:51
+msgid "day"
+msgstr ""
+
+#: pg-view/ns/index.php:2
+msgid "This service allows to host and manage DNS records inside a DNS zone."
+msgstr ""
+
+#: pg-view/ns/index.php:8
+msgid "Currently hosted zones"
+msgstr ""
+
+#: pg-view/ns/index.php:26
+msgid "A zone hosted on this service is served by these name servers:"
+msgstr ""
+
+#: pg-view/ns/ip.php:3 pg-view/reg/glue.php:26
+msgid "IP address"
+msgstr ""
+
+#: pg-view/ns/loc.php:4
+msgid "Latitude"
+msgstr ""
+
+#: pg-view/ns/loc.php:6 pg-view/ns/loc.php:34
+msgid "Degrees"
+msgstr ""
+
+#: pg-view/ns/loc.php:11 pg-view/ns/loc.php:39
+msgid "Minutes"
+msgstr ""
+
+#: pg-view/ns/loc.php:16 pg-view/ns/loc.php:44
+msgid "Seconds"
+msgstr ""
+
+#: pg-view/ns/loc.php:21 pg-view/ns/loc.php:49
+msgid "Direction"
+msgstr ""
+
+#: pg-view/ns/loc.php:25
+msgid "North"
+msgstr ""
+
+#: pg-view/ns/loc.php:26
+msgid "South"
+msgstr ""
+
+#: pg-view/ns/loc.php:32
+msgid "Longitude"
+msgstr ""
+
+#: pg-view/ns/loc.php:53
+msgid "East"
+msgstr ""
+
+#: pg-view/ns/loc.php:54
+msgid "West"
+msgstr ""
+
+#: pg-view/ns/loc.php:59
+msgid "Altitude"
+msgstr ""
+
+#: pg-view/ns/loc.php:63
+msgid "Size"
+msgstr ""
+
+#: pg-view/ns/loc.php:67
+msgid "Horizontal precision"
+msgstr ""
+
+#: pg-view/ns/loc.php:71
+msgid "Vertical precision"
+msgstr ""
+
+#: pg-view/ns/mx.php:3 pg-view/ns/srv.php:4
+msgid "Priority"
+msgstr ""
+
+#: pg-view/ns/mx.php:7
+msgid "Host"
+msgstr ""
+
+#: pg-view/ns/ns.php:3 pg-view/reg/ns.php:18
+msgid "Name server"
+msgstr ""
+
+#: pg-view/ns/print.php:3
+msgid "Records table"
+msgstr ""
+
+#: pg-view/ns/print.php:6
+msgid "DS record"
+msgstr ""
+
+#: pg-view/ns/print.php:9
+msgid "Raw zonefile"
+msgstr ""
+
+#: pg-view/ns/print.php:11
+msgid "Selected zone"
+msgstr ""
+
+#: pg-view/ns/print.php:34 pg-view/reg/print.php:18
+msgid "Type"
+msgstr ""
+
+#: pg-view/ns/print.php:60 pg-view/ns/sshfp.php:4 pg-view/reg/ds.php:22
+msgid "Algorithm"
+msgstr ""
+
+#: pg-view/ns/print.php:64 pg-view/reg/ds.php:41
+msgid "Digest type"
+msgstr ""
+
+#: pg-view/ns/print.php:68
+msgid "Digest"
+msgstr ""
+
+#: pg-view/ns/srv.php:10
+msgid "Weight"
+msgstr ""
+
+#: pg-view/ns/srv.php:22
+msgid "Target"
+msgstr ""
+
+#: pg-view/ns/sshfp.php:15
+msgid "Hash type"
+msgstr ""
+
+#: pg-view/ns/sshfp.php:24
+msgid "Fingerprint"
+msgstr ""
+
+#: pg-view/ns/tlsa.php:4
+msgid "Use"
+msgstr ""
+
+#: pg-view/ns/tlsa.php:16
+msgid "Selector"
+msgstr ""
+
+#: pg-view/ns/tlsa.php:20
+msgid "the full certificate must match"
+msgstr ""
+
+#: pg-view/ns/tlsa.php:21
+msgid "the certificate public key must match"
+msgstr ""
+
+#: pg-view/ns/tlsa.php:26
+msgid "Match type"
+msgstr ""
+
+#: pg-view/ns/tlsa.php:30
+msgid "full certificate"
+msgstr ""
+
+#: pg-view/ns/txt.php:3
+msgid "Text"
+msgstr ""
+
+#: pg-view/ns/txt.php:5
+msgid "Some textâŠ"
+msgstr ""
+
+#: pg-view/ns/zone-add.php:2
+#, php-format
+msgid "To prove that you own this domain, it must have a NS record equal to %s when the form is being processed."
+msgstr ""
+
+#: pg-view/ns/zone-del.php:11
+msgid "Delete everything related to this zone"
+msgstr ""
+
+#: pg-view/reg/ds.php:18
+msgid "Key tag"
+msgstr ""
+
+#: pg-view/reg/ds.php:52
+msgid "Key"
+msgstr ""
+
+#: pg-view/reg/glue.php:27
+#, php-format
+msgid "%1$s or %2$s"
+msgstr ""
+
+#: pg-view/reg/index.php:2
+#, php-format
+msgid "This domain name registry allows to register domains ending with %1$s
, for instance domain%1$s
."
+msgstr ""
+
+#: pg-view/reg/index.php:7
+msgid "Currently registered domains"
+msgstr ""
+
+#: pg-view/reg/register.php:2
+msgid "Register a new domain on your account. It must consist of between 4 and 63 letters and digits."
+msgstr ""
+
+#: pg-view/reg/transfer.php:2
+#, php-format
+msgid "To prove that you are allowed to receive the domain by its current owner, the domain must have an NS record equal to %s when the form is being processed. The NS record will be automatically deleted once validated."
+msgstr ""
+
+#: pg-view/reg/transfer.php:6
+msgid "Subdomain that will be transferred to this account"
+msgstr ""
+
+#: pg-view/reg/transfer.php:10
+msgid "Receive the domain"
+msgstr ""
+
+#: pg-view/reg/unregister.php:2
+msgid "This will unregister the domain, making it registerable by anyone again."
+msgstr ""
+
+#: pg-view/reg/unregister.php:16
+msgid "Unregister"
+msgstr ""
diff --git a/pages.php b/pages.php
index 220aebe..c7ae861 100644
--- a/pages.php
+++ b/pages.php
@@ -2,176 +2,176 @@
define('PAGES', [
'index' => [
- 'title' => ' Niver',
+ 'title' => ' ' . CONF['common']['service_name'],
],
'auth' => [
'index' => [
- 'title' => ' Authentification',
- 'description' => 'GĂ©rer son compte',
+ 'title' => ' ' . _('Authentication'),
+ 'description' => _('Manage account'),
],
'login' => [
- 'title' => 'Se connecter',
- 'description' => 'DĂ©marrer une nouvelle session avec un compte existant',
+ 'title' => _('Log in'),
+ 'description' => _('Start a new navigation session with an existing account'),
'require-login' => false,
],
+ 'logout' => [
+ 'title' => _('Log out'),
+ 'description' => _('End the current session and delete cookies and cache'),
+ ],
'register' => [
- 'title' => 'Créer un compte',
- 'description' => 'Créer un nouveau compte Niver',
+ 'title' => _('Create account'),
+ 'description' => _('Create a new account, and log in with it'),
'require-login' => false,
'tokens_instance_cost' => 7200,
],
'unregister' => [
- 'title' => 'Supprimer son compte',
- 'description' => 'Effacer toutes les données de son compte',
+ 'title' => _('Delete account'),
+ 'description' => _('Erase all current account\'s data'),
],
'approval' => [
- 'title' => 'Approuver son compte',
- 'description' => 'Utiliser une clé d\'approbation pour passer à un compte approuvé.',
+ 'title' => _('Switch to an approved account'),
+ 'description' => _('Switch to an approved account using an approval key'),
],
'password' => [
- 'title' => 'Changer la clé de passe',
- 'description' => 'Changer la chaĂźne de caractĂšres permettant de vous authentifier.',
+ 'title' => _('Change password'),
+ 'description' => _('Change the character string used to authenticate yourself'),
],
'username' => [
- 'title' => 'Changer l\'identifiant',
- 'description' => 'Changer la chaĂźne de caractĂšres permettant d\'identifier votre compte.',
- ],
- 'logout' => [
- 'title' => 'DĂ©connexion',
- 'description' => 'Terminer la session et effacer ses cookies',
+ 'title' => _('Change username'),
+ 'description' => _('Change the name used to identify your account when logging in and displayed at the start of every page'),
],
],
'reg' => [
'index' => [
- 'title' => ' Registre ' . CONF['reg']['registry'] . '
',
- 'description' => 'Obtenir et gérer la délégation d\'un sous-domaine de ' . CONF['reg']['registry'] . '
',
+ 'title' => ' ' . sprintf(_('%s registry'), '' . CONF['reg']['registry'] . '
'),
+ 'description' => sprintf(_('Register and delegate a %s subdomain'), '' . CONF['reg']['registry'] . '
'),
],
'register' => [
- 'title' => 'Enregistrer un nouveau domaine',
- 'description' => 'Prendre possession d\'un sous-domaine de ' . CONF['reg']['registry'] . '
',
+ 'title' => _('Register domain'),
+ 'description' => sprintf(_('Get a %s subdomain'), '' . CONF['reg']['registry'] . '
'),
'tokens_account_cost' => 3600,
],
'unregister' => [
- 'title' => 'Effacer un domaine',
- 'description' => 'Effacer toutes les données d\'un domaine',
+ 'title' => _('Unregister domain'),
+ 'description' => _('Delete all data related to a domain and make it available to the public again'),
],
'print' => [
- 'title' => 'Afficher les données',
- 'description' => 'Afficher les enregistrements relatifs Ă un domaine',
+ 'title' => _('Display domain records'),
+ 'description' => _('Print every record related to a domain and served by the registry'),
],
'ns' => [
- 'title' => 'Enregistrements NS',
- 'description' => 'Indiquer les serveurs de noms de son sous-domaine de ' . CONF['reg']['registry'] . '
',
+ 'title' => sprintf(_('%s records'), 'NS'),
+ 'description' => sprintf(_('Indicate the name servers of a %s subdomain'), '' . CONF['reg']['registry'] . '
'),
],
'ds' => [
- 'title' => 'Enregistrements DS',
- 'description' => 'Déléguer la confiance DNSSEC',
+ 'title' => sprintf(_('%s records'), 'DS'),
+ 'description' => _('Delegate DNSSEC trust'),
],
'transfer' => [
- 'title' => 'Recevoir un transfert de domaine',
- 'description' => 'Transférer un domaine vers ce compte',
+ 'title' => _('Receive a domain transfer'),
+ 'description' => _('Transfer a domain owned by another account to the current account'),
],
'glue' => [
- 'title' => 'Glue Records',
- 'description' => 'Avancé : Indiquer l\'IP d\'un serveur de noms dont l\'adresse dépend de la zone qu\'il sert',
+ 'title' => _('Glue records'),
+ 'description' => _('Advanced: store the IP address of a name server whose domain is inside the domain it serves'),
],
],
'ns' => [
'index' => [
- 'title' => ' Serveurs de noms',
- 'description' => 'Héberger et gérer les données liées à un domaine',
+ 'title' => ' ' . _('Name servers'),
+ 'description' => _('Host and manage domain\'s records'),
],
'zone-add' => [
- 'title' => 'Ajouter une zone',
- 'description' => 'Pour qu\'elle soit gérée par le serveur de noms de Niver',
+ 'title' => _('Add zone'),
+ 'description' => sprintf(_('The zone will be managed by %s name servers'), CONF['common']['service_name']),
'tokens_account_cost' => 1800,
],
'zone-del' => [
- 'title' => 'Effacer une zone',
- 'description' => 'Effacer toutes les données d\'une zone',
+ 'title' => _('Delete zone'),
+ 'description' => _('Erase all zone data'),
],
'print' => [
- 'title' => 'Afficher les données',
- 'description' => 'Afficher le contenu de la zone',
+ 'title' => _('Display zone'),
+ 'description' => _('Print zonefile content'),
],
'edit' => [
- 'title' => 'Modifier une zone',
- 'description' => 'Ăditer un fichier de zone',
+ 'title' => _('Edit zone'),
+ 'description' => _('Change zonefile content'),
'tokens_account_cost' => 300,
],
'ip' => [
- 'title' => 'Enregistrements A et AAAA',
- 'description' => 'Indiquer l\'adresse IP d\'un domaine',
+ 'title' => _('AAAA and A records'),
+ 'description' => _('Store domain\'s IP address'),
],
'ns' => [
- 'title' => 'Enregistrement NS',
- 'description' => 'Indiquer le serveur de noms d\'une zone',
+ 'title' => sprintf(_('%s records'), 'NS'),
+ 'description' => _('Store zone\'s name server'),
],
'txt' => [
- 'title' => 'Enregistrement TXT',
- 'description' => 'Associer du texte Ă un domaine',
+ 'title' => sprintf(_('%s records'), 'TXT'),
+ 'description' => _('Associate text to domain'),
],
'caa' => [
- 'title' => 'Enregistrement CAA',
- 'description' => 'Limiter les autorités de certification autorisées à émettre des certificats',
+ 'title' => sprintf(_('%s records'), 'CAA'),
+ 'description' => _('Limit the certificate authorities allowed to certify the domain'),
],
'srv' => [
- 'title' => 'Enregistrement SRV',
- 'description' => 'Indiquer l\'adresse d\'un service spécifique',
+ 'title' => sprintf(_('%s records'), 'SRV'),
+ 'description' => _('Store the location of a domain\'s service'),
],
'mx' => [
- 'title' => 'Enregistrement MX',
- 'description' => 'Indiquer l\'adresse du serveur recevant les courriels',
+ 'title' => sprintf(_('%s records'), 'MX'),
+ 'description' => _('Store the email server\'s address'),
],
'sshfp' => [
- 'title' => 'Enregistrement SSHFP',
- 'description' => 'Indiquer les empreintes des clés SSH',
+ 'title' => sprintf(_('%s records'), 'SSHFP'),
+ 'description' => _('Store SSH public keys fingerprints'),
],
'tlsa' => [
- 'title' => 'Enregistrement TLSA',
- 'description' => 'Mettre en place DANE en indiquant l\'empreinte d\'un certificat TLS',
+ 'title' => sprintf(_('%s records'), 'TLSA'),
+ 'description' => _('Setup DANE by publishing the TLS certificate fingerprint'),
],
'cname' => [
- 'title' => 'Enregistrement CNAME',
- 'description' => 'DĂ©finir un domaine comme Ă©tant l\'alias d\'un autre',
+ 'title' => sprintf(_('%s records'), 'CNAME'),
+ 'description' => _('Define a domain as an alias of another'),
],
'dname' => [
- 'title' => 'Enregistrement DNAME',
- 'description' => 'DĂ©finir les sous-domaines d\'un domaine comme Ă©tant les alias des sous-domaines d\'un autre domaine',
+ 'title' => sprintf(_('%s records'), 'DNAME'),
+ 'description' => _('Define all subdomains of a domain as aliases of subdomains of another domain'),
],
'loc' => [
- 'title' => 'Enregistrement LOC',
- 'description' => 'Indiquer des coordonnées géographiques',
+ 'title' => sprintf(_('%s records'), 'LOC'),
+ 'description' => _('Store geographic coordinates'),
],
],
'ht' => [
'index' => [
- 'title' => ' Hypertexte',
- 'description' => 'Mettre en ligne son site statique sur un espace SFTP, et le faire répondre en HTTP par DNS ou Tor',
+ 'title' => ' ' . _('Web'),
+ 'description' => _('Upload a static website into an SFTP space'),
],
'add-subpath' => [
- 'title' => 'AccĂšs par sous-chemin ' . CONF['ht']['subpath_domain'] . '/
',
- 'description' => 'Son URL ressemblera Ă https://' . CONF['ht']['subpath_domain'] . '/monsite/
',
+ 'title' => sprintf(_('%s subpath access'), '' . CONF['ht']['subpath_domain'] . '/
'),
+ 'description' => sprintf(_('Its URL will look like %s'), 'https://' . CONF['ht']['subpath_domain'] . '/' . _('mysite') . '/
'),
'tokens_account_cost' => 900,
],
'add-subdomain' => [
- 'title' => 'AccĂšs par sous-domaine de .' . CONF['ht']['subdomain_domain'] . '
',
- 'description' => 'Son URL ressemblera Ă https://monsite.' . CONF['ht']['subpath_domain'] . '/
',
+ 'title' => sprintf(_('%s subdomain access'), '.' . CONF['ht']['subdomain_domain'] . '
'),
+ 'description' => sprintf(_('Its URL will look like %s'), 'https://' . _('mysite') . '.' . CONF['ht']['subpath_domain'] . '/
'),
'tokens_account_cost' => 1800,
],
'add-dns' => [
- 'title' => 'AccÚs par domaine dédié et certificat Let\'s Encrypt',
- 'description' => 'Son URL ressemblera Ă https://monsite.example/
',
+ 'title' => _('Dedicated domain with Let\'s Encrypt certificate access'),
+ 'description' => sprintf(_('Its URL will look like %s'), 'https://' . _('mysite') . '.' . PLACEHOLDER_DOMAIN . '/
'),
'tokens_account_cost' => 3600,
],
'add-onion' => [
- 'title' => 'AccĂšs par service Onion',
- 'description' => 'Son URL ressemblera Ă http://nrdselxjgryq5fwek2xh3pxg4b26z26eyzlbs4y5lownk465jhaamayd.onion/
, qui ne fonctionnera que par le réseau Tor',
+ 'title' => _('Onion service access'),
+ 'description' => sprintf(_('Its URL will look like %s, and work only through the Tor network'), 'http://nrdselxjgryq5fwek2xh3pxg4b26z26eyzlbs4y5lownk465jhaamayd.onion/
'),
'tokens_account_cost' => 1800,
],
'del' => [
- 'title' => 'Retirer un accĂšs',
- 'description' => 'Retirer un accÚs HTTP déjà existant d\'un sous-dossier de l\'espace SFTP',
+ 'title' => _('Delete access'),
+ 'description' => _('Delete an existing HTTP access from a subdirectory of the SFTP space'),
],
],
]);
diff --git a/pg-act/auth/approval.php b/pg-act/auth/approval.php
index 96a91c0..45bef63 100644
--- a/pg-act/auth/approval.php
+++ b/pg-act/auth/approval.php
@@ -1,10 +1,10 @@
$_POST['key']], 'key')[0]) !== true)
- output(403, 'Approbation impossible : cette clé d\'approbation n\'est pas disponible. Elle a été mal saisie, a expiré ou a déjà été utilisée pour un autre compte.');
+ output(403, _('This approval key is not available. It has been mistyped, used for another account, or has expired.');
query('delete', 'approval-keys', ['key' => $_POST['key']]);
@@ -15,4 +15,4 @@ $_SESSION['type'] = 'approved';
insert('approval-keys', ['key' => bin2hex(random_bytes(16))]);
-output(200, 'Compte approuvé.');
+output(200, _('Account approved.'));
diff --git a/pg-act/auth/login.php b/pg-act/auth/login.php
index a6ae39e..5168994 100644
--- a/pg-act/auth/login.php
+++ b/pg-act/auth/login.php
@@ -7,12 +7,12 @@ checkUsernameFormat($_POST['username']);
$username = hashUsername($_POST['username']);
if (usernameExists($username) !== true)
- output(403, 'Connexion impossible : ce compte n\'existe pas.');
+ output(403, _('This account does not exist.'));
$id = query('select', 'users', ['username' => $username], 'id')[0];
if (checkPassword($id, $_POST['password']) !== true)
- output(403, 'Connexion impossible : clé de passe invalide.');
+ output(403, _('Wrong password.'));
if (outdatedPasswordHash($id))
changePassword($id, $_POST['password']);
diff --git a/pg-act/auth/password.php b/pg-act/auth/password.php
index 781a882..413bcab 100644
--- a/pg-act/auth/password.php
+++ b/pg-act/auth/password.php
@@ -3,8 +3,8 @@
checkPasswordFormat($_POST['new-password']);
if (checkPassword($_SESSION['id'], $_POST['current-password']) !== true)
- output(403, 'Changement impossible : clé de passe invalide.');
+ output(403, _('Wrong current password.'));
changePassword($_SESSION['id'], $_POST['new-password']);
-output(200, 'Clé de passe changée.');
+output(200, _('Password updated.'));
diff --git a/pg-act/auth/register.php b/pg-act/auth/register.php
index 1ac3c27..1c13ac5 100644
--- a/pg-act/auth/register.php
+++ b/pg-act/auth/register.php
@@ -7,7 +7,7 @@ checkUsernameFormat($_POST['username']);
$username = hashUsername($_POST['username']);
if (usernameExists($username) !== false)
- output(403, 'Ce nom de compte est déjà utilisé.');
+ output(403, _('This username is already taken.'));
rateLimit();
diff --git a/pg-act/auth/unregister.php b/pg-act/auth/unregister.php
index 185dbf7..1f58e20 100644
--- a/pg-act/auth/unregister.php
+++ b/pg-act/auth/unregister.php
@@ -1,7 +1,7 @@
$_SESSION['id']], 'domain') as $domain)
regDeleteDomain($domain);
@@ -26,4 +26,4 @@ query('delete', 'users', ['id' => $_SESSION['id']]);
logout();
-output(200, 'Compte supprimé.');
+output(200, _('Account deleted.'));
diff --git a/pg-act/auth/username.php b/pg-act/auth/username.php
index 1a86e4c..5716fac 100644
--- a/pg-act/auth/username.php
+++ b/pg-act/auth/username.php
@@ -5,7 +5,7 @@ checkUsernameFormat($_POST['new-username']);
$username = hashUsername($_POST['new-username']);
if (usernameExists($username) !== false)
- output(403, 'Ce nom de compte est déjà utilisé.');
+ output(403, _('This username is already taken.'));
DB->prepare('UPDATE users SET username = :username WHERE id = :id')
->execute([':username' => $username, ':id' => $_SESSION['id']]);
@@ -14,4 +14,4 @@ setupDisplayUsername($_POST['new-username']);
redir('auth/username');
-output(200, 'Identifiant changé.');
+output(200, _('Username updated.'));
diff --git a/pg-act/ht/add-dns.php b/pg-act/ht/add-dns.php
index 8ceebee..bd54158 100644
--- a/pg-act/ht/add-dns.php
+++ b/pg-act/ht/add-dns.php
@@ -6,25 +6,25 @@ if (dirsStatuses('dns')[$_POST['dir']] !== false)
output(403, 'Wrong value for dir
.');
if (query('select', 'sites', ['domain' => $_POST['domain']], 'domain') !== [])
- output(403, 'Ce domaine existe déjà sur ce service.');
+ output(403, _('This domain already exists on this service. Use another one.');
$remoteAaaaRecords = dns_get_record($_POST['domain'], DNS_AAAA);
if (is_array($remoteAaaaRecords) !== true)
- output(500, 'Erreur lors de la récupération de l\'enregistrement AAAA.');
+ output(500, sprintf(_('Can\'t retrieve the %s record.'), 'AAAA');
if (equalArrays([CONF['ht']['ipv6_address']], array_column($remoteAaaaRecords, 'ipv6')) !== true)
- output(403, 'Ce domaine doit avoir pour unique enregistrement AAAA ' . CONF['ht']['ipv6_address'] . '
.');
+ output(403, sprintf(_('This domain must have %2$s as its only %1$s record.'), 'AAAA', '' . CONF['ht']['ipv6_address'] . '
'));
$remoteARecords = dns_get_record($_POST['domain'], DNS_A);
if (is_array($remoteARecords) !== true)
- output(500, 'Erreur lors de la récupération de l\'enregistrement A.');
+ output(500, sprintf(_('Can\'t retrieve the %s record.'), 'A');
if (equalArrays([CONF['ht']['ipv4_address']], array_column($remoteARecords, 'ip')) !== true)
- output(403, 'Ce domaine doit avoir pour unique enregistrement A ' . CONF['ht']['ipv4_address'] . '
.');
+ output(403, sprintf(_('This domain must have %2$s as its only %1$s record.'), 'A', '' . CONF['ht']['ipv4_address'] . '
'));
$remoteTXTRecords = dns_get_record($_POST['domain'], DNS_TXT);
if (is_array($remoteTXTRecords) !== true)
- output(500, 'Erreur lors de la récupération de l\'enregistrement TXT.');
+ output(500, sprintf(_('Can\'t retrieve the %s record.'), 'TXT');
if (preg_match('/^' . preg_quote(SERVER_NAME, '/') . '_domain-verification=([0-9a-f]{8})-([0-9a-f]{32})$/Dm', implode(LF, array_column($remoteTXTRecords, 'txt')), $matches) !== 1)
- output(403, 'Aucun enregistrement TXT au format correct trouvé.');
+ output(403, _('No TXT record with the expected format has been found.'));
checkAuthToken($matches[1], $matches[2]);
@@ -56,4 +56,4 @@ exec(CONF['ht']['sudo_path'] . ' ' . CONF['ht']['nginx_reload_cmd'], result_code
if ($code !== 0)
output(500, 'Failed to reload Nginx.');
-output(200, 'AccÚs HTTP par domaine dédié ajouté sur ce dossier !');
+output(200, sprintf(_('%s added on this directory.'), PAGE_METADATA['title']);
diff --git a/pg-act/ht/add-onion.php b/pg-act/ht/add-onion.php
index eb078b1..89c369b 100644
--- a/pg-act/ht/add-onion.php
+++ b/pg-act/ht/add-onion.php
@@ -44,4 +44,4 @@ if ($code !== 0)
output(500, 'Failed to reload Nginx.');
// Tell the user their site address
-output(200, 'L\'adresse de votre service Onion HTTP est : http://' . $onion . '/
');
+output(200, sprintf(_('%s added on this directory.'), PAGE_METADATA['title'] . sprintf(_('Its address is: %s'), 'http://' . $onion . '/
');
diff --git a/pg-act/ht/add-subdomain.php b/pg-act/ht/add-subdomain.php
index 2d333b9..30d35ef 100644
--- a/pg-act/ht/add-subdomain.php
+++ b/pg-act/ht/add-subdomain.php
@@ -4,10 +4,10 @@ if (dirsStatuses('subdomain')[$_POST['dir']] !== false)
output(403, 'Wrong value for dir
.');
if (preg_match('/^[a-z0-9]{1,32}$/D', $_POST['subdomain']) !== 1)
- output(403, 'Label de domaine invalide.');
+ output(403, _('Invalid domain label.'));
if (query('select', 'sites', ['address' => $_POST['subdomain'], 'type' => 'subdomain']) !== [])
- output(403, 'Ce domaine est déjà utilisé sur ce service. Utilisez-en un autre.');
+ output(403, _('This domain already exists on this service. Use another one.'));
rateLimit();
@@ -16,4 +16,4 @@ addSite($_SESSION['id'], $_POST['dir'], $_POST['subdomain'], 'subdomain');
if (symlink(CONF['ht']['ht_path'] . '/' . $_SESSION['id'] . '/' . $_POST['dir'], CONF['ht']['subdomain_path'] . '/' . $_POST['subdomain']) !== true)
output(500, 'Unable to create symlink.');
-output(200, 'AccÚs HTTP par sous-chemin ajouté sur ce dossier !');
+output(200, sprintf(_('%s added on this directory.'), PAGE_METADATA['title']));
diff --git a/pg-act/ht/add-subpath.php b/pg-act/ht/add-subpath.php
index 3f300b7..e4b129f 100644
--- a/pg-act/ht/add-subpath.php
+++ b/pg-act/ht/add-subpath.php
@@ -4,10 +4,10 @@ if (dirsStatuses('subpath')[$_POST['dir']] !== false)
output(403, 'Wrong value for dir
.');
if (preg_match('/^[a-z0-9]{1,32}$/D', $_POST['path']) !== 1)
- output(403, 'Chemin invalide.');
+ output(403, _('Invalid path.'));
if (query('select', 'sites', ['address' => $_POST['path'], 'type' => 'subpath']) !== [])
- output(403, 'Ce chemin est déjà utilisé sur ce service. Utilisez-en un autre.');
+ output(403, _('This path already exists on this service. Use another one.'));
rateLimit();
@@ -16,4 +16,4 @@ addSite($_SESSION['id'], $_POST['dir'], $_POST['path'], 'subpath');
if (symlink(CONF['ht']['ht_path'] . '/' . $_SESSION['id'] . '/' . $_POST['dir'], CONF['ht']['subpath_path'] . '/' . $_POST['path']) !== true)
output(500, 'Unable to create symlink.');
-output(200, 'AccÚs HTTP par sous-chemin ajouté sur ce dossier !');
+output(200, sprintf(_('%s added on this directory.'), PAGE_METADATA['title']));
diff --git a/pg-act/ht/del.php b/pg-act/ht/del.php
index b5fe7b4..611bbab 100644
--- a/pg-act/ht/del.php
+++ b/pg-act/ht/del.php
@@ -8,4 +8,4 @@ if (isset(query('select', 'sites', ['username' => $_SESSION['id'], 'address' =>
htDeleteSite($site['address'], $site['type']);
-output(200, 'AccÚs retiré.');
+output(200, _('Access removed.'));
diff --git a/pg-act/ns/caa.php b/pg-act/ns/caa.php
index 92308bc..83e20ce 100644
--- a/pg-act/ns/caa.php
+++ b/pg-act/ns/caa.php
@@ -20,4 +20,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['value']
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/cname.php b/pg-act/ns/cname.php
index b324839..3daeadf 100644
--- a/pg-act/ns/cname.php
+++ b/pg-act/ns/cname.php
@@ -11,4 +11,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['cname']
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/dname.php b/pg-act/ns/dname.php
index fc98ce6..ff2e5a7 100644
--- a/pg-act/ns/dname.php
+++ b/pg-act/ns/dname.php
@@ -11,4 +11,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['dname']
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/edit.php b/pg-act/ns/edit.php
index 5dc6b9b..80bedfe 100644
--- a/pg-act/ns/edit.php
+++ b/pg-act/ns/edit.php
@@ -14,17 +14,17 @@ if (isset($_POST['zone-content'])) { // Update zone
// Generate new zone content
$new_zone_content = $matches['soa'] . LF;
if (strlen($_POST['zone-content']) > ZONE_MAX_CHARACTERS)
- output(403, 'La zone n\'est pas autorisée à dépasser ' . ZONE_MAX_CHARACTERS . ' caractÚres.');
+ output(403, sprintf(_('The zone is limited to %s characters.'), ZONE_MAX_CHARACTERS));
foreach (explode("\r\n", $_POST['zone-content']) as $line) {
if ($line === '') continue;
if (preg_match('/^(?' . htmlspecialchars($line) . '
');
if (in_array($matches['type'], ALLOWED_TYPES, true) !== true)
- output(403, 'Le type ' . $matches['type'] . '
n\'est pas autorisé.');
+ output(403, sprintf(_('The %s type is not allowed.'), '' . $matches['type'] . '
'));
if ($matches['ttl'] !== '' AND $matches['ttl'] < MIN_TTL)
- output(403, 'Les TTLs inférieurs à ' . MIN_TTL . ' secondes ne sont pas autorisés.');
+ output(403, sprintf(_('TTLs shorter than %s seconds are forbidden.'), MIN_TTL));
if ($matches['ttl'] !== '' AND $matches['ttl'] > MAX_TTL)
- output(403, 'Les TTLs supérieurs à ' . MAX_TTL . ' secondes ne sont pas autorisés.');
+ output(403, sprintf(_('TTLs longer than %s seconds are forbidden.'), MAX_TTL));
$new_zone_content .= $matches['domain'] . ' ' . (($matches['ttl'] === '') ? DEFAULT_TTL : $matches['ttl']) . ' ' . $matches['type'] . ' ' . $matches['value'] . LF;
}
@@ -35,7 +35,7 @@ if (isset($_POST['zone-content'])) { // Update zone
fwrite($pipes[0], $new_zone_content);
fclose($pipes[0]);
if (proc_close($process) !== 0)
- output(403, 'Le contenu de zone envoyé n\'est pas valide (selon kzonecheck
).');
+ output(403, _('Sent zone content is not correct (according to kzonecheck
).'));
ratelimit();
diff --git a/pg-act/ns/ip.php b/pg-act/ns/ip.php
index 0c466c4..5fa0da1 100644
--- a/pg-act/ns/ip.php
+++ b/pg-act/ns/ip.php
@@ -11,4 +11,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['ip']
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/loc.php b/pg-act/ns/loc.php
index 7619cbe..23ed875 100644
--- a/pg-act/ns/loc.php
+++ b/pg-act/ns/loc.php
@@ -67,4 +67,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['vp'] . 'm',
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/mx.php b/pg-act/ns/mx.php
index 5e194e3..370151f 100644
--- a/pg-act/ns/mx.php
+++ b/pg-act/ns/mx.php
@@ -15,4 +15,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['host']
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/ns.php b/pg-act/ns/ns.php
index dc1c78b..8dcf92c 100644
--- a/pg-act/ns/ns.php
+++ b/pg-act/ns/ns.php
@@ -11,4 +11,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['ns']
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/srv.php b/pg-act/ns/srv.php
index 33382ea..02f329c 100644
--- a/pg-act/ns/srv.php
+++ b/pg-act/ns/srv.php
@@ -23,4 +23,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['target']
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/sshfp.php b/pg-act/ns/sshfp.php
index cab87f1..b131cc3 100644
--- a/pg-act/ns/sshfp.php
+++ b/pg-act/ns/sshfp.php
@@ -20,4 +20,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['fp']
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/tlsa.php b/pg-act/ns/tlsa.php
index 3db5e06..c9ded9f 100644
--- a/pg-act/ns/tlsa.php
+++ b/pg-act/ns/tlsa.php
@@ -24,4 +24,4 @@ knotcZoneExec($_POST['zone'], [
$_POST['content']
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/txt.php b/pg-act/ns/txt.php
index c35ea8a..ebabc5c 100644
--- a/pg-act/ns/txt.php
+++ b/pg-act/ns/txt.php
@@ -12,4 +12,4 @@ knotcZoneExec($_POST['zone'], [
'"' . $_POST['txt'] . '"'
]);
-output(200, 'Enregistrement ajouté/retiré.');
+output(200, _('Modification done.'));
diff --git a/pg-act/ns/zone-add.php b/pg-act/ns/zone-add.php
index 377d9ce..47de4ef 100644
--- a/pg-act/ns/zone-add.php
+++ b/pg-act/ns/zone-add.php
@@ -3,17 +3,17 @@
$_POST['domain'] = formatAbsoluteDomain($_POST['domain']);
if (query('select', 'zones', ['zone' => $_POST['domain']], 'zone') !== [])
- output(403, 'Cette zone existe déjà sur ce service.');
+ output(403, _('This zone already exists on the service.'));
exec(CONF['dns']['kdig_path'] . ' ' . ltrim(strstr($_POST['domain'], '.'), '.') . ' NS +short', $parentAuthoritatives);
if ($parentAuthoritatives === [])
- output(403, 'Serveurs de noms de la zone parente introuvables');
+ output(403, _('Parent zone\'s name servers not found.'));
foreach ($parentAuthoritatives as $parentAuthoritative)
checkAbsoluteDomainFormat($parentAuthoritative);
exec(CONF['dns']['kdig_path'] . ' ' . $_POST['domain'] . ' NS @' . $parentAuthoritatives[0] . ' +noidn', $results);
if (preg_match('/^' . preg_quote($_POST['domain'], '/') . '[\t ]+[0-9]{1,8}[\t ]+IN[\t ]+NS[\t ]+(?- Ce formulaire permet d'utiliser une clé d'approbation pour valider son compte. Une clé d'approbation est distribuée par l'administrataire sur demande. + = _('This form allows to use an approval key to validate your account. Approval keys are distributed by an administrator upon request.') ?>
diff --git a/pg-view/auth/index.php b/pg-view/auth/index.php index f7d9e0e..7d0f8a9 100644 --- a/pg-view/auth/index.php +++ b/pg-view/auth/index.php @@ -1,30 +1,33 @@
-
- Vous utilisez actuellement un compte = (($_SESSION['type'] === 'approved') ? 'approuvé' : 'de test') ?>. Son identifiant interne est = $_SESSION['id'] ?>
.
-
- Vous n'utilisez actuellement aucun compte.
-
+ _('You are currently using a testing account.'),
+ 'approved' => _('You are currently using an approved account.'),
+ } . ' ' . sprintf(_('It\'s internal ID is %s.'), '' . $_SESSION['id'] . '
');
+} else {
+ echo _('You are not logged in.');
+} ?>
Pas de compte ? En créer un
+= _('Need an accout?') ?> = _('Register') ?>
diff --git a/pg-view/auth/password.php b/pg-view/auth/password.php index 9f555e6..0836f99 100644 --- a/pg-view/auth/password.php +++ b/pg-view/auth/password.php @@ -1,13 +1,9 @@ -- Vous pouvez ici changer la clé de passe permettant d'accéder à votre compte Niver. -
- diff --git a/pg-view/auth/register.php b/pg-view/auth/register.php index 3184900..dc38e9a 100644 --- a/pg-view/auth/register.php +++ b/pg-view/auth/register.php @@ -1,17 +1,15 @@ -DĂ©jĂ un compte ? Se connecter
+= _('Already have an account?') ?> = _('Log in') ?>
diff --git a/pg-view/auth/unregister.php b/pg-view/auth/unregister.php index 7a97f86..60f502b 100644 --- a/pg-view/auth/unregister.php +++ b/pg-view/auth/unregister.php @@ -1,17 +1,10 @@- Cette action supprimera toutes les données appartenant à ce compte, y compris : + = _('This will delete every resource managed by the current account, including registered domains, hosted DNS records, websites files and cryptographic keys for Onion services and DNSSEC.') ?>
-- Vous pouvez ici changer l'identifiant permettant d'accéder à votre compte Niver. -
- diff --git a/pg-view/ht/add-dns.php b/pg-view/ht/add-dns.php index 067a2a9..e40230d 100644 --- a/pg-view/ht/add-dns.php +++ b/pg-view/ht/add-dns.php @@ -1,9 +1,9 @@- Ajouter sur un dossier de site un accÚs = linkToDocs('http', 'HTTP') ?> par = linkToDocs('dns', 'DNS') ?> et = linkToDocs('tls', 'TLS') ?> = linkToDocs('ca', 'authentifié par Let\'s Encrypt') ?>. + = _('A Let\'s Encrypt certificate will be obtained.') ?>
- Le domaine doit posséder les enregistrements ci-aprÚs lors du traitement de ce formulaire. + = _('The domain must have the following records when the form is being processed.') ?>
- Ajouter un accĂšs par = linkToDocs('tor', 'service Onion') ?> sur un dossier. -
- diff --git a/pg-view/ht/add-subdomain.php b/pg-view/ht/add-subdomain.php index a8235e1..7606ae1 100644 --- a/pg-view/ht/add-subdomain.php +++ b/pg-view/ht/add-subdomain.php @@ -1,11 +1,7 @@ -
- Ajouter sur un dossier de site un accĂšs = linkToDocs('http', 'HTTP') ?> par sous-domaine de = CONF['ht']['subdomain_domain'] ?>
.
-
- Ajouter sur un dossier de site un accĂšs = linkToDocs('http', 'HTTP') ?> par sous-chemin de = CONF['ht']['subpath_domain'] ?>/
.
-
- Retirer un accĂšs HTTP d'un dossier -
- diff --git a/pg-view/ht/index.php b/pg-view/ht/index.php index beb07a9..841e69c 100644 --- a/pg-view/ht/index.php +++ b/pg-view/ht/index.php @@ -1,17 +1,16 @@- Ce service permet d'envoyer des fichiers sur le serveur par = linkToDocs('sftp', 'SFTP') ?> afin de les rendre accessibles par = linkToDocs('http', 'HTTP') ?>. + = _('This service allows you to send files on the server using SFTP, and to make them publicly available with HTTP.') ?>
Ce compte n\'héberge aucun site sur cette instance.
' . LF; + echo '
â
' . LF; else { echo '
Pour pouvoir y ajouter un accĂšs par ce service, un site doit auparavent ĂȘtre tĂ©lĂ©versĂ© dans un sous-dossier direct de l'espace SFTP. Le nom de ce sous-dossier ne peut contenir que a
-z
, A
-Z
, 0
-9
, _
et -
.
= sprintf(_('In order to be able to setup an HTTP site with this service, a subdirectory for this site must be created inside the SFTP space first. The name of this subdirectory can only contain %1$s, %2$s, %3$s, %4$s and %5$s.'), 'a
-z
', 'A
-Z
', '0
-9
', '_
', '-
') ?>
- Vous avez accÚs à un espace SFTP, limité à > 30) >= 1) ? $quotaSize >> 30 . ' ' . linkToDocs('units', 'Gio') : $quotaSize >> 20 . ' ' . linkToDocs('units', 'Mio') -?>. Indiquez les données ci-dessous à votre client SFTP pour y accéder. + = sprintf(_('The SFTP space is limited to %s. Indicate the following values to your SFTP client to access it.'), (($quota >> 30) >= 1) ? $quota >> 30 . ' ' . _('GiB') : $quota >> 20 . ' ' . _('MiB')) ?>
Un enregistrement SSHFP est disponible.
+= _('An SSHFP record is available.') ?>
= file_get_contents(CONF['ht']['sftp_pub']) ?>
= file_get_contents(CONF['ht']['sftp_fp']) ?>
= file_get_contents(CONF['ht']['sftp_asciiart']) ?>
= CONF['ht']['sftp_domain'] ?>
= CONF['ht']['public_sftp_port'] ?>
/
= isset($_SESSION['display-username']) ? $_SESSION['display-username'] : '<username>'; ?>
- Une politique de sécurité du contenu (CSP) interdit l'intégration de JavaScript ou de ressources depuis des sites distants. -
-
- La compression gzip statique est supportée, si le client le supporte et que le fichier est disponible, chemin.gz
est servi au lieu de chemin
.
+ = _('A content security policy (CSP) forbids Web browsers from loading JavaScript or third-party resources.') ?>
- Lors d'une requĂȘte sur un dossier, le premier des fichiers suivants qui existe dans ce dossier est rĂ©pondu :
+ = _('Static gzip compression is supported: if the client supports it and the file is available, path.gz
is served instead of path
.') ?>
+
+ = _('When a request hits a directory, the first of the following files that exists inside this directory is served:') ?>
index.html
index.gmi
- Lors d'une requĂȘte aboutissant Ă une erreur 404
, le premier des fichiers suivants qui existe à la racine du site est répondu :
+ = _('When a request ends in a 404
error, the first of the following files that exists at the root of the site is served:') ?>
404.html
- = linkToDocs('record-caa', 'Documentation du type d\'enregistrement CAA') ?> -
-- = linkToDocs('record-cname', 'Documentation du type d\'enregistrement CNAME') ?> -
- diff --git a/pg-view/ns/dname.php b/pg-view/ns/dname.php index 7ee0e58..5a5df27 100644 --- a/pg-view/ns/dname.php +++ b/pg-view/ns/dname.php @@ -1,13 +1,8 @@ -- = linkToDocs('record-dname', 'Documentation du type d\'enregistrement DNAME') ?> -
- diff --git a/pg-view/ns/edit.php b/pg-view/ns/edit.php index caaa44b..bb14b63 100644 --- a/pg-view/ns/edit.php +++ b/pg-view/ns/edit.php @@ -1,5 +1,5 @@ - +Si le TTL est omis, il sera définit à secondes.
= sprintf(_('If the TTL is omitted, it will default to %s seconds.'), '') ?>
La précision de la classe (IN
) est facultative.
= _('Precising the class (IN
) is optional.') ?>
La zone n'est pas autorisée à dépasser = ZONE_MAX_CHARACTERS ?> caractÚres.
+= sprintf(_('Submitted zone content is limited to %s characters.'), ZONE_MAX_CHARACTERS) ?>
-Les TTLs ne sont autorisés qu'entre et
secondes.
= sprintf(_('TTLs must last between %1$s and %2$s seconds.'), '', '
') ?>
Les seuls types dont l'édition est autorisée sont :
+= _('The only types that can be defined are:') ?>
' . $allowed_type . '
';
-
?>