diff --git a/.gitignore b/.gitignore index e0fdf739c8..c7c32025d7 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,6 @@ electron/pub # These could have files in them but don't currently # Cypress will still auto-create them though... /cypress/performance + +# File from translations checkin scripts. +modules/tchap-translations/tmp/* diff --git a/modules/tchap-translations/README.md b/modules/tchap-translations/README.md new file mode 100644 index 0000000000..7649547b52 --- /dev/null +++ b/modules/tchap-translations/README.md @@ -0,0 +1,33 @@ +# Tchap Translations - a long story + +## What are all these translation files ? + +- `tchap_translations.json` : translations for strings that Tchap code adds to the web and react-sdk repos. + +- `tchap_translations_removed.json` : strings that tchap modifications have removed from element code. They are listed explicitly because otherwise the translation-checking script will fail (see below). + +- `old/tchap_translations_lost.json` : translations that were present in previous versions, but that don't correspond to any existing code now. Many correspond to customisations made in tchap-web v2. Keeping them around in case they're useful. + +## The translation-checking script + +Call it with `yarn i18n-tchap`. See `scripts/tchap/translations/check-translations.sh` for code. + +Based on element's translation-checking tools, but with the added complication that our code for both react-sdk and web is in the web repo (our react-sdk code is in the shape of patches and customisations). + +### First phase : `collect-reference-translations.sh` + +Collect all the translations from the translations files (tchap's and element's, from web and react-sdk) into a reference translation file. + +### Second phase : `crawl-for-translations.sh` + +Using matrix-gen-i18n, a tool from element, crawl through the code looking for translation strings, look up their translations in the reference file, and write it all to a file. + +### Third phase : compare both files + +If all strings in the code have translations, and all translations correspond to strings in the code, the two files (reference file and crawled file) should be the same. If not, fix the code and the tchap translations files until they are. + +### Why do we list removed translations ? + +`tchap_translations_removed.json` contain strings that our code has removed from the codebase. + +If we don't list them, the translation-checking script will fail : it will find translations in element's files, and no corresponding strings in the code. So the script needs to remove them from the reference translation file. diff --git a/modules/tchap-translations/old/tchap_translations_lost.json b/modules/tchap-translations/old/tchap_translations_lost.json new file mode 100644 index 0000000000..4a13fddeff --- /dev/null +++ b/modules/tchap-translations/old/tchap_translations_lost.json @@ -0,0 +1,152 @@ +{ + "Can you currently read your messages on another device? You can disconnect. This other device automatically backs up your Tchat Keys and messages.": { + "en": "Can you currently read your messages on another device? You can disconnect. This other device automatically backs up your Tchat Keys and messages.", + "fr": "Vous pouvez actuellement lire vos messages sur un autre appareil ? Vous pouvez vous déconnecter. Cet autre appareil sauvegarde automatiquement vos Clés Tchap et tous vos messages." + }, + "Warning: these keys cannot be used to unlock the messages received after backup": { + "en": "Warning: these keys cannot be used to unlock the messages received after backup", + "fr": "Attention: ces clés ne pourront pas être utilisées pour déverrouiller les messages reçus après la sauvegarde" + }, + "Without your Tchap Keys, you won't be able to read your messages at your next login because they will be locked. It's a Tchap safety measure.": { + "en": "Without your Tchap Keys, you won't be able to read your messages at your next login because they will be locked. It's a Tchap safety measure.", + "fr": "Sans vos Clés Tchap, vous ne pourrez pas lire vos messages à votre prochaine connexion parce qu'ils seront verrouillés. C'est une mesure de sécurité Tchap." + }, + "You don't have another device connected to Tchap? Back up your Tchap Keys. These keys will unlock current messages, but not those received after saving.": { + "en": "You don't have another device connected to Tchap? Back up your Tchap Keys. These keys will unlock current messages, but not those received after saving.", + "fr": "Vous n'avez pas d'autre appareil connecté à Tchap ? Sauvegardez vos Clés Tchap. Ces clés déverrouilleront les messages actuels, mais pas ceux reçus entre la sauvegarde et votre prochaine connexion." + }, + "Import from saved file": { + "en": "Import from saved file", + "fr": "Importer depuis le fichier sauvegardé" + }, + "Re-send a request to your other devices": { + "en": "Re-send a request to your other devices", + "fr": "Renvoyer une demande à un autre appareil" + }, + "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": { + "fr": "", + "en": "", + "comment": "c'est fait expres?" + }, + "Decrypting messages…": { + "fr": "Déverrouillage des messages…", + "en": "Unlocking messages…" + }, + "Did not receive it?": { + "en": "Did not receive it?", + "fr": "Pas reçu ?" + }, + "Download my logs": { + "en": "Download my logs", + "fr": "Obtenir mes journaux" + }, + "General Conditions of Use (CGU)": { + "en": "General Conditions of Use (CGU)", + "fr": "Conditions Générales d'Utilisation (CGU)" + }, + "Generate a new password. Note that your locked messages will remain locked.": { + "fr": "Générer un nouveau mot de passe. Attention, vos messages verrouillés le resteront.", + "en": "Generate a new password. Note that your locked messages will remain locked." + }, + "If your other devices do not have the key for this message, you will not be able to decrypt them.": { + "en": "If your other devices do not have the key for this message, you will not be able to decrypt them.", + "fr": "Si vos autres appareils n'ont pas la clé pour ce message, vous ne pourrez pas le déchiffrer." + }, + "Make a copy of your Security Key": { + "fr": "Faire une copie de votre Code de Récupération", + "en": "Make a copy of your Recovery Code" + }, + "Open another device to load encrypted messages": { + "fr": "Utiliser un autre appareil pour déverrouiller vos messages.", + "en": "Use another device to unlock your messages." + }, + "Or if that doesn't work, please follow these steps.": { + "fr": "Ou si cela ne fonctionne pas, veuillez suivre ces étapes.", + "en": "Or if that doesn't work, please follow these steps." + }, + "Please accept the sharing of your Tchap Keys on the other device.": { + "en": "Please accept the sharing of your Tchap Keys on the other device.", + "fr": "Merci d'accepter la demande de partage de vos Clés Tchap pour déverrouiller vos messages." + }, + "Please also confirm the emojis on the other device.": { + "en": "Please also confirm the emojis on the other device.", + "fr": "Confirmez si les objets sont les mêmes sur vos 2 appareils." + }, + "Please wait as we try to decrypt your messages. This may take a few moments.": { + "fr": "Veuillez patienter pendant que nous essayons de déverrouiller vos messages. Cela peut prendre un peu de temps.", + "en": "Please wait as we try to unlock your messages. This may take a few moments.", + "comment": "on s'en sert pas ca ? je viens de faire un patch" + }, + "Request in progress...": { + "en": "Request in progress...", + "fr": "Demande en cours..." + }, + "Resend key requests": { + "fr": "Renvoyer une demande", + "en": "Resend key requests" + }, + "Reset your keys to prevent future decryption errors": { + "fr": "Activez la sauvegarde automatique des messages", + "en": "Enable automatic secure backup" + }, + "Save your Tchap Keys before logging out": { + "en": "Save your Tchap Keys before logging out", + "fr": "Sauvegardez vos Clés Tchap avant de vous déconnecter" + }, + "Secure your backup with a Security Phrase": { + "fr": "Protégez votre sauvegarde avec un Code de Récupération", + "en": "Secure your backup with a Recovery Code" + }, + "Set up with a Security Key": { + "fr": "Configurer avec un Code de Récupération", + "en": "Set up with a Recovery Code" + }, + "Sign me out": { + "en": "Sign me out", + "fr": "Me déconnecter" + }, + "Some messages could not be decrypted": { + "fr": "Certains messages n’ont pas pu être déverrouillés", + "en": "Some messages could not be unlocked" + }, + "Start a new chat": { + "en": "New direct message", + "fr": "Nouveau message direct" + }, + "Tchap Key share requests are sent to your other devices automatically. If you rejected or dismissed the key share request on your other devices, click here to request the Tchap Keys again.": { + "en": "Tchap Key share requests are sent to your other devices automatically. If you rejected or dismissed the key share request on your other devices, click here to request the Tchap Keys again.", + "fr": "Les demandes de partage de vos Clés Tchap sont automatiquement envoyées à vos autres appareils. Si vous rejetez ou supprimez la demande de partage de clé sur vos autres appareils, cliquez ici pour redemander vos Clés Tchap." + }, + "Unfortunately, there are no other verified devices to request decryption keys from. Signing in and verifying other devices may help avoid this situation in the future.": { + "fr": "Malheureusement, il n’y a aucun autre appareil vérifié qui puisse déverrouiller vos messages. La connexion et la vérification depuis d’autres appareils pourraient éviter ce genre de souci à l’avenir.", + "en": "Unfortunately, there are no other verified devices to unlock your messages. Signing in and verifying other devices may help avoid this situation in the future." + }, + "Where you're signed in": { + "fr": "Appareils connectés", + "en": "Connected devices" + }, + "You can also ask your homeserver admin to upgrade the server to change this behaviour.": { + "fr": "", + "en": "" + }, + "You will not be able to access old undecryptable messages, but resetting your keys will allow you to receive new messages.": { + "fr": "Pour éviter la perte de vos messages, vous pouvez désormais activer cette nouvelle fonctionnalité Tchap dans les paramètres de sécurité", + "en": "To prevent the loss of your messages, you can now activate this new Tchap feature in the security settings" + }, + "Your Security Key": { + "fr": "Votre Code de Récupération", + "en": "Your Recovery Code" + }, + "Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": { + "fr": "Votre Code de Récupération est un filet de sécurité. Vous pouvez l’utiliser pour retrouver l’accès à vos messages chiffrés si vous oubliez votre phrase secrète.", + "en": "Your Recovery Code is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase." + }, + "Your Security Key is in your Downloads folder.": { + "fr": "Votre Code de Récupération est dans le répertoire Téléchargements.", + "en": "Your Recovery Code is in your Downloads folder." + }, + "Your key share request has been sent - please check your other devices for key share requests.": { + "en": "Your key share request has been sent - please check your other devices for key share requests.", + "fr": "Votre demande de partage de clé a été envoyée - vérifiez les demandes de partage de clé sur vos autres appareils." + } +} diff --git a/modules/tchap-translations/tchap_translations.json b/modules/tchap-translations/tchap_translations.json index dffd5b5624..7209cf6ee7 100644 --- a/modules/tchap-translations/tchap_translations.json +++ b/modules/tchap-translations/tchap_translations.json @@ -1,1156 +1,1014 @@ { - "Welcome to Tchap": { - "en": "Welcome to Tchap", - "fr": "Bienvenue sur Tchap" + "%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use %(brand)s Desktop for encrypted messages to appear in search results.": { + "en": "Currently %(brand)s does not support searching into messages.", + "fr": "Actuellement %(brand)s ne supporte pas la recherche dans les messages." }, - "Examples:": { - "en": "Examples:", - "fr": "Exemples :" + "%(brand)s has been connected in another tab": { + "en": "%(brand)s has been connected in another tab", + "fr": "%(brand)s a été connecté dans un autre onglet" }, - "Choose a homeserver:": { - "en": "Choose a homeserver:", - "fr": "Choisissez un serveur d'accueil :" + "%(brand)s is open in another window. Click \"%(label)s\" to use %(brand)s here and disconnect the other window.": { + "comment": "2023-11-08: remove once the string is translated in element", + "en": "%(brand)s is open in another window. Click \"%(label)s\" to use %(brand)s here and disconnect the other window.", + "fr": "%(brand)s est ouvert dans une autre fenêtre. Cliquez \"%(label)s\" pour utiliser %(brand)s ici et déconnecter l'autre fenêtre." + }, + "%(count)s sessions selected": { + "one": { + "en": "%(count)s device selected", + "fr": "%(count)s appareil sélectionné" + }, + "other": { + "en": "%(count)s devices selected", + "fr": "%(count)s appareils sélectionnés" + } }, - "Private room": { - "en": "Private room", - "fr": "Salon" + "Please note upgrading will make a new version of the room. All current messages will stay in this archived room.": { + "en": "A new version of this room will be created. All current messages will remain accessible in this room. All members will be invited back.", + "fr": "Une nouvelle version de ce salon va être créée. Tous les messages actuels resteront accessibles dans ce salon. Tous les membres vont être réinvités." }, - "Private room open to external users": { - "en": "Private room open to external users", - "fr": "Salon ouvert aux externes" + "

The Tchap team is working on the deployment of a new feature to prevent encryption key loss.

You can access it in the section :

Security and privacy > Secure Backup

": { + "en": "

This device is not verified.

To ensure this device is always verified and you can always retrieve your messages, turn on Automatic Message Backup

", + "fr": "

Cet appareil n'est pas vérifié.

Pour que cet appareil soit toujours vérifié et que vous puissiez toujours récupérer vos messages, activez la Sauvegarde Automatique des messages.

