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 === '') ? '' : '

SuccĂšs : ' . $msg . '

' . LF, - 4 => '

Erreur utilisataire : ' . $msg . '

' . LF, - 5 => '

Server error: The server encountered an error: ' . $msg . '

' . LF, + 2 => ($msg === '') ? '' : '

' . _('Success: ') . '' . $msg . '

' . LF, + 4 => '

' . _('User error: ') . '' . $msg . '

' . LF, + 5 => '

' . _('Server error: ') . '' . $msg . '

' . 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 to kzonecheck)." +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('/^(?[a-z0-9@._-]+)(?:[\t ]+(?[0-9]{1,16}))?(?:[\t ]+IN)?[\t ]+(?[A-Z]{1,16})[\t ]+(?.+)$/D', $line, $matches) !== 1) - output(403, 'La zone est mal formatĂ©e (selon Niver).'); + output(403, _('The following line does not match the expected format: ') . '' . 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 ]+(?[0-9a-f]{8})-(?[0-9a-f]{32})\._domain-verification\.' . preg_quote(SERVER_NAME, '/') . '\.$/Dm', implode(LF, $results), $matches) !== 1) - output(403, 'Enregistrement d\'authentification introuvable'); + output(403, _('NS authentication record not found.')); checkAuthToken($matches['salt'], $matches['hash']); @@ -49,4 +49,4 @@ knotcConfExec([ "set 'zone[" . $_POST['domain'] . "].template' 'niver'", ]); -output(200, 'La zone a Ă©tĂ© crĂ©Ă©e.'); +output(200, _('Zone created.')); diff --git a/pg-act/ns/zone-del.php b/pg-act/ns/zone-del.php index f67f46d..71b39fc 100644 --- a/pg-act/ns/zone-del.php +++ b/pg-act/ns/zone-del.php @@ -4,4 +4,4 @@ nsCheckZonePossession($_POST['zone']); nsDeleteZone($_POST['zone']); -output(200, 'La zone a Ă©tĂ© supprimĂ©e.'); +output(200, _('Zone deleted.')); diff --git a/pg-act/reg/ds.php b/pg-act/reg/ds.php index 63077b6..df13b74 100644 --- a/pg-act/reg/ds.php +++ b/pg-act/reg/ds.php @@ -27,4 +27,4 @@ knotcZoneExec(CONF['reg']['registry'], [ $_POST['key'] ]); -output(200, 'Enregistrement ajoutĂ©/retirĂ©.'); +output(200, _('Modification done.')); diff --git a/pg-act/reg/glue.php b/pg-act/reg/glue.php index 90bf8e9..8e2e4b8 100644 --- a/pg-act/reg/glue.php +++ b/pg-act/reg/glue.php @@ -13,4 +13,4 @@ knotcZoneExec(CONF['reg']['registry'], [ $_POST['ip'] ]); -output(200, 'Glue ajoutĂ©/retirĂ©.'); +output(200, _('Modification done.')); diff --git a/pg-act/reg/ns.php b/pg-act/reg/ns.php index f60d79f..551b4a6 100644 --- a/pg-act/reg/ns.php +++ b/pg-act/reg/ns.php @@ -10,4 +10,4 @@ knotcZoneExec(CONF['reg']['registry'], [ $_POST['ns'] ]); -output(200, 'Enregistrement ajoutĂ©/retirĂ©.'); +output(200, _('Modification done.')); diff --git a/pg-act/reg/register.php b/pg-act/reg/register.php index fa4e8d3..b08e94f 100644 --- a/pg-act/reg/register.php +++ b/pg-act/reg/register.php @@ -1,15 +1,15 @@ $domain], 'domain') !== []) - output(403, 'Ce domaine n\'est pas disponible Ă  l\'enregistrement. Il est dĂ©jĂ  enregistrĂ©.'); + output(403, _('This domain is already registered.')); if (in_array($_POST['subdomain'], explode(LF, file_get_contents(CONF['common']['root_path'] . '/pg-act/reg/reserved.txt')))) - output(403, 'Ce domaine n\'est pas disponible Ă  l\'enregistrement. Il est rĂ©servĂ©.'); + output(403, _('This domain is reserved.')); rateLimit(); @@ -19,4 +19,4 @@ insert('registry', [ 'last_renewal' => date('Y-m-d H:i:s'), ]); -output(200, 'Domaine ajoutĂ© au registre.'); +output(200, _('Domain registered.')); diff --git a/pg-act/reg/transfer.php b/pg-act/reg/transfer.php index 6fca77f..b63e768 100644 --- a/pg-act/reg/transfer.php +++ b/pg-act/reg/transfer.php @@ -1,16 +1,16 @@ $_SESSION['id'], 'domain' => $domain], 'domain') !== []) - output(403, 'Le compte prĂ©sent possĂšde dĂ©jĂ  ce domaine.'); + output(403, _('The current account already owns this domain.')); exec(CONF['dns']['kdig_path'] . ' ' . $domain . ' NS @' . CONF['reg']['address'] . ' +noidn', $results); if (preg_match('/^' . preg_quote($domain, '/') . '[\t ]+[0-9]{1,8}[\t ]+IN[\t ]+NS[\t ]+(?[0-9a-f]{8})-(?[0-9a-f]{32})\._transfer-verification\.' . preg_quote(SERVER_NAME, '/') . '\.$/Dm', implode(LF, $results), $matches) !== 1) - output(403, 'Enregistrement d\'authentification introuvable'); + output(403, _('NS authentication record not found.')); checkAuthToken($matches['salt'], $matches['hash']); @@ -23,4 +23,4 @@ knotcZoneExec(CONF['reg']['registry'], [ $matches['salt'] . '-' . $matches['hash'] . '._transfer-verification.' . SERVER_NAME . '.' ], 'delete'); -output(200, 'Le domaine a Ă©tĂ© transfĂ©rĂ© vers le compte prĂ©sent, l\'enregistrement d\'authentification a Ă©tĂ© automatiquement retirĂ©.'); +output(200, _('The domain has been transferred to the current account ; the NS authentication record has been automatically deleted.')); diff --git a/pg-act/reg/unregister.php b/pg-act/reg/unregister.php index 375bc3f..702541d 100644 --- a/pg-act/reg/unregister.php +++ b/pg-act/reg/unregister.php @@ -4,4 +4,4 @@ regCheckDomainPossession($_POST['domain']); regDeleteDomain($_POST['domain']); -output(200, 'Domaine effacĂ© du registre.'); +output(200, _('Domain unregistered.')); diff --git a/pg-view/auth/approval.php b/pg-view/auth/approval.php index eb36906..43a17d4 100644 --- a/pg-view/auth/approval.php +++ b/pg-view/auth/approval.php @@ -1,10 +1,10 @@

- 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. +

-
+

- +
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 . Son identifiant interne est . - - 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.'); +} ?>

-

Types de comptes

+

-
De test
+
- C'est le type de compte par dĂ©faut, avec des fonctionnalitĂ©s limitĂ©es pour Ă©viter les abus : +
    -
  • Risque d'ĂȘtre supprimĂ© n'importe quand
  • -
  • > 30) >= 1) ? CONF['ht']['user_quota_testing'] >> 30 . ' ' . linkToDocs('units', 'Gio') : CONF['ht']['user_quota_testing'] >> 20 . ' ' . linkToDocs('units', 'Mio') ?> de SFTP
  • -
  • Certificat Let's Encrypt de test
  • +
  • +
  • > 30) >= 1) ? CONF['ht']['user_quota_testing'] >> 30 . ' ' . _('GiB') : CONF['ht']['user_quota_testing'] >> 20 . ' ' . _('MiB')) ?>
  • +
-
Approuvé
+
- C'est originellement un compte de test mais qui a Ă©tĂ© approuvĂ© par ane administrataire, et qui a pour but d'ĂȘtre utilisĂ© de façon stable : +
    -
  • > 30) >= 1) ? CONF['ht']['user_quota_approved'] >> 30 . ' ' . linkToDocs('units', 'Gio') : CONF['ht']['user_quota_approved'] >> 20 . ' ' . linkToDocs('units', 'Mio') ?> de SFTP
  • -
  • Vrai certificat Let's Encrypt
  • +
  • > 30) >= 1) ? CONF['ht']['user_quota_approved'] >> 30 . ' ' . _('GiB') : CONF['ht']['user_quota_approved'] >> 20 . ' ' . _('MiB')) ?>
  • +