" }, - "Public room": { - "en": "Public room", - "fr": "Forum" + "A new Security Phrase and key for Secure Messages have been detected.": { + "en": "A new Recovery Code for Secure Messages has been detected.", + "fr": "Un nouveau Code de Récupération pour les messages sécurisés a été détecté." }, - "Forum room": { - "en": "Public room", - "fr": "Forum" + "A new email has been sent": { + "en": "A new email has been sent", + "fr": "Un nouvel email de renouvellement vous a été adressé" }, - "This room is private": { - "en": "This room is private", - "fr": "Ce salon est privé" + "Access possible only by invitation of a member of the room.": { + "en": "Access possible only by invitation of a member of the room.", + "fr": "Accès possible uniquement sur invitation d'un membre du salon." }, - "This room is private and open to external users": { - "en": "This room is private and open to external users", - "fr": "Ce salon est privé et ouvert aux externes" + "Access your secure message history and set up secure messaging by entering your Security Key.": { + "en": "Access your secure message history and set up secure messaging by entering your Recovery Code.", + "fr": "Accédez à votre historique de messages chiffrés et mettez en place la messagerie sécurisée en entrant votre Code de Récupération." }, - "This room is a public forum": { - "en": "This room is a public forum", - "fr": "Ce salon est un forum public" + "Accessible to all users and to external guests by invitation of an administrator.": { + "en": "Accessible to all users and to external guests by invitation of an administrator.", + "fr": "Accessible à tous les utilisateurs et aux invités externes sur invitation d'un administrateur." }, "Accessible to all users by invitation from an administrator.": { "en": "Accessible to all users by invitation from an administrator.", "fr": "Accessible à tous les utilisateurs sur invitation d'un administrateur." }, - "Accessible to all users and to external guests by invitation of an administrator.": { - "en": "Accessible to all users and to external guests by invitation of an administrator.", - "fr": "Accessible à tous les utilisateurs et aux invités externes sur invitation d'un administrateur." - }, "Accessible to all users from the forum directory or from a shared link.": { "en": "Accessible to all users from the forum directory or from a shared link.", "fr": "Accessible à tous les utilisateurs à partir de la liste des forums ou d'un lien partagé." }, + "Activate on this device": { + "en": "Activate on this device", + "fr": "Activer sur cet appareil" + }, + "Add Email Address": { + "en": "Add Email Address", + "fr": "Ajouter une adresse mail" + }, "Allow access to this room to all users, even outside \"%(domain)s\" domain": { "en": "Allow access to this room to all users, even outside \"%(domain)s\" domain", "fr": "Autoriser l'accès à tous les utilisateurs, même ceux qui ne sont pas membres du domaine \"%(domain)s\"" }, - "Create a room in this space": { - "en": "Create a room in this space", - "fr": "Créer un salon dans cet espace" - }, - "Private discussions accessible to all users of this space.": { - "en": "Private discussions accessible to all users of this space.", - "fr": "Discussions privées accessibles à tous les membres de cet espace" - }, - "Private discussions accessible to all users of this space and to external guests by invitation of an administrator.": { - "en": "Private discussions accessible to all users of this space and to external guests by invitation of an administrator.", - "fr": "Discussions privées accessibles à tous les membres de cet espace et aux utilisateurs externes sur invitation d'un administrateur." - }, - "Public discussion accessible to all users of this space or from a shared link.": { - "en": "Public discussion accessible to all users of this space or from a shared link.", - "fr": "Discussions publiques accessibles à tous les membres de cet espace ou depuis un lien de partage." - }, - "Scanning": { - "en": "Scanning", - "fr": "Scanning" - }, - "Content blocked": { - "en": "Content blocked", - "fr": "Contenu bloqué" - }, - "Trusted": { - "en": "Trusted", - "fr": "Vérifié" - }, - "Scan unavailable": { - "en": "Scan unavailable", - "fr": "Scan unavailable" - }, - "Contact us": { - "en": "Contact us", - "fr": "Contactez-nous" - }, - "If you have any difficulties with using Tchap, please contact us by email at %(supportEmail)s": { - "en": "If you have any difficulties with using Tchap, please contact us by email at %(supportEmail)s", - "fr": "Si vous rencontrez des difficultés dans votre utilisation de Tchap, contactez-nous par email à %(supportEmail)s" - }, - "Known issues": { - "en": "Known issues", - "fr": "Problèmes connus" - }, - "Read the Known Issues": { - "en": "Read the Known Issues", - "fr": "Consultez les problèmes connus" - }, - "This version of Tchap Web is currently in development. There are known issues that will be solved soon.": { - "en": "This version of Tchap Web is currently in development. There are known issues that will be solved soon.", - "fr": "Cette version de Tchap Web est en cours de développement. Il y a des problèmes connus qui seront bientôt résolus." - }, - "Frequently Asked Questions (FAQ)": { - "en": "Frequently Asked Questions (FAQ)", - "fr": "Foire Aux Questions (FAQ)" - }, - "Read the FAQ": { - "en": "Read the FAQ", - "fr": "Consultez la FAQ" - }, - "We have compiled a list of the questions our users ask the most frequently. Your question may be answered there.": { - "en": "We have compiled a list of the questions our users ask the most frequently. Your question may be answered there.", - "fr": "Nous avons constitué une liste des question les plus fréquentes posées par nos utilisateurs. Votre question a peut-être déjà une solution." - }, - "Please tell us what went wrong in the \"Notes\" field.": { - "en": "Please tell us what went wrong in the \"Notes\" field.", - "fr": "Veuillez nous expliquer le problème dans le champ \"Notes\"." - }, - "Submit debug logs to Tchap support team": { - "en": "Submit debug logs to Tchap support team", - "fr": "Envoyez les journaux de débogage à l'équipe support de Tchap", - "comment": "The title of BugReportDialog is unclear, specify it" - }, - "Just want to get your own logs, without sharing them with the Tchap team?": { - "en": "Just want to get your own logs, without sharing them with the Tchap team?", - "fr": "Vous voulez juste obtenir vos journaux sans les partager avec l'équipe Tchap ?" - }, - "Download my logs": { - "en": "Download my logs", - "fr": "Obtenir mes journaux" - }, - "If you've submitted a bug to the Tchap team (via support or GitHub), debug logs can help us track down the problem.": { - "en": "If you've submitted a bug to the Tchap team (via support or GitHub), debug logs can help us track down the problem.", - "fr": "Si vous avez signalé une anomalie à l'équipe Tchap (via le support ou GitHub), les journaux de débogage peuvent nous aider à cibler le problème." - }, "Allow external users to join this room": { "en": "Allow external users to join this room", "fr": "Autoriser les externes à rejoindre ce salon" }, - "This action is irreversible.": { - "en": "This action is irreversible.", - "fr": "Cette action est irréversible." + "An email has been sent to you. Click on the link it contains, click below.": { + "en": "An email has been sent to you. Its title is : \"Renew your Tchap account\" Once you’ve followed the link it contains, click on the button \"I renewed my account\".", + "fr": "Un email vous a été envoyé pour renouveler votre compte. Il est intitulé : \"Renouvelez votre compte Tchap\". Une fois que vous aurez suivi le lien qu'il contient, cliquez sur le bouton \"J’ai renouvelé mon compte\"." }, "Are you sure you want to allow the externals to join this room ?": { "en": "Are you sure you want to allow the externals to join this room ?", "fr": "Voulez-vous vraiment autoriser l’accès aux externes à ce salon ?" }, - "Create Room": { - "en": "Create New Room", - "fr": "Créer un nouveau salon" - }, - "Your last three login attempts have failed. Please try again in a few minutes.": { - "en": "Your last three login attempts have failed. Please try again in a few minutes.", - "fr": "Vos trois dernières tentatives de connexion ont échoué. Veuillez réessayer dans quelques minutes." - }, - "Your password must include:": { - "en": "Your password must include:", - "fr": "Votre mot de passe doit comporter :" + "Are you sure you want to sign out of %(count)s sessions?": { + "one": { + "en": "Are you sure you want to sign out of %(count)s device?", + "fr": "Voulez-vous vraiment déconnecter %(count)s appareil ?" + }, + "other": { + "en": "Are you sure you want to sign out of %(count)s devices?", + "fr": "Voulez-vous vraiment déconnecter %(count)s de vos appareils ?" + } }, - "a minimum of %(number)s characters": { - "en": "a minimum of %(number)s characters", - "fr": "%(number)s caractères au minimum" - }, - "a number": { - "en": "a number", - "fr": "un chiffre" + "Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": { + "en": "Automatically back up your messages and retrieve them at any time using the Recovery Code.", + "fr": "Sauvegardez automatiquement vos messages et récupérez-les à tout moment à l’aide du Code de Récupération." }, - "a symbol": { - "en": "a symbol", - "fr": "un caractère spécial" + "Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": { + "en": "Please try again with your recovery code.", + "fr": "Merci d'essayer à nouveau avec votre code de récupération." }, - "a lowercase letter": { - "en": "a lowercase letter", - "fr": "une lettre minuscule" + "Ban from %(roomName)s": { + "en": "Ban from %(roomName)s", + "fr": "Interdire l’accès à %(roomName)s (définitif)" }, - "an uppercase letter": { - "en": "an uppercase letter", - "fr": "une lettre majuscule" + "Ban from room": { + "en": "Ban from room", + "fr": "Interdire l’accès au salon (définitif)" }, - "External users allowed": { - "en": "external users allowed", - "fr": "ouvert aux externes" + "Ban from space": { + "en": "Ban from space", + "fr": "Interdire l’accès à l'espace (définitif)" }, - "Save your Tchap Keys (encryption keys)": { - "en": "Save your Tchap Keys (encryption keys)", - "fr": "Sauvegardez vos Clés Tchap (clés de chiffrement)" + "Ban them from everything I'm able to": { + "en": "Ban them from everything I'm able to", + "fr": "Interdire l’accès partout où j’ai le droit de le faire (définitif)" }, - "If you do not have another connected device, we advise you to save your keys in a file on your device.": { - "en": "If you do not have another connected device, we advise you to save your keys in a file on your device.", - "fr": "Si vous n'avez pas d'autre appareil connecté, il est conseillé de sauvegarder vos clés sous forme de fichier sur votre appareil." + "Ban them from specific things I'm able to": { + "en": "Ban them from specific things I'm able to", + "fr": "Interdire l’accès à certains endroits où j’ai le droit de le faire (définitif)" }, - "This file will be protected by a password, which will be asked next time you log in, when you will import the keys to unlock your messages.": { - "en": "This file will be protected by a password, which will be asked next time you log in, when you will import the keys to unlock your messages.", - "fr": "Ce fichier sera protégé par un mot de passe, qui vous sera demandé à votre prochaine connexion, lorsque vous importerez les clés pour déverrouiller vos messages." + "Banned users": { + "en": "Banned users", + "fr": "Membres bannis" }, - "Warning: these keys cannot be used to unlock the messages received after backup": { - "en": "Warning: these keys cannot be used to unlock the messages received after backup", - "fr": "Attention: ces clés ne pourront pas être utilisées pour déverrouiller les messages reçus après la sauvegarde" + "Chat": { + "en": "New direct message", + "fr": "Nouveau message direct" }, - "Create your Tchap Key password (minimum 8 characters)": { - "en": "Create your Tchap Key password (minimum 8 characters)", - "fr": "Créez votre mot de passe Clé Tchap (minimum 8 caractères)" + "Check your email to continue": { + "en": "Check your email to continue", + "fr": "Vérifiez vos mails avant de continuer" }, - "Passphrase must be at least 8 character long": { - "en": "Passphrase must be at least 8 character long", - "fr": "Le mot de passe doit minimum faire 8 caractères" + "Clear cross-signing keys": { + "en": "Reset Recovery Code", + "fr": "Réinitialiser les clés de signature croisée" }, - "Your Tchap Key password": { - "en": "Your Tchap Key password", - "fr": "Votre mot de passe Clés Tchap" + "Confirm the emoji below are displayed on both devices, in the same order:": { + "en": "Confirm the emoji below are displayed on both devices, in the same order:", + "fr": "Confirmez si les objets sont les mêmes sur vos 2 appareils." }, "Confirm your Tchap Key password": { "en": "Confirm your Tchap Key password", "fr": "Confirmer votre mot de passe Clés Tchap" }, - "Tchap Keys saved!": { - "en": "Tchap Keys saved!", - "fr": "Clés Tchap sauvegardées !" - }, - "Your Tchap Keys (encryption keys) have been successful saved in the tchap-keys.txt file. You can import them when you login again to unlock your messages (find out more).": { - "en": "Your Tchap Keys (encryption keys) have been successful saved in the tchap-keys.txt file. You can import them when you login again to unlock your messages (find out more).", - "fr": "Vos Clés Tchap (clés de chiffrement) ont été sauvegardées avec succès dans le fichier tchap-keys.txt. Vous pourrez les importer à votre prochaine connexion pour déverrouiller vos messages (en savoir plus)." - }, - "Save your Tchap Keys before logging out": { - "en": "Save your Tchap Keys before logging out", - "fr": "Sauvegardez vos Clés Tchap avant de vous déconnecter" - }, - "Without your Tchap Keys, you won't be able to read your messages at your next login because they will be locked. It's a Tchap safety measure.": { - "en": "Without your Tchap Keys, you won't be able to read your messages at your next login because they will be locked. It's a Tchap safety measure.", - "fr": "Sans vos Clés Tchap, vous ne pourrez pas lire vos messages à votre prochaine connexion parce qu'ils seront verrouillés. C'est une mesure de sécurité Tchap." - }, - "Can you currently read your messages on another device? You can disconnect. This other device automatically backs up your Tchat Keys and messages.": { - "en": "Can you currently read your messages on another device? You can disconnect. This other device automatically backs up your Tchat Keys and messages.", - "fr": "Vous pouvez actuellement lire vos messages sur un autre appareil ? Vous pouvez vous déconnecter. Cet autre appareil sauvegarde automatiquement vos Clés Tchap et tous vos messages." - }, - "You don't have another device connected to Tchap? Back up your Tchap Keys. These keys will unlock current messages, but not those received after saving.": { - "en": "You don't have another device connected to Tchap? Back up your Tchap Keys. These keys will unlock current messages, but not those received after saving.", - "fr": "Vous n'avez pas d'autre appareil connecté à Tchap ? Sauvegardez vos Clés Tchap. Ces clés déverrouilleront les messages actuels, mais pas ceux reçus entre la sauvegarde et votre prochaine connexion." - }, - "Sign me out": { - "en": "Sign me out", - "fr": "Me déconnecter" - }, - "Save my keys": { - "en": "Save my Tchap keys", - "fr": "Sauvegarder mes clés Tchap" - }, - "One of your devices wants to check your Tchap Keys to unlock your messages.": { - "en": "One of your devices wants to check your Tchap Keys to unlock your messages.", - "fr": "L'un de vos appareils demande à partager vos Clés Tchap pour déverrouiller vos messages." - }, - "Please also confirm the emojis on the other device.": { - "en": "Please also confirm the emojis on the other device.", - "fr": "Confirmez si les objets sont les mêmes sur vos 2 appareils." - }, - "Incoming Verification Request": { - "en": "Incoming Verification Request", - "fr": "Partage de vos Clés Tchap" - }, - "The sharing of your Tchap Keys has succeeded. Your messages will be unlocked.": { - "en": "The sharing of your Tchap Keys has succeeded. Your messages will be unlocked.", - "fr": "Le partage de vos Clés Tchap a réussi. Vos messages vont être déverrouillés au fur et à mesure." - }, - "Finish": { - "en": "Finish", - "fr": "Terminer" - }, - "Please accept the sharing of your Tchap Keys on the other device.": { - "en": "Please accept the sharing of your Tchap Keys on the other device.", - "fr": "Merci d'accepter la demande de partage de vos Clés Tchap pour déverrouiller vos messages." - }, - "Confirm the emoji below are displayed on both devices, in the same order:": { - "en": "Confirm the emoji below are displayed on both devices, in the same order:", - "fr": "Confirmez si les objets sont les mêmes sur vos 2 appareils." - }, - "Please confirm the objects on the other device.": { - "en": "Please confirm the objects on the other device.", - "fr": "Veuillez confirmer les objets sur l'autre appareil." + "Congratulations, your account has been renewed": { + "en": "Congratulations, your account has been renewed", + "fr": "Félicitations, votre compte a été renouvelé" }, - "Please confirm the objects on the other device (loading).": { - "en": "Please confirm the objects on the other device (loading).", - "fr": "Veuillez confirmer les objets sur l'autre appareil (en cours)." + "Connect this session to Key Backup": { + "en": "Verify this device", + "fr": "Vérifier cet appareil" }, - "The validity period of your account has expired": { - "en": "Your Tchap account has expired", - "fr": "Votre compte Tchap a expiré" + "Connectivity to the server has been lost": { + "en": "Tchap is not available at the moment. View the status of services.", + "fr": "La connexion à Tchap n'est pas possible pour le moment. Voir l'état du service" }, - "An email has been sent to you. Click on the link it contains, click below.": { - "en": "An email has been sent to you. Its title is : \"Renew your Tchap account\" Once you’ve followed the link it contains, click on the button \"I renewed my account\".", - "fr": "Un email vous a été envoyé pour renouveler votre compte. Il est intitulé : \"Renouvelez votre compte Tchap\". Une fois que vous aurez suivi le lien qu'il contient, cliquez sur le bouton \"J’ai renouvelé mon compte\"." + "Contact us": { + "en": "Contact us", + "fr": "Contactez-nous" }, - "I renewed the validity of my account": { - "en": "I renewed my account", - "fr": "J’ai renouvelé mon compte" + "Content blocked": { + "en": "Content blocked", + "fr": "Contenu bloqué" }, - "Request a renewal email": { - "en": "Request a renewal email", - "fr": "Demander l’envoi d’un nouvel email" + "Conçue et gérée par l'Administration française": { + "en": "Designed and managed by the French Administration, for agents of the three public functions,
to communicate easily with high security standards. Used by over 400,000 public officials.", + "fr": "Conçue et gérée par l'Administration française, pour les agents des trois fonctions publiques,
pour communiquer facilement en toute sécurité. Utilisée par plus de 400 000 agents publics." }, - "A new email has been sent": { - "en": "A new email has been sent", - "fr": "Un nouvel email de renouvellement vous a été adressé" + "Create Room": { + "en": "Create New Room", + "fr": "Créer un nouveau salon" }, - "Wait for at least %(wait)s seconds between two emails": { - "en": "Wait for at least %(wait)s seconds between two emails", - "fr": "Attendez au moins %(wait)s secondes entre l'envoi de deux mails" + "Create a room in this space": { + "en": "Create a room in this space", + "fr": "Créer un salon dans cet espace" }, - "The email was not sent sucessfully, please retry in a moment": { - "en": "The email was not sent sucessfully, please retry", - "fr": "L'email de renouvellement n'a pas pu être envoyé, veuillez réessayer" + "Create your Tchap Key password (minimum 8 characters)": { + "en": "Create your Tchap Key password (minimum 8 characters)", + "fr": "Créez votre mot de passe Clé Tchap (minimum 8 caractères)" }, - "Your account is still expired, please follow the link in the email you have received to renew it": { - "en": "Your account is still expired, please follow the link in the email you should have received to renew it", - "fr": "Votre compte est toujours expiré, merci de cliquer sur le lien reçu dans le mail de renouvellement" + "Cross-signing is not set up.": { + "en": "Cross-signing is not active.", + "fr": "La signature croisée n’est pas active" }, - "Congratulations, your account has been renewed": { - "en": "Congratulations, your account has been renewed", - "fr": "Félicitations, votre compte a été renouvelé" + "Cross-signing is ready but keys are not backed up.": { + "en": "Cross-signing is ready but not the secure backup.", + "fr": "La signature croisée est activée mais pas la sauvegarde automatique des messages." }, - "The app will reload now": { - "en": "You can refresh the page to continue your conversations", - "fr": "Vous pouvez dorénavant rafraîchir la page pour continuer vos conversations" + "Cross-signing is ready for use.": { + "en": "Cross-signing is activated on this device.", + "fr": "La signature croisée est activée sur cet appareil." }, - "Reload the app": { - "en": "Reload page", - "fr": "Rafraîchir la page" + "Current session": { + "en": "This device", + "fr": "Cet appareil" }, "Decryption fail: Please open Tchap on an other connected device to allow key sharing.": { "en": "Decryption fail: Please open Tchap on an other connected device to allow key sharing.", "fr": "Message verrouillé par sécurité. Récupérez vos clés Tchap pour déverrouiller vos messages." }, - "Re-send a request to your other devices": { - "en": "Re-send a request to your other devices", - "fr": "Renvoyer une demande à un autre appareil" - }, - "Request in progress...": { - "en": "Request in progress...", - "fr": "Demande en cours..." - }, - "Tchap Key share requests are sent to your other devices automatically. If you rejected or dismissed the key share request on your other devices, click here to request the Tchap Keys again.": { - "en": "Tchap Key share requests are sent to your other devices automatically. If you rejected or dismissed the key share request on your other devices, click here to request the Tchap Keys again.", - "fr": "Les demandes de partage de vos Clés Tchap sont automatiquement envoyées à vos autres appareils. Si vous rejetez ou supprimez la demande de partage de clé sur vos autres appareils, cliquez ici pour redemander vos Clés Tchap." - }, - "If your other devices do not have the key for this message, you will not be able to decrypt them.": { - "en": "If your other devices do not have the key for this message, you will not be able to decrypt them.", - "fr": "Si vos autres appareils n'ont pas la clé pour ce message, vous ne pourrez pas le déchiffrer." + "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": { + "en": "Resetting your Recovery Code is permanent. Please use this procedure only if you have lost all devices that allow you to perform cross-signing.", + "fr": "Réinitialiser les clés de signature croisée est permanent. Utiliser cette procédure uniquement si vous avez perdu tous les appareils vous permettant d’effectuer une signature croisée." }, - "Your key share request has been sent - please check your other devices for key share requests.": { - "en": "Your key share request has been sent - please check your other devices for key share requests.", - "fr": "Votre demande de partage de clé a été envoyée - vérifiez les demandes de partage de clé sur vos autres appareils." + "Destroy cross-signing keys?": { + "en": "Reset cross-signing keys?", + "fr": "Réinitialiser les clés de signature croisée ?" }, - "Import from saved file": { - "en": "Import from saved file", - "fr": "Importer depuis le fichier sauvegardé" + "Direct Messages": { + "en": "Direct Messages", + "fr": "Messages directs" }, - "Lock my messages and disconnect me from all my devices (in case your account is hacked or a device loss)": { - "en": "Lock my messages and disconnect me from all my devices (in case your account is hacked or a device loss)", - "fr": "Verrouiller mes messages et me déconnecter de tous mes appareils (en cas de piratage de votre compte ou perte d'un appareil)" + "Download the list of all this room's members, in a text file. Useful for adding them all to another room.": { + "en": "Download the list of all this room's members, in a text file. Useful for adding them all to another room.", + "fr": "Récupérer la liste des membres de ce salon, dans un fichier texte. Utile pour inviter toutes ces personnes à un autre salon." }, - "If you want to retain access to your chat history in encrypted rooms, set up Key Backup or export your message keys from one of your other devices before proceeding.": { - "en": "If you want to keep your messages, save your Tchap keys from one of your devices before proceeding. They will help to restore your messages", - "fr": "Si vous voulez garder un accès à vos messages, sauvegardez vos clés Tchap à partir de l’un de vos appareils avant de continuer. Elles vous permettront de déverrouiller vos messages" + "Email": { + "en": "Email", + "fr": "Adresse mail" }, - "Signing out your devices will delete the message encryption keys stored on them, making encrypted chat history unreadable.": { - "fr": "Nous allons vous déconnecter de vos appareils afin de verrouiller les messages qu'ils contiennent. Cette option est utile si vous pensez que votre compte a été piraté ou si vous avez perdu un de vos appareils.", - "en": "We will log you out from your devices to lock the messages stored on them. This option is usefull if you think your account has been hacked or a device has been lost." + "Email (optional)": { + "en": "Email (optional)", + "fr": "Adresse mail (facultatif)" }, - "%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use %(brand)s Desktop for encrypted messages to appear in search results.": { - "fr": "Actuellement %(brand)s ne supporte pas la recherche dans les messages.", - "en": "Currently %(brand)s does not support searching into messages." + "Email Address": { + "en": "Email Address", + "fr": "Adresse mail" }, - "Export E2E room keys": { - "en": "Save your Tchap keys", - "fr": "Sauvegardez vos clés Tchap" + "Email address": { + "en": "Email address", + "fr": "Adresse mail" }, - "Import E2E room keys": { - "en": "Import your Tchap keys from the downloaded file", - "fr": "Importez vos clés Tchap depuis le fichier sauvegardé" + "Email addresses": { + "en": "Email addresses", + "fr": "Adresses mail" }, - "Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": { - "en": "Automatically back up your messages and retrieve them at any time using the Recovery Code.", - "fr": "Sauvegardez automatiquement vos messages et récupérez-les à tout moment à l’aide du Code de Récupération." + "Enter Security Key": { + "en": "Enter Recovery Code", + "fr": "Saisir le Code de Récupération" }, - "Thread": { - "en": "Thread", - "fr": "Discussion" + "Enter your Security Phrase or to continue.": { + "en": "Enter your Security Phrase or to continue.", + "fr": "Saisissez votre phrase de sécurité ou pour continuer." }, - "Join public room": { - "en": "Join a public room", + "Explore public rooms": { + "en": "Explore public rooms", "fr": "Rejoindre un forum" }, "Explore rooms": { "en": "Explore space rooms", "fr": "Explorer les salons" }, - "Explore public rooms": { - "en": "Explore public rooms", - "fr": "Rejoindre un forum" + "Export E2E room keys": { + "en": "Save your Tchap keys", + "fr": "Sauvegardez vos clés Tchap" }, - "Start chat": { - "en": "New direct message", - "fr": "Nouveau message direct" + "Export room members": { + "en": "Export room members", + "fr": "Exporter les membres du salon" }, - "Start new chat": { - "en": "New direct message", - "fr": "Nouveau message direct" + "External members cannot be re-invited. If you need to give access to externals, you will have to create a new room": { + "en": "External members cannot be re-invited. If you need to give access to externals, you will have to create a new room.", + "fr": "Les membres externes ne pourront pas être réinvités. Si vous avez besoin de donner accès aux externes, il faudra créer un nouveau salon." }, - "Start a new chat": { - "en": "New direct message", - "fr": "Nouveau message direct" + "External users allowed": { + "en": "external users allowed", + "fr": "ouvert aux externes" }, - "Chat": { - "en": "New direct message", - "fr": "Nouveau message direct" + "Eye": { + "en": "Eye", + "fr": "OEil" }, - "Direct Messages": { - "en": "Direct Messages", - "fr": "Messages directs" + "Failed to join": { + "en": "Failed to join this room.", + "fr": "Impossible de rejoindre ce salon" }, - "Recently Direct Messaged": { - "en": "Recents chats", - "fr": "Messages directs récents" + "Fetching keys from server…": { + "en": "Fetching messages from server…", + "fr": "Récupération des messages depuis le serveur…" }, - "Recent Conversations": { - "en": "Recents chats", - "fr": "Messages directs récents" + "Finish": { + "en": "Finish", + "fr": "Terminer" }, - "Secure Backup": { - "en": "Secure Backup", - "fr": "Sauvegarde automatique des messages" + "For best security, verify your sessions and sign out from any session that you don't recognize or use anymore.": { + "en": "Verify your devices to unlock your messages", + "fr": "Vérifier tous vos appareils pour déverrouiller tous vos messages" }, - "You can also set up Secure Backup & manage your keys in Settings.": { - "en": "You can also set up Secure Backup & manage your keys in Settings.", - "fr": "Vous pouvez aussi configurer la sauvegarde automatique des messages et gérer vos clés depuis les paramètres." + "Forgotten or lost all recovery methods? Reset all": { + "en": "You have lost your Recovery Code? Create a new code", + "fr": "Vous avez perdu votre Code de Récupération ? Générer un nouveau code" + }, + "Forum room": { + "en": "Public room", + "fr": "Forum" + }, + "Frequently Asked Questions (FAQ)": { + "en": "Frequently Asked Questions (FAQ)", + "fr": "Foire Aux Questions (FAQ)" + }, + "Generate a Security Key": { + "en": "Generate a Recovery Code", + "fr": "Générer un Code de Récupération" }, - "Set up Secure Backup": { - "en": "Activate message Secure Backup", - "fr": "Activer la sauvegarde automatique des messages" + "Generate a new code": { + "en": "Generate a new code", + "fr": "Générer un nouveau code" }, - "Email": { - "en": "Email", - "fr": "Adresse mail" + "Group all your favourite rooms and people in one place.": { + "en": "Group all your favourite rooms in one place.", + "fr": "Regroupe tous vos salons favoris au même endroit." }, - "Invalid Email Address": { - "en": "Invalid Email Address", - "fr": "Adresse mail non valide" + "Group all your people in one place.": { + "en": "Group all your direct message room in one place.", + "fr": "Regroupe tous vos salons de message directs au même endroit." }, - "Email address": { - "en": "Email address", - "fr": "Adresse mail" + "I don't want my encrypted messages": { + "en": "Log out still", + "fr": "Se déconnecter quand-même" }, - "Email Address": { - "en": "Email Address", - "fr": "Adresse mail" + "I renewed the validity of my account": { + "en": "I renewed my account", + "fr": "J’ai renouvelé mon compte" }, - "Email addresses": { - "en": "Email addresses", - "fr": "Adresses mail" + "I wrote down my code": { + "en": "I wrote down my code", + "fr": "J'ai noté mon code" }, - "Email (optional)": { - "en": "Email (optional)", - "fr": "Adresse mail (facultatif)" + "If you do not have another connected device, we advise you to save your keys in a file on your device.": { + "en": "If you do not have another connected device, we advise you to save your keys in a file on your device.", + "fr": "Si vous n'avez pas d'autre appareil connecté, il est conseillé de sauvegarder vos clés sous forme de fichier sur votre appareil." }, - "Add Email Address": { - "en": "Add Email Address", - "fr": "Ajouter une adresse mail" + "If you have any difficulties with using Tchap, please contact us by email at %(supportEmail)s": { + "en": "If you have any difficulties with using Tchap, please contact us by email at %(supportEmail)s", + "fr": "Si vous rencontrez des difficultés dans votre utilisation de Tchap, contactez-nous par email à %(supportEmail)s" }, - "Room members": { - "en": "Room members", - "fr": "Membres du salon" + "If you want to retain access to your chat history in encrypted rooms, set up Key Backup or export your message keys from one of your other devices before proceeding.": { + "en": "If you want to keep your messages, save your Tchap keys from one of your devices before proceeding. They will help to restore your messages", + "fr": "Si vous voulez garder un accès à vos messages, sauvegardez vos clés Tchap à partir de l’un de vos appareils avant de continuer. Elles vous permettront de déverrouiller vos messages" }, - "Banned users": { - "en": "Banned users", - "fr": "Membres bannis" + "If you've forgotten your Security Key you can ": { + "en": "If you've forgotten your Recovery Code you can ", + "fr": "Si vous avez oublié votre Code de Récupération, vous pouvez " }, - "Privileged Users": { - "en": "Privileged Users", - "fr": "Membres privilégiés" + "If you've forgotten your Security Phrase you can use your Security Key or set up new recovery options": { + "en": "If you've forgotten your Security Phrase you can use your Recovery Code or set up new recovery options", + "fr": "Si vous avez oublié votre phrase secrète vous pouvez utiliser votre Code de Récupération ou définir de nouvelles options de récupération" }, - "Muted Users": { - "en": "Muted Users", - "fr": "Membres en sourdine" + "If you've submitted a bug to the Tchap team (via support or GitHub), debug logs can help us track down the problem.": { + "en": "If you've submitted a bug to the Tchap team (via support or GitHub), debug logs can help us track down the problem.", + "fr": "Si vous avez signalé une anomalie à l'équipe Tchap (via le support ou GitHub), les journaux de débogage peuvent nous aider à cibler le problème." }, "Ignored users": { "en": "Ignored users", "fr": "Membres ignorés" }, - "Remove from room": { - "en": "Remove from room", - "fr": "Retirer du salon (réversible)" - }, - "Remove them from specific things I'm able to": { - "en": "Remove them from specific things I'm able to", - "fr": "Retirer de certains endroits où j’ai le droit de le faire (réversible)" - }, - "Remove them from everything I'm able to": { - "en": "Remove them from everything I'm able to", - "fr": "Retirer de partout où j’ai le droit de le faire (réversible)" - }, - "Remove users": { - "en": "Remove users", - "fr": "Retirer des utilisateurs (réversible)" - }, - "Remove, ban, or invite people to your active room, and make you leave": { - "en": "Remove, ban, or invite people to your active room, and make you leave", - "fr": "Retirer, interdire l'accès ou inviter des personnes dans votre salon actif et en partir" - }, - "Remove, ban, or invite people to this room, and make you leave": { - "en": "Remove, ban, or invite people to this room, and make you leave", - "fr": "Retirer, interdire l'accès ou inviter une personne dans ce salon et vous permettre de partir" + "Import E2E room keys": { + "en": "Import your Tchap keys from the downloaded file", + "fr": "Importez vos clés Tchap depuis le fichier sauvegardé" }, - "Remove from %(roomName)s": { - "en": "Remove from %(roomName)s", - "fr": "Retirer de %(roomName)s (réversible)" + "Incoming Verification Request": { + "en": "Incoming Verification Request", + "fr": "Partage de vos Clés Tchap" }, - "You need to be able to kick users to do that.": { - "en": "You need to be able to kick users to do that.", - "fr": "Vous devez avoir l’autorisation de retirer des utilisateurs pour faire ceci." + "Incorrect Security Phrase": { + "en": "Recovery code not recognized", + "fr": "Code de récupération non reconnu" }, - "Ban users": { - "en": "Ban users", - "fr": "Interdire aux utilisateurs l’accès au salon (définitif)" + "Invalid Email Address": { + "en": "Invalid Email Address", + "fr": "Adresse mail non valide" }, - "Ban them from specific things I'm able to": { - "en": "Ban them from specific things I'm able to", - "fr": "Interdire l’accès à certains endroits où j’ai le droit de le faire (définitif)" + "Invite someone using their name, email address, username (like ) or share this room.": { + "en": "Invite someone using their name, email or username (like ) or share this room. It is possible to invite multiple people by copy-pasting an email list separated by a comma (prenom1.nom1@beta.gouv.fr, prenom2.nom2@beta.gouv.fr, prenom3.nom3@beta.gouv.fr) or separated by a line break.", + "fr": "Invitez quelqu’un via son nom, mail ou pseudo (p. ex. ) ou partagez ce salon. Il est possible d'inviter en masse en copiant et collant une liste de mails séparés par une virgule (prenom1.nom1@beta.gouv.fr, prenom2.nom2@beta.gouv.fr, prenom3.nom3@beta.gouv.fr) ou séparés par un saut à la ligne." }, - "Ban them from everything I'm able to": { - "en": "Ban them from everything I'm able to", - "fr": "Interdire l’accès partout où j’ai le droit de le faire (définitif)" + "Invite someone using their name, email address, username (like ) or share this space.": { + "en": "Invite someone using their name, email address, username (like ) or share this space. It is possible to invite multiple people by copy-pasting an email list separated by a comma (prenom1.nom1@beta.gouv.fr, prenom2.nom2@beta.gouv.fr, prenom3.nom3@beta.gouv.fr) or separated by a line break.", + "fr": "Invitez quelqu’un grâce à son nom, adresse mail, nom d’utilisateur (tel que ) ou partagez cet espace. Il est possible d'inviter en masse en copiant et collant une liste de mails séparés par une virgule (prenom1.nom1@beta.gouv.fr, prenom2.nom2@beta.gouv.fr, prenom3.nom3@beta.gouv.fr) ou séparés par un saut à la ligne." }, - "Ban from %(roomName)s": { - "en": "Ban from %(roomName)s", - "fr": "Interdire l’accès à %(roomName)s (définitif)" + "Join public room": { + "en": "Join a public room", + "fr": "Rejoindre un forum" }, - "Ban from room": { - "en": "Ban from room", - "fr": "Interdire l’accès au salon (définitif)" + "Just want to get your own logs, without sharing them with the Tchap team?": { + "en": "Just want to get your own logs, without sharing them with the Tchap team?", + "fr": "Vous voulez juste obtenir vos journaux sans les partager avec l'équipe Tchap ?" }, - "Ban from space": { - "en": "Ban from space", - "fr": "Interdire l’accès à l'espace (définitif)" + "Keys restored": { + "en": "Messages restored", + "fr": "Messages récupérés" }, - "Group all your people in one place.": { - "en": "Group all your direct message room in one place.", - "fr": "Regroupe tous vos salons de message directs au même endroit." + "Known issues": { + "en": "Known issues", + "fr": "Problèmes connus" }, - "Group all your favourite rooms and people in one place.": { - "en": "Group all your favourite rooms in one place.", - "fr": "Regroupe tous vos salons favoris au même endroit." + "Lock my messages and disconnect me from all my devices (in case your account is hacked or a device loss)": { + "en": "Lock my messages and disconnect me from all my devices (in case your account is hacked or a device loss)", + "fr": "Verrouiller mes messages et me déconnecter de tous mes appareils (en cas de piratage de votre compte ou perte d'un appareil)" }, - "Spaces are ways to group rooms and people. Alongside the spaces you're in, you can use some pre-built ones too.": { - "en": "Spaces are ways to group rooms and direct messages.", - "fr": "Les espaces permettent de regrouper des salons et des messages directs." + "Muted Users": { + "en": "Muted Users", + "fr": "Membres en sourdine" }, - "Show all your rooms in Home, even if they're in a space.": { - "en": "Show all your rooms in Home", - "fr": "Affiche tous vos salons dans l’accueil" + "One of your devices wants to check your Tchap Keys to unlock your messages.": { + "en": "One of your devices wants to check your Tchap Keys to unlock your messages.", + "fr": "L'un de vos appareils demande à partager vos Clés Tchap pour déverrouiller vos messages." }, - "This groups your chats with members of this space. Turning this off will hide those chats from your view of %(spaceName)s.": { - "fr": "Cela rassemble vos messages directs avec les membres de cet espace. Le désactiver masquera ces salons de votre vue de %(spaceName)s.", - "en": "This groups your direct messages with members of this space. Turning this off will hide those rooms from your view of %(spaceName)s." + "Other sessions": { + "en": "Other devices", + "fr": "Autres appareils" }, - "Sign in instead": { - "en": "Sign in instead", - "fr": "ou connectez-vous" + "Other users may not trust it": { + "en": "You may not be able to recover your messages.", + "fr": "Vous risquez de ne pas pouvoir récupérer vos messages." }, - "Enter your email to reset password": { - "en": "Enter your email to reset password", - "fr": "Entrez votre adresse mail pour réinitialiser votre mot de passe" + "Passphrase must be at least 8 character long": { + "en": "Passphrase must be at least 8 character long", + "fr": "Le mot de passe doit minimum faire 8 caractères" }, - "Reset your password": { - "en": "Reset your password", - "fr": "Réinitialisez votre mot de passe" + "Please confirm the objects on the other device (loading).": { + "en": "Please confirm the objects on the other device (loading).", + "fr": "Veuillez confirmer les objets sur l'autre appareil (en cours)." }, - "Did not receive it?": { - "en": "Did not receive it?", - "fr": "Pas reçu ?" + "Please note this is not your recovery code for your automatic backup.": { + "en": "Please note this is not your Recovery Code for your automatic backup.", + "fr": "Attention ceci n’est pas votre Code de Récupération pour votre sauvegarde automatique." }, - "Wrong email address?": { - "en": "Wrong email address?", - "fr": "Mauvaise adresse mail ?" + "Please only proceed if you're sure you've lost all of your other devices and your Security Key.": { + "en": "Please only proceed if you're sure you've lost all of your other devices and your Recovery Code.", + "fr": "Veuillez ne continuer que si vous êtes certain d’avoir perdu tous vos autres appareils et votre Code de Récupération." }, - "Re-enter email address": { - "en": "Re-enter email address", - "fr": "Re-saisir l'adresse mail" + "Please tell us what went wrong in the \"Notes\" field.": { + "en": "Please tell us what went wrong in the \"Notes\" field.", + "fr": "Veuillez nous expliquer le problème dans le champ \"Notes\"." }, - "Check your email to continue": { - "en": "Check your email to continue", - "fr": "Vérifiez vos mails avant de continuer" + "Private discussions accessible to all users of this space and to external guests by invitation of an administrator.": { + "en": "Private discussions accessible to all users of this space and to external guests by invitation of an administrator.", + "fr": "Discussions privées accessibles à tous les membres de cet espace et aux utilisateurs externes sur invitation d'un administrateur." }, - "Verify your email to continue": { - "en": "Verify your email to continue", - "fr": "Vérifiez vos mails avant de continuer" + "Private discussions accessible to all users of this space.": { + "en": "Private discussions accessible to all users of this space.", + "fr": "Discussions privées accessibles à tous les membres de cet espace" }, - "We need to know it’s you before resetting your password.\n Click the link in the email we just sent to %(email)s": { - "en": "We need to know it’s you before resetting your password.\n Click the link in the email we just sent to %(email)s", - "fr": "Nous avons besoin de savoir que c’est vous avant de réinitialiser votre mot de passe.\n Cliquer sur le lien dans le mail que nous venons juste d’envoyer à %(email)s" + "Private room": { + "en": "Private room", + "fr": "Salon" }, - "Send email": { - "en": "Send email", - "fr": "Envoyer le mail" + "Private room open to external users": { + "en": "Private room open to external users", + "fr": "Salon ouvert aux externes" }, - "This is your recovery key": { - "fr": "Ce code vous permettra de toujours récupérer vos messages.", - "en": "This code will allow you to always restore your messages." + "Privileged Users": { + "en": "Privileged Users", + "fr": "Membres privilégiés" }, - "Warning: this is the only time this code will be displayed!": { - "fr": "Attention: c’est la seule fois que ce code sera affiché !", - "en": "Warning: this is the only time this code will be displayed!" + "Public discussion accessible to all users of this space or from a shared link.": { + "en": "Public discussion accessible to all users of this space or from a shared link.", + "fr": "Discussions publiques accessibles à tous les membres de cet espace ou depuis un lien de partage." }, - "Store your Security Key somewhere safe, like a password manager or a safe, as it's used to safeguard your encrypted data.": { - "fr": "Conservez-le dans un endroit sûr, comme votre gestionnaire de mot de passe ou un document protégé sur votre ordinateur. Vous aurez à le copier / coller pour récupérer vos messages, donc évitez la capture d’écran.", - "en": "Keep it in a safe place, such as your password manager or a protected document on your computer. You will need to copy/paste it to retrieve your messages, so avoid taking screenshots." + "Public room": { + "en": "Public room", + "fr": "Forum" }, - "I wrote down my code": { - "fr": "J'ai noté mon code", - "en": "I wrote down my code" + "Read the CGU": { + "en": "Read the CGU", + "fr": "Consultez les CGU" }, - "Safeguard against losing access to encrypted messages & data": { - "fr": "Activez votre Code de Récupération pour ne jamais perdre vos messages", - "en": "Activate your Recovery Code to never lose your messages" + "Read the FAQ": { + "en": "Read the FAQ", + "fr": "Consultez la FAQ" }, - "Security Key": { - "fr": "Code de Récupération", - "en": "Recovery Code" + "Read the Known Issues": { + "en": "Read the Known Issues", + "fr": "Consultez les problèmes connus" }, - "Verify with Security Key": { - "fr": "Vérifier avec un Code de Récupération", - "en": "Verify with Recovery Code" + "Read the Privacy Policy": { + "en": "Read the Privacy Policy", + "fr": "Lire la Politique de Confidentialité" }, - "Your new device is now verified. It has access to your encrypted messages, and other users will see it as trusted.": { - "fr": "Votre nouvel appareil est maintenant vérifié. Il a accès à vos messages chiffrés et les autres utilisateurs le verront comme fiable.", - "en": "Your new device is now verified. It has access to your encrypted messages, and other users will see it as trusted." + "Really reset verification keys?": { + "en": "Really reset Recovery Code?", + "fr": "Réinitialiser le Code de Récupération, c’est certain ?" }, - "I don't want my encrypted messages": { - "fr": "Se déconnecter quand-même", - "en": "Log out still" + "Receive push notifications on this session.": { + "en": "Receive push notifications on this device.", + "fr": "Recevoir les notifications push sur cet appareil" }, - "Start using Key Backup": { - "fr": "Utiliser la sauvegarde automatique", - "en": "Use automatic Backup" + "Recent Conversations": { + "en": "Recents chats", + "fr": "Messages directs récents" }, - "Use your Security Key to continue.": { - "fr": "Utilisez votre Code de Récupération pour continuer.", - "en": "Use your Recovery Code to continue." + "Recently Direct Messaged": { + "en": "Recents chats", + "fr": "Messages directs récents" }, - "Generate a Security Key": { - "fr": "Générer un Code de Récupération", - "en": "Generate a Recovery Code" + "Reload the app": { + "en": "Reload page", + "fr": "Rafraîchir la page" }, - "Use a secret phrase only you know, and optionally save a Security Key to use for backup.": { - "fr": "Utilisez une phrase secrète que vous êtes seul à connaître et enregistrez éventuellement un Code de Récupération à utiliser pour la sauvegarde.", - "en": "Use a secret phrase only you know, and optionally save a Recovery Code to use for backup." + "Remove from %(roomName)s": { + "en": "Remove from %(roomName)s", + "fr": "Retirer de %(roomName)s (réversible)" }, - "Save your Security Key": { - "fr": "Notez votre Code de Récupération", - "en": "Write down your Recovery Code" + "Remove from room": { + "en": "Remove from room", + "fr": "Retirer du salon (réversible)" }, - "This session has detected that your Security Phrase and key for Secure Messages have been removed.": { - "fr": "Cette session a détecté que votre phrase secrète et Code de Récupération pour les messages sécurisés ont été supprimés.", - "en": "This session has detected that your Security Phrase and code for Secure Messages have been removed." + "Remove them from everything I'm able to": { + "en": "Remove them from everything I'm able to", + "fr": "Retirer de partout où j’ai le droit de le faire (réversible)" }, - "A new Security Phrase and key for Secure Messages have been detected.": { - "fr": "Un nouveau Code de Récupération pour les messages sécurisés a été détecté.", - "en": "A new Recovery Code for Secure Messages has been detected." + "Remove them from specific things I'm able to": { + "en": "Remove them from specific things I'm able to", + "fr": "Retirer de certains endroits où j’ai le droit de le faire (réversible)" }, - "Make a copy of your Security Key": { - "fr": "Faire une copie de votre Code de Récupération", - "en": "Make a copy of your Recovery Code" + "Request a renewal email": { + "en": "Request a renewal email", + "fr": "Demander l’envoi d’un nouvel email" }, - "Secure your backup with a Security Phrase": { - "fr": "Protégez votre sauvegarde avec un Code de Récupération", - "en": "Secure your backup with a Recovery Code" + "Resetting your verification keys cannot be undone. After resetting, you won't have access to old encrypted messages, and any friends who have previously verified you will see security warnings until you re-verify with them.": { + "en": "Resetting your Recovery Code cannot be undone. After resetting, you will no longer have access to your previous locked messages.", + "fr": "La réinitialisation de votre Code de Récupération ne peut pas être annulée. Après la réinitialisation, vous n’aurez plus accès à vos anciens messages verrouillés." }, - "Your Security Key is in your Downloads folder.": { - "fr": "Votre Code de Récupération est dans le répertoire Téléchargements.", - "en": "Your Recovery Code is in your Downloads folder." + "Restore from Backup": { + "en": "Retrieve my messages", + "fr": "Récupérer mes messages" }, - "Your Security Key": { - "fr": "Votre Code de Récupération", - "en": "Your Recovery Code" + "Restoring keys from backup": { + "en": "Restoring messages from backup", + "fr": "Restauration des messages depuis la sauvegarde" }, - "Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": { - "fr": "Votre Code de Récupération est un filet de sécurité. Vous pouvez l’utiliser pour retrouver l’accès à vos messages chiffrés si vous oubliez votre phrase secrète.", - "en": "Your Recovery Code is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase." + "Room members": { + "en": "Room members", + "fr": "Membres du salon" }, - "Set up with a Security Key": { - "fr": "Configurer avec un Code de Récupération", - "en": "Set up with a Recovery Code" + "Safeguard against losing access to encrypted messages & data": { + "en": "Activate your Recovery Code to never lose your messages", + "fr": "Activez votre Code de Récupération pour ne jamais perdre vos messages" }, - "If you've forgotten your Security Key you can ": { - "fr": "Si vous avez oublié votre Code de Récupération, vous pouvez ", - "en": "If you've forgotten your Recovery Code you can " + "Save my keys": { + "en": "Save my Tchap keys", + "fr": "Sauvegarder mes clés Tchap" }, - "Access your secure message history and set up secure messaging by entering your Security Key.": { - "fr": "Accédez à votre historique de messages chiffrés et mettez en place la messagerie sécurisée en entrant votre Code de Récupération.", - "en": "Access your secure message history and set up secure messaging by entering your Recovery Code." + "Save your Security Key": { + "en": "Write down your Recovery Code", + "fr": "Notez votre Code de Récupération" }, - "Enter Security Key": { - "fr": "Saisir le Code de Récupération", - "en": "Enter Recovery Code" + "Save your Tchap Keys (encryption keys)": { + "en": "Save your Tchap Keys (encryption keys)", + "fr": "Sauvegardez vos Clés Tchap (clés de chiffrement)" }, - "If you've forgotten your Security Phrase you can use your Security Key or set up new recovery options": { - "fr": "Si vous avez oublié votre phrase secrète vous pouvez utiliser votre Code de Récupération ou définir de nouvelles options de récupération", - "en": "If you've forgotten your Security Phrase you can use your Recovery Code or set up new recovery options" + "Scan unavailable": { + "en": "Scan unavailable", + "fr": "Scan unavailable" }, - "Incorrect Security Phrase": { - "fr": "Code de récupération non reconnu", - "en": "Recovery code not recognized" + "Scanning": { + "en": "Scanning", + "fr": "Scanning" }, - "Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": { - "fr": "Merci d'essayer à nouveau avec votre code de récupération.", - "en": "Please try again with your recovery code." + "Secure Backup": { + "comment": "move this to common|secure_backup, after upgrade to 1.11.46", + "en": "Automatic Backup of Messages", + "fr": "Sauvegarde automatique des messages" }, - "Verify with Security Key or Phrase": { - "fr": "Vérifier avec un Code de Récupération ou une phrase", - "en": "Verify with Recovery Code or Phrase" + "Secure Backup successful": { + "en": "Secure backup successfully enabled.", + "fr": "Sauvegarde automatique activée avec succès" }, - "

The Tchap team is working on the deployment of a new feature to prevent encryption key loss.

You can access it in the section :

Security and privacy > Secure Backup

": { - "fr": "

Cet appareil n'est pas vérifié.

Pour que cet appareil soit toujours vérifié et que vous puissiez toujours récupérer vos messages, activez la Sauvegarde Automatique des messages.

", - "en": "

This device is not verified.

To ensure this device is always verified and you can always retrieve your messages, turn on Automatic Message Backup

" + "Security Key": { + "en": "Recovery Code", + "fr": "Code de Récupération" }, - "Enter your Security Phrase or to continue.": { - "fr": "Saisissez votre phrase de sécurité ou pour continuer.", - "en": "Enter your Security Phrase or to continue." + "Send email": { + "en": "Send email", + "fr": "Envoyer le mail" }, - "We'll generate a Security Key for you to store somewhere safe, like a password manager or a safe.": { - "fr": "Nous génèrerons votre Code de Récupération unique que vous devrez stocker dans un endroit sûr, comme un gestionnaire de mots de passe ou un coffre.", - "en": "We'll generate your unique Recovery Code for you to store somewhere safe, like a password manager or a safe." + "Sent messages will be stored until your connection has returned.": { + "en": "Messages will be sent when your connection returns.", + "fr": "Les messages seront envoyés automatiquement dès que la connexion sera rétablie." }, - "Invite someone using their name, email address, username (like ) or share this room.": { - "fr": "Invitez quelqu’un via son nom, mail ou pseudo (p. ex. ) ou partagez ce salon. Il est possible d'inviter en masse en copiant et collant une liste de mails séparés par une virgule (prenom1.nom1@beta.gouv.fr, prenom2.nom2@beta.gouv.fr, prenom3.nom3@beta.gouv.fr) ou séparés par un saut à la ligne.", - "en": "Invite someone using their name, email or username (like ) or share this room. It is possible to invite multiple people by copy-pasting an email list separated by a comma (prenom1.nom1@beta.gouv.fr, prenom2.nom2@beta.gouv.fr, prenom3.nom3@beta.gouv.fr) or separated by a line break." + "Server may be unavailable, overloaded, or you hit a bug.": { + "en": "Tchap is not available at the moment (err:04). View the status of services: https://status.tchap.numerique.gouv.fr", + "fr": "La connexion à Tchap n'est pas possible pour le moment (err:04). Voir l'état du service: https://status.tchap.numerique.gouv.fr" }, - "Invite someone using their name, email address, username (like ) or share this space.": { - "fr": "Invitez quelqu’un grâce à son nom, adresse mail, nom d’utilisateur (tel que ) ou partagez cet espace. Il est possible d'inviter en masse en copiant et collant une liste de mails séparés par une virgule (prenom1.nom1@beta.gouv.fr, prenom2.nom2@beta.gouv.fr, prenom3.nom3@beta.gouv.fr) ou séparés par un saut à la ligne.", - "en": "Invite someone using their name, email address, username (like ) or share this space. It is possible to invite multiple people by copy-pasting an email list separated by a comma (prenom1.nom1@beta.gouv.fr, prenom2.nom2@beta.gouv.fr, prenom3.nom3@beta.gouv.fr) or separated by a line break." + "Server unavailable, overloaded, or something else went wrong.": { + "en": "Tchap is not available at the moment (err:03). View the status of services: https://status.tchap.numerique.gouv.fr", + "fr": "La connexion à Tchap n'est pas possible pour le moment (err:03). Voir l'état du service: https://status.tchap.numerique.gouv.fr" }, - "User is already in the room": { - "fr": "Cette personne est déjà dans le salon.", - "en": "User is already in the room." + "Sessions": { + "en": "My devices", + "fr": "Mes appareils" }, "Set up": { - "fr": "Activer", - "en": "Activate" + "en": "Activate", + "fr": "Activer" }, - "Connect this session to Key Backup": { - "fr": "Vérifier cet appareil", - "en": "Verify this device" - }, - "Forgotten or lost all recovery methods? Reset all": { - "fr": "Vous avez perdu votre Code de Récupération ? Générer un nouveau code", - "en": "You have lost your Recovery Code? Create a new code" - }, - "Unable to verify this device": { - "fr": "Vous vous connectez à un nouvel appareil", - "en": "You are logging into a new device" + "Set up Secure Backup": { + "en": "Activate message Secure Backup", + "fr": "Activer la sauvegarde automatique des messages" }, - "Reset your keys to prevent future decryption errors": { - "fr": "Activez la sauvegarde automatique des messages", - "en": "Enable automatic secure backup" + "Setting up keys": { + "en": "Setting up your Recovery Code", + "fr": "Configuration du Code de Récupération" }, - "You will not be able to access old undecryptable messages, but resetting your keys will allow you to receive new messages.": { - "fr": "Pour éviter la perte de vos messages, vous pouvez désormais activer cette nouvelle fonctionnalité Tchap dans les paramètres de sécurité", - "en": "To prevent the loss of your messages, you can now activate this new Tchap feature in the security settings" + "Show all your rooms in Home, even if they're in a space.": { + "en": "Show all your rooms in Home", + "fr": "Affiche tous vos salons dans l’accueil" }, - "Resend key requests": { - "fr": "Renvoyer une demande", - "en": "Resend key requests" + "Sign out of %(count)s sessions": { + "one": { + "en": "Sign out of %(count)s device", + "fr": "Déconnecter %(count)s appareil" + }, + "other": { + "en": "Sign out of %(count)s devices", + "fr": "Déconnecter %(count)s appareils" + } }, - "Open another device to load encrypted messages": { - "fr": "Utiliser un autre appareil pour déverrouiller vos messages.", - "en": "Use another device to unlock your messages." + "Sign out of all other sessions (%(otherSessionsCount)s)": { + "en": "Sign out of all other devices (%(otherSessionsCount)s)", + "fr": "Déconnecter tous les autres appareils (%(otherSessionsCount)s)" }, - "Or if that doesn't work, please follow these steps.": { - "fr": "Ou si cela ne fonctionne pas, veuillez suivre ces étapes.", - "en": "Or if that doesn't work, please follow these steps." + "Sign out of this session": { + "en": "Sign out of this device", + "fr": "Se déconnecter de cet appareil" }, - "Unable to decrypt message": { - "fr": "En attente de ce message. Ceci pourrait prendre un moment.", - "en": "Waiting for this message. This could take a while." + "Signing out your devices will delete the message encryption keys stored on them, making encrypted chat history unreadable.": { + "en": "We will log you out from your devices to lock the messages stored on them. This option is usefull if you think your account has been hacked or a device has been lost.", + "fr": "Nous allons vous déconnecter de vos appareils afin de verrouiller les messages qu'ils contiennent. Cette option est utile si vous pensez que votre compte a été piraté ou si vous avez perdu un de vos appareils." }, - "Waiting for this message. This could take a while. Find out more": { - "fr": "En attente de ce message. Ceci pourrait prendre un moment. En savoir plus", - "en": "Waiting for this message. This could take a while. Find out more" + "Spaces are ways to group rooms and people. Alongside the spaces you're in, you can use some pre-built ones too.": { + "en": "Spaces are ways to group rooms and direct messages.", + "fr": "Les espaces permettent de regrouper des salons et des messages directs." }, - "Decrypting messages…": { - "fr": "Déverrouillage des messages…", - "end": "Unlocking messages…" + "Start using Key Backup": { + "en": "Use automatic Backup", + "fr": "Utiliser la sauvegarde automatique" }, - "Please wait as we try to decrypt your messages. This may take a few moments.": { - "fr": "Veuillez patienter pendant que nous essayons de déverrouiller vos messages. Cela peut prendre un peu de temps.", - "en": "Please wait as we try to unlock your messages. This may take a few moments." + "Store your Security Key somewhere safe, like a password manager or a safe, as it's used to safeguard your encrypted data.": { + "en": "Keep it in a safe place, such as your password manager or a protected document on your computer. You will need to copy/paste it to retrieve your messages, so avoid taking screenshots.", + "fr": "Conservez-le dans un endroit sûr, comme votre gestionnaire de mot de passe ou un document protégé sur votre ordinateur. Vous aurez à le copier / coller pour récupérer vos messages, donc évitez la capture d’écran." }, - "Some messages could not be decrypted": { - "fr": "Certains messages n’ont pas pu être déverrouillés", - "en": "Some messages could not be unlocked" + "Submit debug logs to Tchap support team": { + "comment": "The title of BugReportDialog is unclear, specify it", + "en": "Submit debug logs to Tchap support team", + "fr": "Envoyez les journaux de débogage à l'équipe support de Tchap" }, - "Unfortunately, there are no other verified devices to request decryption keys from. Signing in and verifying other devices may help avoid this situation in the future.": { - "fr": "Malheureusement, il n’y a aucun autre appareil vérifié qui puisse déverrouiller vos messages. La connexion et la vérification depuis d’autres appareils pourraient éviter ce genre de souci à l’avenir.", - "en": "Unfortunately, there are no other verified devices to unlock your messages. Signing in and verifying other devices may help avoid this situation in the future." + "Successfully restored %(sessionCount)s keys": { + "en": "%(sessionCount)s messages have been successfully restored.", + "fr": "%(sessionCount)s messages ont été récupérés avec succès." }, - "These keys only apply to the current session.": { - "fr": "Ces clés ne concernent que la session en cours.", - "en": "These keys only apply to the current session." + "Tchap Keys saved!": { + "en": "Tchap Keys saved!", + "fr": "Clés Tchap sauvegardées !" }, - "Please note this is not your recovery code for your automatic backup.": { - "fr": "Attention ceci n’est pas votre Code de Récupération pour votre sauvegarde automatique.", - "en": "Please note this is not your Recovery Code for your automatic backup." + "Tchap is not available at the moment %(errCode)s. View the status of services.": { + "en": "Tchap is not available at the moment %(errCode)s. View the status of services.", + "fr": "La connexion à Tchap n'est pas possible pour le moment %(errCode)s. Voir l'état du service" }, "Tchap keys": { - "fr": "Clés Tchap", - "en": "Tchap keys" - }, - "Tchap keys:": { - "fr": "Clés Tchap :", - "en": "Tchap keys:" + "en": "Tchap keys", + "fr": "Clés Tchap" }, "That email is not allowed on Tchap": { - "fr": "Votre adresse mail n'est pas autorisée sur Tchap. Demandez l'accès à Tchap pour votre administration via ce formulaire", - "en": "Your email adress is not allowed on Tchap. Make an autorization request here" + "en": "Your email adress is not allowed on Tchap. Make an autorization request here", + "fr": "Votre adresse mail n'est pas autorisée sur Tchap. Demandez l'accès à Tchap pour votre administration via ce formulaire" }, - "Generate a new code": { - "fr": "Générer un nouveau code", - "en": "Generate a new code" + "The app will reload now": { + "en": "You can refresh the page to continue your conversations", + "fr": "Vous pouvez dorénavant rafraîchir la page pour continuer vos conversations" }, - "Failed to join": { - "fr": "Impossible de rejoindre ce salon", - "en": "Failed to join this room." + "The email was not sent sucessfully, please retry in a moment": { + "en": "The email was not sent sucessfully, please retry", + "fr": "L'email de renouvellement n'a pas pu être envoyé, veuillez réessayer" }, - "Access possible only by invitation of a member of the room.": { - "fr": "Accès possible uniquement sur invitation d'un membre du salon.", - "en": "Access possible only by invitation of a member of the room." + "The sharing of your Tchap Keys has succeeded. Your messages will be unlocked.": { + "en": "The sharing of your Tchap Keys has succeeded. Your messages will be unlocked.", + "fr": "Le partage de vos Clés Tchap a réussi. Vos messages vont être déverrouillés au fur et à mesure." }, - "Restore from Backup": { - "fr": "Récupérer mes messages", - "en": "Retrieve my messages" + "The validity period of your account has expired": { + "en": "Your Tchap account has expired", + "fr": "Votre compte Tchap a expiré" }, - "This session is backing up your keys.": { - "fr": "Cet appareil sauvegarde automatiquement vos messages.", - "en": "This device automatically backs up your messages." + "These keys only apply to the current session.": { + "en": "These keys only apply to the current session.", + "fr": "Ces clés ne concernent que la session en cours." }, - "Cross-signing is not set up.": { - "fr": "La signature croisée n’est pas active", - "en": "Cross-signing is not active." + "This action is irreversible.": { + "en": "This action is irreversible.", + "fr": "Cette action est irréversible." }, - "Cross-signing is ready but keys are not backed up.": { - "fr": "La signature croisée est activée mais pas la sauvegarde automatique des messages.", - "en": "Cross-signing is ready but not the secure backup." + "This file will be protected by a password, which will be asked next time you log in, when you will import the keys to unlock your messages.": { + "en": "This file will be protected by a password, which will be asked next time you log in, when you will import the keys to unlock your messages.", + "fr": "Ce fichier sera protégé par un mot de passe, qui vous sera demandé à votre prochaine connexion, lorsque vous importerez les clés pour déverrouiller vos messages." }, - "Cross-signing is ready for use.": { - "fr": "La signature croisée est activée sur cet appareil.", - "en": "Cross-signing is activated on this device." + "This groups your chats with members of this space. Turning this off will hide those chats from your view of %(spaceName)s.": { + "en": "This groups your direct messages with members of this space. Turning this off will hide those rooms from your view of %(spaceName)s.", + "fr": "Cela rassemble vos messages directs avec les membres de cet espace. Le désactiver masquera ces salons de votre vue de %(spaceName)s." }, - "Your keys are not being backed up from this session.": { - "fr": "Cet appareil ne sauvegarde pas vos messages.", - "en": "This device is not backing up your messages." + "This is your recovery key": { + "en": "This code will allow you to always restore your messages.", + "fr": "Ce code vous permettra de toujours récupérer vos messages." }, - "Secure Backup successful": { - "fr": "Sauvegarde automatique activée avec succès", - "en": "Secure backup successfully enabled." + "This means that you have all the keys needed to unlock your encrypted messages and confirm to other users that you trust this session.": { + "en": "This means that you have all the keys needed to unlock your encrypted messages and confirm to other users that you trust this device.", + "fr": "Cela veut dire qu'ils disposent de toutes les clés nécessaires pour lire les messages chiffrés, et confirment aux autres utilisateurs que vous faites confiance à cet appareil." }, - "Your keys are now being backed up from this device.": { - "fr": "Vos messages sont maintenant automatiquement sauvegardés sur cet appareil.", - "en": "Your messages are now automatically backed up on this device." + "This room is a public forum": { + "en": "This room is a public forum", + "fr": "Ce salon est un forum public" }, - "Wrong Security Key": { - "fr": "Le Code de Récupération n’est pas valide. Vérifier que c’est le plus récent.", - "en": "The Recovery Code is not valid. Check that it is the latest one." + "This room is private": { + "en": "This room is private", + "fr": "Ce salon est privé" }, - "Keys restored": { - "fr": "Messages récupérés", - "en": "Messages restored" + "This room is private and open to external users": { + "en": "This room is private and open to external users", + "fr": "Ce salon est privé et ouvert aux externes" }, - "Successfully restored %(sessionCount)s keys": { - "fr": "%(sessionCount)s messages ont été récupérés avec succès.", - "en": "%(sessionCount)s messages have been successfully restored." + "This session has detected that your Security Phrase and key for Secure Messages have been removed.": { + "en": "This session has detected that your Security Phrase and code for Secure Messages have been removed.", + "fr": "Cette session a détecté que votre phrase secrète et Code de Récupération pour les messages sécurisés ont été supprimés." }, - "Setting up keys": { - "fr": "Configuration du Code de Récupération", - "en": "Setting up your Recovery Code" + "This session is backing up your keys.": { + "en": "This device automatically backs up your messages.", + "fr": "Cet appareil sauvegarde automatiquement vos messages." }, - "Restoring keys from backup": { - "fr": "Restauration des messages depuis la sauvegarde", - "en": "Restoring messages from backup" + "This version of Tchap Web is currently in development. There are known issues that will be solved soon.": { + "en": "This version of Tchap Web is currently in development. There are known issues that will be solved soon.", + "fr": "Cette version de Tchap Web est en cours de développement. Il y a des problèmes connus qui seront bientôt résolus." }, - "Fetching keys from server…": { - "fr": "Récupération des messages depuis le serveur…", - "en": "Fetching messages from server…" + "Trusted": { + "en": "Trusted", + "fr": "Vérifié" }, - "Generate a new password. Note that your locked messages will remain locked.": { - "fr": "Générer un nouveau mot de passe. Attention, vos messages verrouillés le resteront.", - "en": "Generate a new password. Note that your locked messages will remain locked." + "Type of room": { + "en": "Type of room", + "fr": "Type de salon" }, - "Where you're signed in": { - "fr": "Appareils connectés", - "en": "Connected devices" + "Unable to decrypt message": { + "en": "Waiting for this message. This could take a while.", + "fr": "En attente de ce message. Ceci pourrait prendre un moment." }, - "Activate on this device": { - "fr": "Activer sur cet appareil", - "en": "Activate on this device" + "Unable to verify this device": { + "en": "You are logging into a new device", + "fr": "Vous vous connectez à un nouvel appareil" }, - "Verify this session": { - "fr": "Vérifier cet appareil", - "en": "Verify this device" + "Unverified session": { + "en": "Unverified device", + "fr": "Appareil non vérifié" }, - "Other users may not trust it": { - "fr": "Vous risquez de ne pas pouvoir récupérer vos messages.", - "en": "You may not be able to recover your messages." + "Unverified sessions": { + "en": "Unverified devices", + "fr": "Appareils non vérifiés" }, - "Please note upgrading will make a new version of the room. All current messages will stay in this archived room.": { - "fr": "Une nouvelle version de ce salon va être créée. Tous les messages actuels resteront accessibles dans ce salon. Tous les membres vont être réinvités.", - "en": "A new version of this room will be created. All current messages will remain accessible in this room. All members will be invited back." + "Unverified sessions are sessions that have logged in with your credentials but have not been cross-verified.": { + "en": "Unverified devices are devices that have logged in with your credentials but have not been cross-verified (emoji exchange or ou Recovery Code).", + "fr": "Les appareils non vérifiés sont identifiés avec vos identifiants mais n’ont pas fait de vérification croisée (échange d'emojis ou Code de Récupération)." }, "Upgrade private room": { - "fr": "Ce salon va être mis à jour", - "en": "This room will be updated" - }, - "External members cannot be re-invited. If you need to give access to externals, you will have to create a new room": { - "fr": "Les membres externes ne pourront pas être réinvités. Si vous avez besoin de donner accès aux externes, il faudra créer un nouveau salon.", - "en": "External members cannot be re-invited. If you need to give access to externals, you will have to create a new room." + "en": "This room will be updated", + "fr": "Ce salon va être mis à jour" }, "Upgrade room": { - "fr": "Mettre à jour le salon", - "en": "Upgrade room" - }, - "Verify your identity to access encrypted messages and prove your identity to others.": { - "fr": "Vérifiez votre identité pour accéder aux messages verrouillés et prouver votre identité aux autres.", - "en": "Verify your identity to access locked messages and prove your identity to others." - }, - "Really reset verification keys?": { - "fr": "Réinitialiser le Code de Récupération, c’est certain ?", - "en": "Really reset Recovery Code?" - }, - "Resetting your verification keys cannot be undone. After resetting, you won't have access to old encrypted messages, and any friends who have previously verified you will see security warnings until you re-verify with them.": { - "fr": "La réinitialisation de votre Code de Récupération ne peut pas être annulée. Après la réinitialisation, vous n’aurez plus accès à vos anciens messages verrouillés.", - "en": "Resetting your Recovery Code cannot be undone. After resetting, you will no longer have access to your previous locked messages." + "en": "Upgrade room", + "fr": "Mettre à jour le salon" }, - "Please only proceed if you're sure you've lost all of your other devices and your Security Key.": { - "fr": "Veuillez ne continuer que si vous êtes certain d’avoir perdu tous vos autres appareils et votre Code de Récupération.", - "en": "Please only proceed if you're sure you've lost all of your other devices and your Recovery Code." - }, - "Export room members": { - "fr": "Exporter les membres du salon", - "en": "Export room members" - }, - "Download the list of all this room's members, in a text file. Useful for adding them all to another room.": { - "fr": "Récupérer la liste des membres de ce salon, dans un fichier texte. Utile pour inviter toutes ces personnes à un autre salon.", - "en": "Download the list of all this room's members, in a text file. Useful for adding them all to another room." - }, - "members_of_%(roomName)s.txt": { - "fr": "membres_de_%(roomName)s.txt", - "en": "members_of_%(roomName)s.txt" - }, - "Destroy cross-signing keys?": { - "fr": "Réinitialiser les clés de signature croisée ?", - "en": "Reset cross-signing keys?" + "Use a secret phrase only you know, and optionally save a Security Key to use for backup.": { + "en": "Use a secret phrase only you know, and optionally save a Recovery Code to use for backup.", + "fr": "Utilisez une phrase secrète que vous êtes seul à connaître et enregistrez éventuellement un Code de Récupération à utiliser pour la sauvegarde." }, - "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": { - "fr": "Réinitialiser les clés de signature croisée est permanent. Utiliser cette procédure uniquement si vous avez perdu tous les appareils vous permettant d’effectuer une signature croisée.", - "en": "Resetting your Recovery Code is permanent. Please use this procedure only if you have lost all devices that allow you to perform cross-signing." + "Use your Security Key to continue.": { + "en": "Use your Recovery Code to continue.", + "fr": "Utilisez votre Code de Récupération pour continuer." }, - "Clear cross-signing keys": { - "fr": "Réinitialiser les clés de signature croisée", - "en": "Reset Recovery Code" + "User is already in the room": { + "en": "User is already in the room.", + "fr": "Cette personne est déjà dans le salon." }, - "General Conditions of Use (CGU)": { - "en": "General Conditions of Use (CGU)", - "fr": "Conditions Générales d'Utilisation (CGU)" + "Verified session": { + "en": "Verified device", + "fr": "Appareil vérifié" }, - "Read the CGU": { - "en": "Read the CGU", - "fr": "Consultez les CGU" + "Verified sessions": { + "en": "Verified devices", + "fr": "Appareils vérifiés" }, - "Privacy Policy": { - "en": "Privacy Policy", - "fr": "Politique de Confidentialité" + "Verified sessions are anywhere you are using this account after entering your passphrase or confirming your identity with another verified session.": { + "en": "Verified devices are anywhere you are using this account after entering your passphrase or confirming your identity with another verified device.", + "fr": "Les appareils vérifiés sont ceux qui utilisent ce compte après avoir saisi la phrase de sécurité ou confirmé votre identité à l’aide d’un autre appareil vérifié." }, - "Read the Privacy Policy": { - "en": "Read the Privacy Policy", - "fr": "Lire la Politique de Confidentialité" + "Verified!": { + "en": "Verified!", + "fr": "Vérifié !" }, - "la messagerie instantanée de l'Administration": { - "en": "The instant messaging app of the French Administration", - "fr": "la messagerie instantanée de l'Administration" + "Verify session": { + "en": "Verify device", + "fr": "Vérifier l'appareil" }, - "Conçue et gérée par l'Administration française": { - "en": "Designed and managed by the French Administration, for agents of the three public functions,
to communicate easily with high security standards. Used by over 400,000 public officials.", - "fr": "Conçue et gérée par l'Administration française, pour les agents des trois fonctions publiques,
pour communiquer facilement en toute sécurité. Utilisée par plus de 400 000 agents publics." + "Verify this session": { + "en": "Verify this device", + "fr": "Vérifier cet appareil" }, - "En savoir plus": { - "en": "Learn more", - "fr": "En savoir plus" + "Verify with Security Key": { + "en": "Verify with Recovery Code", + "fr": "Vérifier avec un Code de Récupération" }, - "Your %(brand)s is misconfigured": { - "fr": "", - "en": "" + "Verify with Security Key or Phrase": { + "en": "Verify with Recovery Code or Phrase", + "fr": "Vérifier avec un Code de Récupération ou une phrase" }, - "You can also ask your homeserver admin to upgrade the server to change this behaviour.": { - "fr": "", - "en": "" + "Verify your current session for enhanced secure messaging.": { + "en": "Verify your current device to get your messages.", + "fr": "Vérifier cet appareil afin de visualiser vos messages" }, - "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.": { - "fr": "", - "en": "" + "Verify your identity to access encrypted messages and prove your identity to others.": { + "en": "Verify your identity to access locked messages and prove your identity to others.", + "fr": "Vérifiez votre identité pour accéder aux messages verrouillés et prouver votre identité aux autres." }, - "Server may be unavailable, overloaded, or you hit a bug.": { - "fr": "La connexion à Tchap n'est pas possible pour le moment (err:04). Voir l'état du service: https://status.tchap.numerique.gouv.fr", - "en": "Tchap is not available at the moment (err:04). View the status of services: https://status.tchap.numerique.gouv.fr" + "Wait for at least %(wait)s seconds between two emails": { + "en": "Wait for at least %(wait)s seconds between two emails", + "fr": "Attendez au moins %(wait)s secondes entre l'envoi de deux mails" }, - "Server unavailable, overloaded, or something else went wrong.": { - "fr": "La connexion à Tchap n'est pas possible pour le moment (err:03). Voir l'état du service: https://status.tchap.numerique.gouv.fr", - "en": "Tchap is not available at the moment (err:03). View the status of services: https://status.tchap.numerique.gouv.fr" + "Waiting for this message. This could take a while. Find out more": { + "en": "Waiting for this message. This could take a while. Find out more", + "fr": "En attente de ce message. Ceci pourrait prendre un moment. En savoir plus" }, - "Connectivity to the server has been lost.": { - "fr": "La connexion à Tchap n'est pas possible pour le moment. Voir l'état du service", - "en": "Tchap is not available at the moment. View the status of services." + "Warning: this is the only time this code will be displayed!": { + "en": "Warning: this is the only time this code will be displayed!", + "fr": "Attention: c’est la seule fois que ce code sera affiché !" }, - "Review Tchap services status : url": { - "fr": "La connexion à Tchap n'est pas possible pour le moment %(errCode)s. Voir l'état du service", - "en": "Tchap is not available at the moment %(errCode)s. View the status of services." + "We have compiled a list of the questions our users ask the most frequently. Your question may be answered there.": { + "en": "We have compiled a list of the questions our users ask the most frequently. Your question may be answered there.", + "fr": "Nous avons constitué une liste des question les plus fréquentes posées par nos utilisateurs. Votre question a peut-être déjà une solution." }, - "Sent messages will be stored until your connection has returned.": { - "fr": "Les messages seront envoyés automatiquement dès que la connexion sera rétablie.", - "en": "Messages will be sent when your connection returns." + "We'll generate a Security Key for you to store somewhere safe, like a password manager or a safe.": { + "en": "We'll generate your unique Recovery Code for you to store somewhere safe, like a password manager or a safe.", + "fr": "Nous génèrerons votre Code de Récupération unique que vous devrez stocker dans un endroit sûr, comme un gestionnaire de mots de passe ou un coffre." }, - "Sessions": { - "fr": "Mes appareils", - "en": "My devices" + "Welcome to Tchap": { + "en": "Welcome to Tchap", + "fr": "Bienvenue sur Tchap" }, - "Current session": { - "fr": "Cet appareil", - "en": "This device" + "Wrong Security Key": { + "en": "The Recovery Code is not valid. Check that it is the latest one.", + "fr": "Le Code de Récupération n’est pas valide. Vérifier que c’est le plus récent." }, - "Verified session": { - "fr": "Appareil vérifié", - "en": "Verified device" + "You can also set up Secure Backup & manage your keys in Settings.": { + "en": "You can also set up Secure Backup & manage your keys in Settings.", + "fr": "Vous pouvez aussi configurer la sauvegarde automatique des messages et gérer vos clés depuis les paramètres." }, - "Other sessions": { - "fr": "Autres appareils", - "en": "Other devices" + "You can close this disconnected tab, and go to the other %(brand)s tab.": { + "en": "You can close this disconnected tab, and go to the other %(brand)s tab.", + "fr": "Vous pouvez fermer cet onglet déconnecté, et aller à l'autre onglet %(brand)s." }, - "Verify your current session for enhanced secure messaging.": { - "fr": "Vérifier cet appareil afin de visualiser vos messages", - "en": "Verify your current device to get your messages." + "You need to be able to kick users to do that.": { + "en": "You need to be able to kick users to do that.", + "fr": "Vous devez avoir l’autorisation de retirer des utilisateurs pour faire ceci." }, - "Verify session": { - "fr": "Vérifier l'appareil", - "en": "Verify device" + "You should make especially certain that you recognise these sessions as they could represent an unauthorised use of your account.": { + "en": "You should make especially certain that you recognise these devices as they could represent an unauthorised use of your account.", + "fr": "Vous devriez vous assurer que vous connaissez ces appareils, car ils pourraient représenter un usage frauduleux de votre compte." }, - "Sign out of this session": { - "fr": "Se déconnecter de cet appareil", - "en": "Sign out of this device" + "Your %(brand)s is misconfigured": { + "en": " ", + "fr": " " }, - "Receive push notifications on this session.": { - "fr": "Recevoir les notifications push sur cet appareil", - "en": "Receive push notifications on this device." + "Your Tchap Key password": { + "en": "Your Tchap Key password", + "fr": "Votre mot de passe Clés Tchap" }, - "Unverified": { - "fr": "Non vérifié", - "en": "Unverified" + "Your Tchap Keys (encryption keys) have been successful saved in the tchap-keys.txt file. You can import them when you login again to unlock your messages (find out more).": { + "en": "Your Tchap Keys (encryption keys) have been successful saved in the tchap-keys.txt file. You can import them when you login again to unlock your messages (find out more).", + "fr": "Vos Clés Tchap (clés de chiffrement) ont été sauvegardées avec succès dans le fichier tchap-keys.txt. Vous pourrez les importer à votre prochaine connexion pour déverrouiller vos messages (en savoir plus)." }, - "Verified": { - "fr": "Vérifié", - "en": "Verified " + "Your account is still expired, please follow the link in the email you have received to renew it": { + "en": "Your account is still expired, please follow the link in the email you should have received to renew it", + "fr": "Votre compte est toujours expiré, merci de cliquer sur le lien reçu dans le mail de renouvellement" }, "Your current session is ready for secure messaging.": { - "fr": "", - "en": "" + "en": "Your device is ready for secure messaging.", + "fr": "Votre appareil est prêt à envoyer des messages." }, - "%(count)s sessions selected|one": { - "fr": "%(count)s appareil sélectionné", - "en": "%(count)s device selected" - }, - "%(count)s sessions selected|other": { - "fr": "%(count)s appareils sélectionnés", - "en": "%(count)s devices selected" + "Your keys are not being backed up from this session.": { + "en": "This device is not backing up your messages.", + "fr": "Cet appareil ne sauvegarde pas vos messages." }, - "For best security, verify your sessions and sign out from any session that you don't recognize or use anymore.": { - "fr": "Vérifier tous vos appareils pour déverrouiller tous vos messages", - "en": "Verify your devices to unlock your messages" + "Your keys are now being backed up from this device.": { + "en": "Your messages are now automatically backed up on this device.", + "fr": "Vos messages sont maintenant automatiquement sauvegardés sur cet appareil." }, - "This means that you have all the keys needed to unlock your encrypted messages and confirm to other users that you trust this session.": { - "fr": "Cela veut dire qu'ils disposent de toutes les clés nécessaires pour lire les messages chiffrés, et confirment aux autres utilisateurs que vous faites confiance à cet appareil.", - "en": "This means that you have all the keys needed to unlock your encrypted messages and confirm to other users that you trust this device." + "Your last three login attempts have failed. Please try again in a few minutes.": { + "en": "Your last three login attempts have failed. Please try again in a few minutes.", + "fr": "Vos trois dernières tentatives de connexion ont échoué. Veuillez réessayer dans quelques minutes." }, - "Verified sessions are anywhere you are using this account after entering your passphrase or confirming your identity with another verified session.": { - "fr": "Les appareils vérifiés sont ceux qui utilisent ce compte après avoir saisi la phrase de sécurité ou confirmé votre identité à l’aide d’un autre appareil vérifié.", - "en": "Verified devices are anywhere you are using this account after entering your passphrase or confirming your identity with another verified device." + "Your new device is now verified. It has access to your encrypted messages, and other users will see it as trusted.": { + "en": "Your new device is now verified. It has access to your encrypted messages, and other users will see it as trusted.", + "fr": "Votre nouvel appareil est maintenant vérifié. Il a accès à vos messages chiffrés et les autres utilisateurs le verront comme fiable." }, - "Verified sessions": { - "fr": "Appareils vérifiés", - "en": "Verified devices" + "Your password must include:": { + "en": "Your password must include:", + "fr": "Votre mot de passe doit comporter :" }, - "Unverified sessions": { - "fr": "Appareils non vérifiés", - "en": "Unverified devices" + "a lowercase letter": { + "en": "a lowercase letter", + "fr": "une lettre minuscule" }, - "Unverified session": { - "fr": "Appareil non vérifié", - "en": "Unverified device" + "a minimum of %(number)s characters": { + "en": "a minimum of %(number)s characters", + "fr": "%(number)s caractères au minimum" }, - "Sign out of %(count)s sessions|one": { - "fr": "Déconnecter %(count)s appareil", - "en": "Sign out of %(count)s device" + "a number": { + "en": "a number", + "fr": "un chiffre" }, - "Sign out of %(count)s sessions|other": { - "fr": "Déconnecter %(count)s appareils", - "en": "Sign out of %(count)s devices" + "a symbol": { + "en": "a symbol", + "fr": "un caractère spécial" }, - "Sign out of all other sessions (%(otherSessionsCount)s)": { - "fr": "Déconnecter tous les autres appareils (%(otherSessionsCount)s)", - "en": "Sign out of all other devices (%(otherSessionsCount)s)" + "action": { + "start_chat": { + "en": "New direct message", + "fr": "Nouveau message direct" + } }, - "Are you sure you want to sign out of %(count)s sessions?|one": { - "fr": "Voulez-vous vraiment déconnecter %(count)s appareil ?", - "en": "Are you sure you want to sign out of %(count)s device?" + "an uppercase letter": { + "en": "an uppercase letter", + "fr": "une lettre majuscule" }, - "Are you sure you want to sign out of %(count)s sessions?|other": { - "fr": "Voulez-vous vraiment déconnecter %(count)s de vos appareils ?", - "en": "Are you sure you want to sign out of %(count)s devices?" + "auth": { + "check_email_wrong_email_button": { + "en": "Re-enter email address", + "fr": "Re-saisir l'adresse mail" + }, + "check_email_wrong_email_prompt": { + "comment": "TODO contribute to element", + "en": "Wrong email address?", + "fr": "Mauvaise adresse mail ?" + }, + "enter_email_heading": { + "en": "Enter your email to reset password", + "fr": "Entrez votre adresse mail pour réinitialiser votre mot de passe" + }, + "reset_password_title": { + "comment": "TODO contribute to element translations", + "en": "Reset your password", + "fr": "Réinitialisez votre mot de passe" + }, + "sign_in_instead": { + "comment": "TODO contribute to element translations", + "en": "Sign in instead", + "fr": "ou connectez-vous" + }, + "verify_email_explainer": { + "en": "We need to know it’s you before resetting your password.\n Click the link in the email we just sent to %(email)s", + "fr": "Nous avons besoin de savoir que c’est vous avant de réinitialiser votre mot de passe.\n Cliquer sur le lien dans le mail que nous venons juste d’envoyer à %(email)s" + }, + "verify_email_heading": { + "Verify your email to continue": { + "en": "Verify your email to continue", + "fr": "Vérifiez vos mails avant de continuer" + } + } + }, + "common": { + "unverified": { + "en": "Unverified", + "fr": "Non vérifié" + }, + "verified": { + "en": "Verified ", + "fr": "Vérifié" + } }, - "You should make especially certain that you recognise these sessions as they could represent an unauthorised use of your account.": { - "fr": "Vous devriez vous assurer que vous connaissez ces appareils, car ils pourraient représenter un usage frauduleux de votre compte.", - "en": "You should make especially certain that you recognise these devices as they could represent an unauthorised use of your account." + "la messagerie instantanée de l'Administration": { + "en": "The instant messaging app of the French Administration", + "fr": "la messagerie instantanée de l'Administration" }, - "Unverified sessions are sessions that have logged in with your credentials but have not been cross-verified.": { - "fr": "Les appareils non vérifiés sont identifiés avec vos identifiants mais n’ont pas fait de vérification croisée (échange d'emojis ou Code de Récupération).", - "en": "Unverified devices are devices that have logged in with your credentials but have not been cross-verified (emoji exchange or ou Recovery Code)." + "members_of_%(roomName)s.txt": { + "en": "members_of_%(roomName)s.txt", + "fr": "membres_de_%(roomName)s.txt" }, "onboarding_free_e2ee_messaging_tchap_limited_voip": { "en": "With free end-to-end encrypted messaging, %(brand)s is a great way to stay in touch.", "fr": "Grâce à la messagerie chiffrée de bout en bout gratuite, %(brand)s est un excellent moyen de rester en contact." }, - "%(brand)s is open in another window. Click \"%(label)s\" to use %(brand)s here and disconnect the other window.": { - "en": "%(brand)s is open in another window. Click \"%(label)s\" to use %(brand)s here and disconnect the other window.", - "fr": "%(brand)s est ouvert dans une autre fenêtre. Cliquez \"%(label)s\" pour utiliser %(brand)s ici et déconnecter l'autre fenêtre.", - "comment": "2023-11-08: remove once the string is translated in element" - }, - "%(brand)s has been connected in another tab": { - "en": "%(brand)s has been connected in another tab", - "fr": "%(brand)s a été connecté dans un autre onglet" - }, - "You can close this disconnected tab, and go to the other %(brand)s tab.": { - "en": "You can close this disconnected tab, and go to the other %(brand)s tab.", - "fr": "Vous pouvez fermer cet onglet déconnecté, et aller à l'autre onglet %(brand)s." + "room_settings": { + "permissions": { + "ban": { + "en": "Ban users", + "fr": "Interdire aux utilisateurs l’accès au salon (définitif)" + }, + "kick": { + "en": "Remove users", + "fr": "Retirer des utilisateurs (réversible)" + } + } + }, + "widget": { + "capability": { + "remove_ban_invite_leave_active_room": { + "en": "Remove, ban, or invite people to your active room, and make you leave", + "fr": "Retirer, interdire l'accès ou inviter des personnes dans votre salon actif et en partir" + }, + "remove_ban_invite_leave_this_room": { + "en": "Remove, ban, or invite people to this room, and make you leave", + "fr": "Retirer, interdire l'accès ou inviter une personne dans ce salon et vous permettre de partir" + } + } } } diff --git a/modules/tchap-translations/tchap_translations_removed.json b/modules/tchap-translations/tchap_translations_removed.json new file mode 100644 index 0000000000..4a3c0d4602 --- /dev/null +++ b/modules/tchap-translations/tchap_translations_removed.json @@ -0,0 +1,39 @@ +[ + "%(brand)s has been opened in another tab.", + "%(downloadButton)s or %(copyButton)s", + "%(securityKey)s or %(recoveryFile)s", + "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.", + "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.", + "There was a problem communicating with the homeserver, please try again later.", + "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.", + "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.", + "Connectivity to the server has been lost.", + "Server may be unavailable, overloaded, or search timed out :(", + "Cryptography", + "Enter email address (required on this homeserver)", + "It looks like you don't have a Security Key or any other devices you can verify against. This device will not be able to access old encrypted messages. In order to verify your identity on this device, you'll need to reset your verification keys.", + "Not encrypted", + "Please tell us what went wrong or, better, create a GitHub issue that describes the problem.", + "Room Addresses", + "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.", + "Sign out of all devices", + "To link to this room, please add an address.", + "Use an email address to recover your account", + "Verification Request", + "Verify other device", + "Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.", + "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.", + "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.", + "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.", + "Waiting for partner to confirm…", + "You've successfully verified %(deviceName)s (%(deviceId)s)!", + "auth|enter_email_explainer", + "bug_reporting|before_submitting", + "bug_reporting|github_issue", + "common|matrix", + "encryption|verification|complete_description", + "onboarding|download_f_droid", + "encryption|verification|complete_title", + "powered_by_matrix_with_logo", + "welcome_to_element" +] diff --git a/package.json b/package.json index 42eaff96fb..048f86e07d 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "UserFriendlyError" ], "scripts": { + "i18n-tchap": "./scripts/tchap/translations/check-translations.sh", "i18n": "matrix-gen-i18n && yarn i18n:sort && yarn i18n:lint", "i18n:sort": "jq --sort-keys '.' src/i18n/strings/en_EN.json > src/i18n/strings/en_EN.json.tmp && mv src/i18n/strings/en_EN.json.tmp src/i18n/strings/en_EN.json", "i18n:lint": "prettier --write src/i18n/strings/ --ignore-path /dev/null", diff --git a/res/welcome.html b/res/welcome.html index 218290da56..199c3afa04 100644 --- a/res/welcome.html +++ b/res/welcome.html @@ -225,7 +225,7 @@

_t("Welcome to Tchap")
diff --git a/scripts/tchap/translations/check-translations.sh b/scripts/tchap/translations/check-translations.sh new file mode 100755 index 0000000000..666fd0d203 --- /dev/null +++ b/scripts/tchap/translations/check-translations.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +## How does this work ? See modules/tchap-translations/README.md + +mkdir -p `realpath modules/tchap-translations/tmp` + +export REFERENCE_TRANSLATIONS=`realpath modules/tchap-translations/tmp/reference.json` +./scripts/tchap/translations/collect-reference-translations.sh $REFERENCE_TRANSLATIONS + +export CRAWLED=`realpath modules/tchap-translations/tmp/crawled.json` +./scripts/tchap/translations/crawl-for-translations.sh $REFERENCE_TRANSLATIONS $CRAWLED + +# Diff the two. +echo "Comparing:" +echo "diff $REFERENCE_TRANSLATIONS $CRAWLED" +yarn matrix-compare-i18n-files $REFERENCE_TRANSLATIONS $CRAWLED diff --git a/scripts/tchap/translations/collect-reference-translations.sh b/scripts/tchap/translations/collect-reference-translations.sh new file mode 100755 index 0000000000..7346aa4330 --- /dev/null +++ b/scripts/tchap/translations/collect-reference-translations.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Collect translations from tchap's translation files and element's translation file, in both web and react-sdk repos, +# and merge them all together. +# Usage : ./scripts/tchap/translations/collect-reference-translations.sh $REFERENCE_TRANSLATIONS + +source scripts/tchap/translations/helpers.sh +mkdir -p `realpath modules/tchap-translations/tmp` +export OUTPUT_FILE=$1 + +# Extract EN translations from tchap translations. +TCHAP_TRANSLATION_FILE=`realpath modules/tchap-translations/tchap_translations.json` +TCHAP_TRANSLATION_EN_FILE=`realpath modules/tchap-translations/tmp/tchap_EN.json` +node scripts/tchap/translations/extractENTranslations.js --file=$TCHAP_TRANSLATION_FILE > $TCHAP_TRANSLATION_EN_FILE + +# Merge element translations from both web and react-sdk repos, into OUTPUT_FILE +export ELEMENT_WEB_TRANSLATION_FILE=`realpath src/i18n/strings/en_EN.json` +export ELEMENT_REACT_TRANSLATION_FILE=`realpath yarn-linked-dependencies/matrix-react-sdk/src/i18n/strings/en_EN.json` +merge_json_files $ELEMENT_WEB_TRANSLATION_FILE $ELEMENT_REACT_TRANSLATION_FILE $OUTPUT_FILE + +# Merge in tchap translations, into OUTPUT_FILE. Tchap values should override element values in case of conflict. +merge_json_files $OUTPUT_FILE $TCHAP_TRANSLATION_EN_FILE $OUTPUT_FILE + +# Some keys have been removed from the code by patches. Remove these keys from the reference file. +REMOVED_TRANSLATION_FILE=`realpath modules/tchap-translations/tchap_translations_removed.json` +node scripts/tchap/translations/deleteRemovedTranslations.js --file=$OUTPUT_FILE --toremove=$REMOVED_TRANSLATION_FILE > $OUTPUT_FILE.tmp +mv $OUTPUT_FILE.tmp $OUTPUT_FILE + +# Format the file for clean diffing. +format_json_file $OUTPUT_FILE + +echo "Reference translations collected : $OUTPUT_FILE" diff --git a/scripts/tchap/translations/crawl-for-translations.sh b/scripts/tchap/translations/crawl-for-translations.sh new file mode 100755 index 0000000000..8d1a9ccae6 --- /dev/null +++ b/scripts/tchap/translations/crawl-for-translations.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Crawl through the code, find translation strings, find corresponding translations in reference file, and write everything +# to the output file. +# Usage : ./scripts/tchap/translations/crawl-for-translations.sh $REFERENCE_TRANSLATIONS $OUTPUT + +source scripts/tchap/translations/helpers.sh + +# Usage : crawl repo inputfile outputfile +crawl () { + export repo=$1 + # Run the original gen-i18n script from matrix-web-i18n. + # gen-i18n crawls through the code files in src and res, looking for translations. + # For each translation key, it finds the values in INPUT_FILE. If no value found, it uses value=key. + # Then it writes key:value in OUTPUT_FILE. + export INPUT_FILE=$2 # var read by matrix-gen-i18n, don't rename + export OUTPUT_FILE=$3 # var read by matrix-gen-i18n, don't rename + if [[ "$repo" == "react-sdk" ]]; then + cd yarn-linked-dependencies/matrix-react-sdk + yarn matrix-gen-i18n; + cd ../../ + else + yarn matrix-gen-i18n; + fi + retVal=$? + if [ $retVal -ne 0 ]; then + echo "gen-i18n failed. Aborting." + exit $retVal + fi + # Todo we should probably abort in more places, set it in the script's settings +} + + +mkdir -p `realpath modules/tchap-translations/tmp` + +export REFERENCE_TRANSLATIONS=$1 +# Output +export CRAWLED=$2 + +# Repo web +export REPO="web"; +export CRAWLED_WEB=`realpath modules/tchap-translations/tmp/crawled_${REPO}.json` +crawl $REPO $REFERENCE_TRANSLATIONS $CRAWLED_WEB + +# Repo react-sdk +export REPO="react-sdk"; +export CRAWLED_REACT=`realpath modules/tchap-translations/tmp/crawled_${REPO}.json` +crawl $REPO $REFERENCE_TRANSLATIONS $CRAWLED_REACT + +merge_json_files $CRAWLED_WEB $CRAWLED_REACT $CRAWLED + +# Extra hack : config.json is not crawled by matrix-gen-i18n, so the terms_and_conditions_links are missing. Add them in. +# Get the terms_and_conditions strings from config.json +export TOC_TRANSLATIONS=`realpath modules/tchap-translations/tmp/terms_and_conditions_EN.json` +jq '.terms_and_conditions_links[] | { (.text): .text} ' config.json | jq -s add > $TOC_TRANSLATIONS +merge_json_files $TOC_TRANSLATIONS $CRAWLED $CRAWLED + +# Format the file for clean diffing. +format_json_file $CRAWLED + +echo "Crawled and found these translations : $CRAWLED" diff --git a/scripts/tchap/translations/deleteRemovedTranslations.js b/scripts/tchap/translations/deleteRemovedTranslations.js new file mode 100644 index 0000000000..0aa004ed0b --- /dev/null +++ b/scripts/tchap/translations/deleteRemovedTranslations.js @@ -0,0 +1,38 @@ +/* + Some keys have been removed from the code by patches. Remove these keys from the reference file. +*/ + +const parseArgs = require("minimist"); + +const argv = parseArgs(process.argv.slice(2), {}); +const tchapTranslations = require(argv.file); +const toRemove = require(argv.toremove); + +for (const key of toRemove) { + // We could have key = "auth|do_stuff", in which case we should deal with the nesting. + const keyPieces = key.split("|"); + // Officially the ugliest piece of script of all tchap. Use some elegant recursive crap or ES6 voodoo to deal with nesting. + // For now this works until 5 levels of nesting. Good enough. + switch (keyPieces.length) { + case 1: + delete tchapTranslations[keyPieces[0]]; + break; + case 2: + delete tchapTranslations[keyPieces[0]][keyPieces[1]]; + break; + case 3: + delete tchapTranslations[keyPieces[0]][keyPieces[1]][keyPieces[2]]; + break; + case 4: + delete tchapTranslations[keyPieces[0]][keyPieces[1]][keyPieces[2]][keyPieces[3]]; + break; + case 5: + delete tchapTranslations[keyPieces[0]][keyPieces[1]][keyPieces[2]][keyPieces[3]][keyPieces[4]]; + break; + default: + // I'm counting on this never happening. + throw new Error("More than 5 layers of nesting of translations??? Adapt the script."); + } +} + +console.log(JSON.stringify(tchapTranslations)); diff --git a/scripts/tchap/translations/extractENTranslations.js b/scripts/tchap/translations/extractENTranslations.js new file mode 100644 index 0000000000..d050c2020e --- /dev/null +++ b/scripts/tchap/translations/extractENTranslations.js @@ -0,0 +1,27 @@ +/* + Extract EN translations only from tchap translations. Change format to be compatible with element's i18n files. + We convert { "key": { "en": "en value", "fr": "fr value"}} to { "key": "en value"} + We output the result to stdout. + Note : this works with nested keys. + Note : We could do it with jq probably, but I gave up trying. This does it but breaks on nested keys : + cat $TCHAP_TRANSLATION_FILE | jq 'to_entries[] | { (.key): .value.en }' | jq -n '[inputs] | add' > $TCHAP_TRANSLATION_EN_FILE # no nested keys +*/ + +const parseArgs = require("minimist"); + +const argv = parseArgs(process.argv.slice(2), {}); +const tchapTranslations = require(argv.file); + +// Change the translation object in place, recursively. +const reformat = (translations) => { + for (const key of Object.keys(translations)) { + if ('en' in translations[key]) { + translations[key] = translations[key].en; + } else { + reformat(translations[key]); + } + } +} + +reformat(tchapTranslations); +console.log(JSON.stringify(tchapTranslations)); \ No newline at end of file diff --git a/scripts/tchap/translations/helpers.sh b/scripts/tchap/translations/helpers.sh new file mode 100644 index 0000000000..c061e53b53 --- /dev/null +++ b/scripts/tchap/translations/helpers.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# Usage : merge_json_files file1 file2 outputfile +merge_json_files () { + # Note : this works with nested keys. + # Note : in case of conflict, the values in the file given in second argument will override. + jq -s '.[0] * .[1]' $1 $2 > $3.tmp && mv $3.tmp $3 +} + +# Usage : format_json_file file +format_json_file () { + # Format the file for clean diffing. + jq --sort-keys '.' $1 > $1.tmp && mv $1.tmp $1 # yarn i18n:sort with customized files +} diff --git a/src/tchap/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx b/src/tchap/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx index a745526616..b130a0fb25 100644 --- a/src/tchap/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx +++ b/src/tchap/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx @@ -211,7 +211,7 @@ export default class TchapExportE2eKeysDialog extends React.Component
diff --git a/src/tchap/components/views/dialogs/TchapCreateRoomDialog.tsx b/src/tchap/components/views/dialogs/TchapCreateRoomDialog.tsx index 281266570b..6d26a73c70 100644 --- a/src/tchap/components/views/dialogs/TchapCreateRoomDialog.tsx +++ b/src/tchap/components/views/dialogs/TchapCreateRoomDialog.tsx @@ -96,7 +96,7 @@ export default class TchapCreateRoomDialog extends React.Component !!value, - invalid: () => _t("Please enter a name for the room"), + invalid: () => _t("create_room|name_validation_required"), }, ], }); diff --git a/src/tchap/components/views/dialogs/TchapRoomUpgradeWarningDialog.tsx b/src/tchap/components/views/dialogs/TchapRoomUpgradeWarningDialog.tsx index 2bf08dc793..3e6177f773 100644 --- a/src/tchap/components/views/dialogs/TchapRoomUpgradeWarningDialog.tsx +++ b/src/tchap/components/views/dialogs/TchapRoomUpgradeWarningDialog.tsx @@ -114,7 +114,7 @@ export default class RoomUpgradeWarningDialog extends React.Component @@ -190,7 +190,7 @@ export default class RoomUpgradeWarningDialog extends React.Component ); @@ -226,7 +226,7 @@ export default class RoomUpgradeWarningDialog extends React.Component @@ -240,8 +240,8 @@ export default class RoomUpgradeWarningDialog extends React.Component */} - - {/* + + {/* do not show toogle, users are invite by default {inviteToggle} */}
diff --git a/src/tchap/components/views/settings/TchapJoinRuleSettings.tsx b/src/tchap/components/views/settings/TchapJoinRuleSettings.tsx index 29b39472e2..57868c3892 100644 --- a/src/tchap/components/views/settings/TchapJoinRuleSettings.tsx +++ b/src/tchap/components/views/settings/TchapJoinRuleSettings.tsx @@ -109,7 +109,7 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh checked: joinRule === JoinRule.Invite || (joinRule === JoinRule.Restricted && !restrictedAllowRoomIds?.length), }, { value: JoinRule.Public, - label: _t("Public"), + label: _t("common|public"), description: <> { _t("Anyone can find and join.") } { aliasWarning } @@ -133,7 +133,7 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh _t("This action is irreversible.") + " " + _t("Are you sure you want to allow the externals to join this room ?"), - button: _t("OK"), + button: _t("action|ok"), onFinished: (confirmed) => { if (!confirmed) return; setTchapAccessRule({ rule: TchapRoomAccessRule.Unrestricted }); @@ -165,7 +165,7 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh } else if (joinRule === JoinRule.Public) { definitions.push({ value: JoinRule.Public, - label: _t("Public"), + label: _t("common|public"), description: ( <> {_t("Anyone can find and join.")} diff --git a/src/tchap/components/views/settings/tabs/user/TchapHelpUserSettingsTab.tsx b/src/tchap/components/views/settings/tabs/user/TchapHelpUserSettingsTab.tsx index 0673c34e0b..cc254cd342 100644 --- a/src/tchap/components/views/settings/tabs/user/TchapHelpUserSettingsTab.tsx +++ b/src/tchap/components/views/settings/tabs/user/TchapHelpUserSettingsTab.tsx @@ -280,8 +280,7 @@ export default class HelpUserSettingsTab extends React.Component
{_t( - "To report a Matrix-related security issue, please read the Matrix.org " + - "Security Disclosure Policy.", + "bug_reporting|matrix_security_issue", {}, { a: (sub) => ( diff --git a/src/tchap/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx b/src/tchap/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx index be3e38140c..9dc88b301b 100644 --- a/src/tchap/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx +++ b/src/tchap/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx @@ -119,7 +119,7 @@ export default class ContentScanningDownloadActionButton extends React.PureCompo case DownloadState.Pristine: case DownloadState.Safe: icon = ; - tooltip = _t("Download"); + tooltip = _t("action|download"); break; case DownloadState.Scanning: icon = this.renderSpinner(); diff --git a/src/tchap/customisations/components/views/messages/ContentScanningFileBody.tsx b/src/tchap/customisations/components/views/messages/ContentScanningFileBody.tsx index 82a06a616e..26de9d447c 100644 --- a/src/tchap/customisations/components/views/messages/ContentScanningFileBody.tsx +++ b/src/tchap/customisations/components/views/messages/ContentScanningFileBody.tsx @@ -93,7 +93,7 @@ export default class ContentScanningFileBody extends React.PureComponent - {presentableTextForFile(this.content, _t("Attachment"), true, true)} + {presentableTextForFile(this.content, _t("common|attachment"), true, true)}
diff --git a/src/tchap/customisations/components/views/messages/ContentScanningImageBody.tsx b/src/tchap/customisations/components/views/messages/ContentScanningImageBody.tsx index ba35568d0b..78b7dba49e 100644 --- a/src/tchap/customisations/components/views/messages/ContentScanningImageBody.tsx +++ b/src/tchap/customisations/components/views/messages/ContentScanningImageBody.tsx @@ -127,7 +127,7 @@ export default class ContentScanningImageBody extends React.ComponentView the status of services.", + {errCode: errCode ?? ''}, { a: (sub) => (