diff --git a/pg-view/auth/login.php b/pg-view/auth/login.php index d3b4bd7..c3f472c 100644 --- a/pg-view/auth/login.php +++ b/pg-view/auth/login.php @@ -1,13 +1,13 @@ -

Pas de compte ? En créer un

+

-
- +
+
-
+

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

+

- - +
-
+
- -

Une clé de passe sécurisée est trop compliquée à deviner pour une attaque qui testerait automatiquement plein de clés de passe tout en connaissant d'autres informations et secrets sur vous.

-

Minimum 8 caractĂšres si elle contient minuscule, majuscule et chiffre, ou minimum 10 caractĂšres sinon.

+ +

- +
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 : +

-
    -
  • la possession et la rĂ©servation des domaines dans le registre
  • -
  • les enregistrements DNS des zones hĂ©bergĂ©es sur le serveur de noms
  • -
  • le contenu des sites
  • -
  • les paires de clĂ©s des services Onion
  • -
-
- +
- +
diff --git a/pg-view/auth/username.php b/pg-view/auth/username.php index 91889af..9b55d2f 100644 --- a/pg-view/auth/username.php +++ b/pg-view/auth/username.php @@ -1,10 +1,6 @@ -

- 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 par et Let\'s Encrypt') ?>. +

- Le domaine doit posséder les enregistrements ci-aprÚs lors du traitement de ce formulaire. +

@@ -22,9 +22,9 @@
-
+

-
+

- +
diff --git a/pg-view/ht/add-onion.php b/pg-view/ht/add-onion.php index 50a6ecd..481dfe0 100644 --- a/pg-view/ht/add-onion.php +++ b/pg-view/ht/add-onion.php @@ -1,9 +1,5 @@ -

- Ajouter un accĂšs par 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 par sous-domaine de . -

-
-
+
.
-
+

- +
diff --git a/pg-view/ht/add-subpath.php b/pg-view/ht/add-subpath.php index a661a9f..8d03a9e 100644 --- a/pg-view/ht/add-subpath.php +++ b/pg-view/ht/add-subpath.php @@ -1,11 +1,7 @@ -

- Ajouter sur un dossier de site un accĂšs par sous-chemin de /. -

-
-
+
https:///
-
+

- +
diff --git a/pg-view/ht/del.php b/pg-view/ht/del.php index 66c44ea..3a6c52e 100644 --- a/pg-view/ht/del.php +++ b/pg-view/ht/del.php @@ -1,9 +1,5 @@ -

- 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 afin de les rendre accessibles par . +

-

Sites actuellement hébergés

-
+

$_SESSION['id'] ?? '']); if ($sites === []) - echo '

Ce compte n\'héberge aucun site sur cette instance.

' . LF; + echo '

∅

' . LF; else { echo '

' . LF; foreach ($sites as $site) { @@ -36,68 +35,69 @@ else {
-

Ajouter un accĂšs de site

+

-

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

+

a-z', 'A-Z', '0-9', '_', '-') ?>

SFTP

+ +

- 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. + > 30) >= 1) ? $quota >> 30 . ' ' . _('GiB') : $quota >> 20 . ' ' . _('MiB')) ?>

-

Authentifier le serveur

+

-

Un enregistrement SSHFP est disponible.

+

- Clé publique +
- Empreinte +
- Art ASCII +
-

Se connecter au serveur

+

sftp://@:/
-
Serveur
+
-
Port
+
-
Dossier
+
/
-
Utilisataire
+
-
Clé de passe
+
- celle de votre compte +
@@ -108,16 +108,17 @@ echo (($quotaSize >> 30) >= 1) ? $quotaSize >> 30 . ' ' . linkToDocs('units', '<

CSP

- Une politique de sécurité du contenu (CSP) interdit l'intégration de JavaScript ou de ressources depuis des sites distants. -

-

Compression gzip

-

- 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. +

-

Page d'index

+

- Lors d'une requĂȘte sur un dossier, le premier des fichiers suivants qui existe dans ce dossier est rĂ©pondu : + gzip compression is supported: if the client supports it and the file is available, path.gz is served instead of path.') ?> +

+ +

+

+ inside this directory is served:') ?>

  1. index.html
  2. @@ -125,9 +126,9 @@ echo (($quotaSize >> 30) >= 1) ? $quotaSize >> 30 . ' ' . linkToDocs('units', '<
  3. index.gmi
-

Page d'erreur 404

+

- Lors d'une requĂȘte aboutissant Ă  une erreur 404, le premier des fichiers suivants qui existe Ă  la racine du site est rĂ©pondu : + 404 error, the first of the following files that exists at the root of the site is served:') ?>

  1. 404.html
  2. diff --git a/pg-view/ns/caa.php b/pg-view/ns/caa.php index 00ac57b..b536a0d 100644 --- a/pg-view/ns/caa.php +++ b/pg-view/ns/caa.php @@ -1,23 +1,16 @@ -

    - -

    -
    - - -
    - +

    - +

    - +

    - +
    diff --git a/pg-view/ns/cname.php b/pg-view/ns/cname.php index a3725da..cf9bc28 100644 --- a/pg-view/ns/cname.php +++ b/pg-view/ns/cname.php @@ -1,13 +1,8 @@ -

    - -

    -
    - -
    - + +

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

    - -

    -
    - -
    - + +

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

    - +
    - +

    - + -

    Valeurs par défaut

    +

    -

    Si le TTL est omis, il sera définit à secondes.

    +

    ') ?>

    -

    La précision de la classe (IN) est facultative.

    +

    IN) is optional.') ?>

    -

    Valeurs autorisées

    +

    -

    La zone n'est pas autorisée à dépasser caractÚres.

    +

    -

    Les TTLs ne sont autorisés qu'entre et secondes.

    +

    ', '') ?>

    -

    Les seuls types dont l'Ă©dition est autorisĂ©e sont :

    +

      ' . $allowed_type . ''; - ?>
    diff --git a/form.ns.php b/pg-view/ns/form.ns.php similarity index 60% rename from form.ns.php rename to pg-view/ns/form.ns.php index eab6040..304b026 100644 --- a/form.ns.php +++ b/pg-view/ns/form.ns.php @@ -1,19 +1,18 @@ - + -
    - Domaine +
    - +
    - +
    @@ -43,13 +42,13 @@ foreach (nsListUserZones() as $zone)
    - +
    diff --git a/pg-view/ns/index.php b/pg-view/ns/index.php index 00950cc..72e0603 100644 --- a/pg-view/ns/index.php +++ b/pg-view/ns/index.php @@ -1,12 +1,29 @@

    - Ce service permet d'héberger et de gérer les enregistrements DNS d'une . +

    -

    Serveurs de noms

    -

    Une zone hĂ©bergĂ©e sur ce service est servie par ces serveurs de noms :

    +

    + + $_SESSION['id'] ?? ''], 'zone'); +if ($zones === []) + echo '

    ∅

    ' . LF; +else { + echo '

      ' . LF; + foreach ($zones as $zone) + echo '
    • ' . $zone . '
    • ' . LF; + echo '
    ' . LF; +} + +?> + +

    + +

      ' . $server . ''; ?>
    - -

    Zones actuellement hébergées

    - - $_SESSION['id'] ?? ''], 'zone'); -if ($zones === []) - echo '

    Ce compte n\'héberge aucune zone sur cette instance.

    ' . LF; -else { - echo '

      ' . LF; - foreach ($zones as $zone) - echo '
    • ' . $zone . '
    • ' . LF; - echo '
    ' . LF; -} diff --git a/pg-view/ns/ip.php b/pg-view/ns/ip.php index 68dbbda..8c6cb49 100644 --- a/pg-view/ns/ip.php +++ b/pg-view/ns/ip.php @@ -1,10 +1,6 @@ -

    - -

    -
    -
    +

    - +
    diff --git a/pg-view/ns/loc.php b/pg-view/ns/loc.php index dc1deb8..70b66c5 100644 --- a/pg-view/ns/loc.php +++ b/pg-view/ns/loc.php @@ -1,82 +1,76 @@ -

    - -

    -
    - - - +
    - Latitude +
    - +
    - +
    - +
    - +
    - Longitude +
    - +
    - +
    - +
    - +
    - +
    m
    - +
    m
    - +
    m
    - +
    m
    - +
    diff --git a/pg-view/ns/mx.php b/pg-view/ns/mx.php index 94e32e7..601b378 100644 --- a/pg-view/ns/mx.php +++ b/pg-view/ns/mx.php @@ -1,23 +1,12 @@ -

    - -

    -
    - - -
    - - +
    -
    - - +
    -
    - +
    diff --git a/pg-view/ns/ns.php b/pg-view/ns/ns.php index 4c4b01c..419b894 100644 --- a/pg-view/ns/ns.php +++ b/pg-view/ns/ns.php @@ -1,13 +1,8 @@ -

    - -

    -
    -
    - +

    - +
    diff --git a/pg-view/ns/print.php b/pg-view/ns/print.php index c348137..3f9ed1e 100644 --- a/pg-view/ns/print.php +++ b/pg-view/ns/print.php @@ -1,15 +1,14 @@ -
    - +
    - +
    - +
    - +
    - +
    - - - - + + + + if (isset($data['zone-ds'])) { ?>
    -
    Zone
    +
    -
    Tag
    +
    -
    Algorithme
    +
    -
    Type de condensat
    +
    -
    Condensat
    +
    diff --git a/pg-view/ns/srv.php b/pg-view/ns/srv.php index d5b04cb..30893d6 100644 --- a/pg-view/ns/srv.php +++ b/pg-view/ns/srv.php @@ -1,35 +1,28 @@ -

    - -

    -
    - -
    - - +

    - +

    - +

    - +

    - + diff --git a/pg-view/ns/sshfp.php b/pg-view/ns/sshfp.php index 53eefe4..9e1e32e 100644 --- a/pg-view/ns/sshfp.php +++ b/pg-view/ns/sshfp.php @@ -1,14 +1,7 @@ -

    - -

    -
    - -
    - - +
    +
    - +

    - + diff --git a/pg-view/ns/tlsa.php b/pg-view/ns/tlsa.php index 335f2af..e99df32 100644 --- a/pg-view/ns/tlsa.php +++ b/pg-view/ns/tlsa.php @@ -1,13 +1,7 @@ -

    - -

    -
    - -
    - +
    +
    - +
    +
    - +
    +
    - +
    - + +
    - + + diff --git a/pg-view/ns/txt.php b/pg-view/ns/txt.php index 8c3747c..ea642eb 100644 --- a/pg-view/ns/txt.php +++ b/pg-view/ns/txt.php @@ -1,13 +1,8 @@ -

    - -

    -
    +
    - +
    - -
    - + diff --git a/pg-view/ns/zone-add.php b/pg-view/ns/zone-add.php index bd95787..39522cf 100644 --- a/pg-view/ns/zone-add.php +++ b/pg-view/ns/zone-add.php @@ -1,19 +1,9 @@

    - Pour prouver que vous possédez bien ce domaine, il doit posséder un égal à ._domain-verification.. lors du traitement de ce formulaire. -

    - -

    - La zone sera servie par ces serveurs de noms : -

      -' . $server . ''; -?> -
    + ' . getAuthToken() . '._domain-verification.' . SERVER_NAME . '.') ?>

    -
    +

    - + diff --git a/pg-view/ns/zone-del.php b/pg-view/ns/zone-del.php index f03295d..fb0b580 100644 --- a/pg-view/ns/zone-del.php +++ b/pg-view/ns/zone-del.php @@ -1,5 +1,5 @@
    - +
    - + diff --git a/pg-view/reg/ds.php b/pg-view/reg/ds.php index 669863f..1209988 100644 --- a/pg-view/reg/ds.php +++ b/pg-view/reg/ds.php @@ -1,15 +1,11 @@ -

    - Ici vous pouvez indiquer au registre l'enregistrement DS d'une zone afin de permettre de déléguer la confiance . -

    -
    - +
    - +

    - +

    - +

    - +

    - +

    - + diff --git a/pg-view/reg/glue.php b/pg-view/reg/glue.php index da13ee9..7715e0e 100644 --- a/pg-view/reg/glue.php +++ b/pg-view/reg/glue.php @@ -1,22 +1,18 @@ -

    - -

    -
    - +
    - Domaine -
    - + +
    +
    -
    - +
    +
    -
    - +
    +
    - + diff --git a/pg-view/reg/index.php b/pg-view/reg/index.php index dd6f7ea..5167f15 100644 --- a/pg-view/reg/index.php +++ b/pg-view/reg/index.php @@ -1,16 +1,16 @@

    - Ce permet d'obtenir un domaine se terminant par , par exemple domaine.. + %1$s, for instance domain%1$s.'), '.' . CONF['reg']['registry']) ?>

    -

    Domaines actuellement enregistrés

    +

    $_SESSION['id'] ?? ''], 'domain'); if ($domains === []) - echo '

    Ce compte n\'a aucun domaine enregistré sur ' . CONF['reg']['registry'] . '

    ' . LF; + echo '

    ∅

    ' . LF; else { echo '
      ' . LF; foreach ($domains as $domain) diff --git a/pg-view/reg/ns.php b/pg-view/reg/ns.php index de0c6c5..d700d32 100644 --- a/pg-view/reg/ns.php +++ b/pg-view/reg/ns.php @@ -1,15 +1,11 @@ -

      - -

      -
      - +
      - +

      - +

      - + diff --git a/pg-view/reg/print.php b/pg-view/reg/print.php index 5318c8a..526795a 100644 --- a/pg-view/reg/print.php +++ b/pg-view/reg/print.php @@ -1,5 +1,5 @@
      - +
      - +
    DomaineTTLTypeContenu
    - - - - + + + + - Enregistrer un nouveau domaine sur son compte. Ce domaine doit ĂȘtre composĂ© uniquement d'au moins 4 lettres latines non accentuĂ©es (a-z). +

    - +
    .
    - + diff --git a/pg-view/reg/reserved.txt b/pg-view/reg/reserved.txt deleted file mode 100644 index bfbb72f..0000000 --- a/pg-view/reg/reserved.txt +++ /dev/null @@ -1,242 +0,0 @@ -# List of subdomains not available to register -# -# They may be forbidden because: -# - they may be privileged for impersonating Niver, spamming or fishing -# - they are reserved for a project asking for it and deserving such a well-known name - -niver - -# Registry-related -nic -domain -domains -reg -registry - -# Special subdomains -autoconfig -autodiscover - -# Special TLDs -example -invalid -test -local -localhost -onion - -# Standard-related -ns0 -ns1 -ns2 -ns3 -ns4 -ns5 -ns6 -ns7 -ns8 -ns9 -dns -dns0 -dns1 -dns2 -dns3 -dns4 -dns5 -dns6 -dns7 -dns8 -dns9 -www -wwww -www0 -www1 -www2 -www3 -www4 -www5 -www6 -www7 -www8 -www9 -srv -srv0 -srv1 -srv2 -srv3 -srv4 -srv5 -srv6 -srv7 -srv8 -srv9 -ssh -sftp -http -https -ssl -tls -mtx -matrix -gmi -gemini -ftp -ftps -mx -imap -imaps -smtp -smtps -pop -xmpp -fedi -html -rss -ipv4 -ipv6 - -# Prevent account fishing -account -accounts -register -profile -signup -login -auth -authenticate -connect - -# Commercial -com -free -trial -ads -bank -banks -business -customer -customers -store -stores -shop -shops -job -jobs -marketing -sales - -# Miscellaneous -org -net -com -gov -gouv -edu -api -cdn -support -admin -web -dev -host -portal -beta -alpha -demo -vpn -temp -root -data -stats -chat -about -remote -portal -boost -core -learn -community -meta -news -public -online -join -mobile -tech -space -zone -name -access -search -static -secure -security -bbs -help -info -code -doc -docs -server -servers -client -clients -mail -mails -email -emails -webmail -site -sites -website -websites -blog -blogs -gemlog -gemlogs -capsule -capsules -source -sources -update -updates -forum -forums -service -services -ressource -ressources -image -images -video -videos -radio -radios -music -map -maps -app -apps -dev -devs -developer -developers -social -cloud -clouds -network -networks -survey -surveys -build -builds -upload -uploads -download -downloads -content -contents -drive -drives -home -homes diff --git a/pg-view/reg/transfer.php b/pg-view/reg/transfer.php index 3c5ab13..88d4f26 100644 --- a/pg-view/reg/transfer.php +++ b/pg-view/reg/transfer.php @@ -1,11 +1,11 @@

    - Pour prouver que vous ĂȘtes autorisĂ© Ă  recevoir le domaine par san possessaire actuele, ledit domaine doit possĂ©der un Ă©gal Ă  ._transfer-verification.. lors du traitement de ce formulaire. Cet enregistrement sera automatiquement retirĂ© une fois validĂ©. + ' . getAuthToken() . '._transfer-verification.' . SERVER_NAME '.') ?>

    - +
    - . + .
    - + diff --git a/pg-view/reg/unregister.php b/pg-view/reg/unregister.php index 401fdcf..ddcb552 100644 --- a/pg-view/reg/unregister.php +++ b/pg-view/reg/unregister.php @@ -1,9 +1,9 @@

    - Ceci désenregistrera le domaine, et le rendra ainsi à nouveau disponible à l'enregistrement par n'importe qui. +

    - +

    - + diff --git a/router.php b/router.php index 3ed0fb9..c39c05c 100644 --- a/router.php +++ b/router.php @@ -3,9 +3,21 @@ define('CONF', parse_ini_file(__DIR__ . '/config.ini', true, INI_SCANNER_TYPED)) define('DB', new PDO('sqlite:' . CONF['common']['root_path'] . '/db/niver.db')); -foreach (array_diff(scandir(CONF['common']['root_path'] . '/fn'), array('..', '.')) as $file) - require CONF['common']['root_path'] . '/fn/' . $file; -require 'pages.php'; +$locale = 'en'; +if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + $client_locales = explode(',', preg_replace('/[A-Z0-9]|q=|;|-|\./', '', $_SERVER['HTTP_ACCEPT_LANGUAGE'])); + $available_locales = array_diff(scandir('locales'), ['..', '.']); + foreach ($client_locales as $client_locale) { + if (in_array($client_locale, $available_locales)) { + $locale = $client_locale; + break; + } + } +} +define('LOCALE', $locale); +setlocale(LC_MESSAGES, 'C.UTF-8'); +bindtextdomain('messages', 'locales/' . LOCALE); +header('Content-Language: ' . LOCALE); const LF = "\n"; @@ -13,6 +25,11 @@ const PLACEHOLDER_DOMAIN = 'example'; // From RFC2606: Reserved Top Level DNS Na const PLACEHOLDER_IPV6 = '2001:db8::3'; // From RFC3849: IPv6 Address Prefix Reserved for Documentation const PLACEHOLDER_IPV4 = '203.0.113.42'; // From RFC5737: IPv4 Address Blocks Reserved for Documentation +foreach (array_diff(scandir(CONF['common']['root_path'] . '/fn'), array('..', '.')) as $file) + require CONF['common']['root_path'] . '/fn/' . $file; + +require 'pages.php'; + if ($_SERVER['REQUEST_URI'] === '/sftpgo-auth.php') return; @@ -100,9 +117,9 @@ function displayFinalMessage($data) { if ($_POST !== []) { if (PAGE_METADATA['require-login'] ?? true !== false) { if (isset($_SESSION['id']) !== true) - output(403, 'Vous devez ĂȘtre connecté·e Ă  un compte pour effectuer cette action.'); + output(403, _('You need to be logged in to do this.')); if (isset(query('select', 'users', ['id' => $_SESSION['id']], 'id')[0]) !== true) - output(403, 'Ce compte n\'existe plus. DĂ©connectez-vous pour terminer cette session fantĂŽme.'); + output(403, _('This account doesn\'t exist anymore. Log out to end this ghost session.')); } if (file_exists('pg-act/' . PAGE_ADDRESS . '.php')) require 'pg-act/' . PAGE_ADDRESS . '.php'; diff --git a/view.php b/view.php index 9837eb1..c7f596d 100644 --- a/view.php +++ b/view.php @@ -1,5 +1,5 @@ -> +> <?php @@ -16,10 +16,9 @@ <header> <p> <?php if (isset($_SESSION['id'])) { ?> - <?= ($_SESSION['type'] === 'approved') ? '<span title="Compte approuvĂ©">đŸ‘€ </span>' : '<span title="Compte de test">⏳ </span>' ?><strong><?= (defined('DISPLAY_USERNAME') - ? DISPLAY_USERNAME : '<em>?</em>') ?></strong> <a class="auth" href="<?= CONF['common']['prefix'] ?>/auth/logout">Se dĂ©connecter</a> + <span aria-hidden="true"><?= ($_SESSION['type'] === 'approved') ? 'đŸ‘€' : '⏳' ?> </span><strong><?= (defined('DISPLAY_USERNAME') ? DISPLAY_USERNAME : '<em>?</em>') ?></strong> <a class="auth" href="<?= CONF['common']['prefix'] ?>/auth/logout"><?= _('Log out') ?></a> <?php } else { ?> - <span aria-hidden="true">đŸ‘» </span><em>Anonyme</em> <a class="auth" href="<?= redirUrl('auth/login') ?>">Se connecter</a> + <span aria-hidden="true">đŸ‘» </span><em><?= _('Anonymous') ?></em> <a class="auth" href="<?= redirUrl('auth/login') ?>"><?= _('Log in') ?></a> <?php } ?> </p> <nav> @@ -39,14 +38,14 @@ require 'pg-view/' . PAGE_ADDRESS . '.php'; if ($_POST === [] AND PAGE_METADATA['require-login'] ?? true !== false AND !isset($_SESSION['id']) AND PAGE_TERMINAL) - echo '<p>Ce formulaire ne sera pas acceptĂ© car il faut <a class="auth" href="' . redirUrl('auth/login') . '">se connecter</a> avant.</p>'; + echo '<p>' . sprintf(_('This form won\'t be accepted because you need to %slog in%s first.'), '<a class="auth" href="' . redirUrl('auth/login') . '">', '</a>') . '</p>'; displayFinalMessage($data); ?> </main> <footer> - <small><a rel="external" href="https://code.antopie.org/niver/niver" class="niver">Code source</a> sous <abbr title="Cooperative Nonviolent Public License No Attribution version 7 ou plus">CNPL-NAv7+</abbr>.</small> + <small><?= sprintf(_('%sSource code%s available under %s.'), '<a rel="external" href="https://code.antopie.org/niver/niver" class="niver">', '</a>', '<abbr title="Cooperative Nonviolent Public License No Attribution version 7 or more">CNPL-NAv7+</abbr>') ?></small> </footer> </body> </html>
    DomaineTTLTypeContenu