diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index bde06f0..8f943bb 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -14,6 +14,12 @@ "state": "translated", "value": "%1$@ %2$@ · %3$@" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } } } }, @@ -26,6 +32,12 @@ "state": "translated", "value": "%1$@ · %2$@" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } } } }, @@ -42,6 +54,12 @@ "state": "translated", "value": "Report a bug" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Signaler un bug" + } } } }, @@ -54,6 +72,12 @@ "state": "translated", "value": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé." + } } } }, @@ -66,6 +90,12 @@ "state": "translated", "value": "A direct device-to-device transfer — your files go straight to the receiver." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire." + } } } }, @@ -78,6 +108,12 @@ "state": "translated", "value": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu." + } } } }, @@ -90,6 +126,12 @@ "state": "translated", "value": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation." + } } } }, @@ -102,6 +144,12 @@ "state": "translated", "value": "Account-free — there’s nothing to sign up for." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Sans compte — il n’y a rien à créer." + } } } }, @@ -114,6 +162,12 @@ "state": "translated", "value": "Open source, released under the Apache 2.0 license." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Open source, publié sous licence Apache 2.0." + } } } }, @@ -126,6 +180,12 @@ "state": "translated", "value": "What VniDrop is" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ce qu’est VniDrop" + } } } }, @@ -138,6 +198,12 @@ "state": "translated", "value": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert." + } } } }, @@ -150,6 +216,12 @@ "state": "translated", "value": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage." + } } } }, @@ -162,6 +234,12 @@ "state": "translated", "value": "Not a sync or backup service." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Pas un service de synchronisation ou de sauvegarde." + } } } }, @@ -174,6 +252,12 @@ "state": "translated", "value": "What VniDrop isn’t" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ce que VniDrop n’est pas" + } } } }, @@ -186,6 +270,12 @@ "state": "translated", "value": "License" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Licence" + } } } }, @@ -198,6 +288,12 @@ "state": "translated", "value": "Privacy policy" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Politique de confidentialité" + } } } }, @@ -210,6 +306,12 @@ "state": "translated", "value": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert »." + } } } }, @@ -222,6 +324,12 @@ "state": "translated", "value": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues." + } } } }, @@ -234,6 +342,12 @@ "state": "translated", "value": "Received files are saved on your device and never silently overwrite an existing file." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant." + } } } }, @@ -246,6 +360,12 @@ "state": "translated", "value": "Privacy policy" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Politique de confidentialité" + } } } }, @@ -258,6 +378,12 @@ "state": "translated", "value": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers." + } } } }, @@ -270,6 +396,12 @@ "state": "translated", "value": "Privacy & security" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Confidentialité et sécurité" + } } } }, @@ -282,6 +414,12 @@ "state": "translated", "value": "Send files directly. Stay in control of who receives them." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit." + } } } }, @@ -294,6 +432,12 @@ "state": "translated", "value": "About" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "À propos" + } } } }, @@ -306,6 +450,12 @@ "state": "translated", "value": "Match this device’s light or dark appearance." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Suivre l’apparence claire ou sombre de cet appareil." + } } } }, @@ -318,6 +468,12 @@ "state": "translated", "value": "Dark mode" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Mode sombre" + } } } }, @@ -330,6 +486,12 @@ "state": "translated", "value": "Light mode" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Mode clair" + } } } }, @@ -342,6 +504,12 @@ "state": "translated", "value": "System" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Système" + } } } }, @@ -354,6 +522,12 @@ "state": "translated", "value": "Appearance" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Apparence" + } } } }, @@ -366,6 +540,12 @@ "state": "translated", "value": "Receive request" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande de réception" + } } } }, @@ -378,6 +558,12 @@ "state": "translated", "value": "Device ID: %1$@" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Identifiant de l’appareil : %1$@" + } } } }, @@ -390,6 +576,12 @@ "state": "translated", "value": "A nearby device" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un appareil à proximité" + } } } }, @@ -402,6 +594,12 @@ "state": "translated", "value": "%1$d requests waiting" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d demandes en attente" + } } } }, @@ -414,6 +612,12 @@ "state": "translated", "value": "%1$@ wants to receive “%2$@”." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ souhaite recevoir « %2$@ »." + } } } }, @@ -426,6 +630,12 @@ "state": "translated", "value": "Battery level" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Niveau de batterie" + } } } }, @@ -438,6 +648,12 @@ "state": "translated", "value": "name@example.com" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "nom@exemple.com" + } } } }, @@ -450,6 +666,12 @@ "state": "translated", "value": "Contact email (optional)" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "E-mail de contact (facultatif)" + } } } }, @@ -462,6 +684,12 @@ "state": "translated", "value": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées)." + } } } }, @@ -474,6 +702,12 @@ "state": "translated", "value": "Device information" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Informations sur l’appareil" + } } } }, @@ -486,6 +720,12 @@ "state": "translated", "value": "Describe what you expected to happen" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Décrivez ce à quoi vous vous attendiez" + } } } }, @@ -498,6 +738,12 @@ "state": "translated", "value": "What did you expect?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "À quoi vous attendiez-vous ?" + } } } }, @@ -510,6 +756,12 @@ "state": "translated", "value": "Include recent logs" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Inclure les journaux récents" + } } } }, @@ -522,6 +774,12 @@ "state": "translated", "value": "Helps us diagnose the issue. Sensitive values are redacted before sending." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi." + } } } }, @@ -534,6 +792,12 @@ "state": "translated", "value": "Log attachment size" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Taille de la pièce jointe des journaux" + } } } }, @@ -546,6 +810,12 @@ "state": "translated", "value": "Please describe what you expected." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Veuillez décrire ce à quoi vous vous attendiez." + } } } }, @@ -558,6 +828,12 @@ "state": "translated", "value": "Please describe what happened." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Veuillez décrire ce qui s’est passé." + } } } }, @@ -570,6 +846,12 @@ "state": "translated", "value": "List the steps to reproduce the issue" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Listez les étapes pour reproduire le problème" + } } } }, @@ -582,6 +864,12 @@ "state": "translated", "value": "Steps to reproduce (optional)" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Étapes pour reproduire (facultatif)" + } } } }, @@ -594,6 +882,12 @@ "state": "translated", "value": "Submit report" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer le rapport" + } } } }, @@ -606,6 +900,12 @@ "state": "translated", "value": "Could not submit the bug report. Try again later." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible d’envoyer le rapport de bug. Réessayez plus tard." + } } } }, @@ -618,6 +918,12 @@ "state": "translated", "value": "Thanks — your bug report was recorded." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Merci — votre rapport de bug a été enregistré." + } } } }, @@ -630,6 +936,12 @@ "state": "translated", "value": "Submitting…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoi…" + } } } }, @@ -642,6 +954,12 @@ "state": "translated", "value": "Describe what happened" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Décrivez ce qui s’est passé" + } } } }, @@ -654,6 +972,12 @@ "state": "translated", "value": "What happened?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Que s’est-il passé ?" + } } } }, @@ -666,6 +990,12 @@ "state": "translated", "value": "Approve" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approuver" + } } } }, @@ -678,6 +1008,12 @@ "state": "translated", "value": "Back" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Retour" + } } } }, @@ -690,6 +1026,12 @@ "state": "translated", "value": "Cancel" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annuler" + } } } }, @@ -702,6 +1044,12 @@ "state": "translated", "value": "Cancel" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annuler" + } } } }, @@ -714,6 +1062,12 @@ "state": "translated", "value": "Change files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Modifier les fichiers" + } } } }, @@ -726,6 +1080,12 @@ "state": "translated", "value": "Choose files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisir des fichiers" + } } } }, @@ -738,6 +1098,12 @@ "state": "translated", "value": "Choose folder" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisir un dossier" + } } } }, @@ -750,6 +1116,12 @@ "state": "translated", "value": "Clear" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Effacer" + } } } }, @@ -762,6 +1134,12 @@ "state": "translated", "value": "Close" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fermer" + } } } }, @@ -774,6 +1152,12 @@ "state": "translated", "value": "New transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nouveau transfert" + } } } }, @@ -786,6 +1170,12 @@ "state": "translated", "value": "Delete transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer le transfert" + } } } }, @@ -798,6 +1188,12 @@ "state": "translated", "value": "Save .vnd file" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrer le fichier .vnd" + } } } }, @@ -810,6 +1206,12 @@ "state": "translated", "value": "Share invitation" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partager l’invitation" + } } } }, @@ -822,6 +1224,12 @@ "state": "translated", "value": "Open Settings" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ouvrir les Réglages" + } } } }, @@ -834,6 +1242,12 @@ "state": "translated", "value": "Receive" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Recevoir" + } } } }, @@ -846,6 +1260,12 @@ "state": "translated", "value": "Start receiving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Commencer à recevoir" + } } } }, @@ -858,6 +1278,12 @@ "state": "translated", "value": "Refuse" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Refuser" + } } } }, @@ -870,6 +1296,12 @@ "state": "translated", "value": "Remove file" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Retirer le fichier" + } } } }, @@ -882,6 +1314,12 @@ "state": "translated", "value": "Use default" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Valeur par défaut" + } } } }, @@ -894,6 +1332,12 @@ "state": "translated", "value": "Retry" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réessayer" + } } } }, @@ -906,6 +1350,12 @@ "state": "translated", "value": "Start sharing" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Commencer le partage" + } } } }, @@ -918,6 +1368,12 @@ "state": "translated", "value": "Preparing transfer…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation du transfert…" + } } } }, @@ -930,6 +1386,12 @@ "state": "translated", "value": "Show in Files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Afficher dans Fichiers" + } } } }, @@ -942,6 +1404,12 @@ "state": "translated", "value": "Write to NFC tag" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Écrire sur un tag NFC" + } } } }, @@ -954,6 +1422,12 @@ "state": "translated", "value": "Device model" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Modèle de l’appareil" + } } } }, @@ -966,6 +1440,12 @@ "state": "translated", "value": "Device name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom de l’appareil" + } } } }, @@ -978,6 +1458,12 @@ "state": "translated", "value": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus." + } } } }, @@ -990,6 +1476,12 @@ "state": "translated", "value": "Diagnostics sharing is off." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le partage des diagnostics est désactivé." + } } } }, @@ -1002,6 +1494,12 @@ "state": "translated", "value": "Diagnostics sharing is on." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le partage des diagnostics est activé." + } } } }, @@ -1014,6 +1512,12 @@ "state": "translated", "value": "Share diagnostics" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partager les diagnostics" + } } } }, @@ -1026,6 +1530,12 @@ "state": "translated", "value": "Camera access is required to scan a QR code." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "L’accès à la caméra est nécessaire pour scanner un QR code." + } } } }, @@ -1038,6 +1548,12 @@ "state": "translated", "value": "Could not load device information." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible de charger les informations de l’appareil." + } } } }, @@ -1050,6 +1566,12 @@ "state": "translated", "value": "VniDrop could not access the selected files or folder. Check permissions and try again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez." + } } } }, @@ -1062,6 +1584,12 @@ "state": "translated", "value": "Something went wrong. Try again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Une erreur est survenue. Réessayez." + } } } }, @@ -1074,6 +1602,12 @@ "state": "translated", "value": "VniDrop could not finish starting up. Close the app and try again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez." + } } } }, @@ -1086,6 +1620,12 @@ "state": "translated", "value": "This invitation could not be read. Ask the sender for a new one." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur." + } } } }, @@ -1098,6 +1638,12 @@ "state": "translated", "value": "That invitation is empty. Try opening it again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Cette invitation est vide. Essayez de l’ouvrir à nouveau." + } } } }, @@ -1110,6 +1656,12 @@ "state": "translated", "value": "The native VniDrop library is missing from this build." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "La bibliothèque native de VniDrop est absente de cette version." + } } } }, @@ -1122,6 +1674,12 @@ "state": "translated", "value": "This NFC tag could not be used. Try another tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre." + } } } }, @@ -1134,6 +1692,12 @@ "state": "translated", "value": "The sender has not approved this transfer, or it was refused." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé." + } } } }, @@ -1146,6 +1710,12 @@ "state": "translated", "value": "VniDrop could not save transfer data on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil." + } } } }, @@ -1158,6 +1728,12 @@ "state": "translated", "value": "Could not open the selected item. Try choosing it again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau." + } } } }, @@ -1170,6 +1746,12 @@ "state": "translated", "value": "Select at least one item to share." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Sélectionnez au moins un élément à partager." + } } } }, @@ -1182,6 +1764,12 @@ "state": "translated", "value": "VniDrop could not open its network sockets on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil." + } } } }, @@ -1194,6 +1782,12 @@ "state": "translated", "value": "VniDrop is still starting. Open the invitation again in a moment." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop démarre encore. Rouvrez l’invitation dans un instant." + } } } }, @@ -1206,6 +1800,12 @@ "state": "translated", "value": "The transfer could not be completed. Check your connection and try again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez." + } } } }, @@ -1218,6 +1818,12 @@ "state": "translated", "value": "Receiver name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom du destinataire" + } } } }, @@ -1230,6 +1836,12 @@ "state": "translated", "value": "Sender name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom de l’expéditeur" + } } } }, @@ -1242,6 +1854,12 @@ "state": "translated", "value": "Transfer name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom du transfert" + } } } }, @@ -1254,6 +1872,12 @@ "state": "translated", "value": "Display name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom d’affichage" + } } } }, @@ -1266,6 +1890,12 @@ "state": "translated", "value": "Permission needed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Autorisation requise" + } } } }, @@ -1278,6 +1908,12 @@ "state": "translated", "value": "Unavailable" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Indisponible" + } } } }, @@ -1290,6 +1926,12 @@ "state": "translated", "value": "Checking folder…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vérification du dossier…" + } } } }, @@ -1302,6 +1944,12 @@ "state": "translated", "value": "Ready" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt" + } } } }, @@ -1314,6 +1962,12 @@ "state": "translated", "value": "Files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fichiers" + } } } }, @@ -1326,6 +1980,12 @@ "state": "translated", "value": "Size" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Taille" + } } } }, @@ -1338,6 +1998,12 @@ "state": "translated", "value": "Status" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Statut" + } } } }, @@ -1350,6 +2016,12 @@ "state": "translated", "value": "Receive" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Recevoir" + } } } }, @@ -1362,6 +2034,12 @@ "state": "translated", "value": "Send" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer" + } } } }, @@ -1374,6 +2052,12 @@ "state": "translated", "value": "Settings" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réglages" + } } } }, @@ -1386,6 +2070,12 @@ "state": "translated", "value": "Network" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réseau" + } } } }, @@ -1398,6 +2088,12 @@ "state": "translated", "value": "Get notified about new receive requests while VniDrop is in the background." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan." + } } } }, @@ -1410,6 +2106,12 @@ "state": "translated", "value": "Notifications enabled." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Notifications activées." + } } } }, @@ -1422,6 +2124,12 @@ "state": "translated", "value": "Allow notifications" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Autoriser les notifications" + } } } }, @@ -1434,6 +2142,12 @@ "state": "translated", "value": "Notifications are turned off for VniDrop. You can enable them in Settings." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages." + } } } }, @@ -1446,6 +2160,12 @@ "state": "translated", "value": "Could not open notification settings." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible d’ouvrir les réglages de notifications." + } } } }, @@ -1458,6 +2178,12 @@ "state": "translated", "value": "Notifications" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Notifications" + } } } }, @@ -1470,6 +2196,12 @@ "state": "translated", "value": "Notifications are not available on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les notifications ne sont pas disponibles sur cet appareil." + } } } }, @@ -1482,6 +2214,12 @@ "state": "translated", "value": "Operating system" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Système d’exploitation" + } } } }, @@ -1494,6 +2232,12 @@ "state": "translated", "value": "Save received transfers to" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrer les transferts reçus dans" + } } } }, @@ -1506,6 +2250,12 @@ "state": "translated", "value": "Preferences" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préférences" + } } } }, @@ -1518,6 +2268,12 @@ "state": "translated", "value": "Cancelled" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annulé" + } } } }, @@ -1530,6 +2286,12 @@ "state": "translated", "value": "Completed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Terminé" + } } } }, @@ -1542,6 +2304,12 @@ "state": "translated", "value": "Connected" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connecté" + } } } }, @@ -1554,6 +2322,12 @@ "state": "translated", "value": "Connecting" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connexion" + } } } }, @@ -1566,6 +2340,12 @@ "state": "translated", "value": "Downloading" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Téléchargement" + } } } }, @@ -1578,6 +2358,12 @@ "state": "translated", "value": "Failed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Échec" + } } } }, @@ -1590,6 +2376,12 @@ "state": "translated", "value": "Getting ready" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation" + } } } }, @@ -1602,6 +2394,12 @@ "state": "translated", "value": "Transfer interrupted" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert interrompu" + } } } }, @@ -1614,6 +2412,12 @@ "state": "translated", "value": "Preparing" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation" + } } } }, @@ -1626,6 +2430,12 @@ "state": "translated", "value": "Ready" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt" + } } } }, @@ -1638,6 +2448,12 @@ "state": "translated", "value": "Receiving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réception" + } } } }, @@ -1650,6 +2466,12 @@ "state": "translated", "value": "Requesting access" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande d’accès" + } } } }, @@ -1662,6 +2484,12 @@ "state": "translated", "value": "Saving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrement" + } } } }, @@ -1674,6 +2502,12 @@ "state": "translated", "value": "Sending" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoi" + } } } }, @@ -1686,6 +2520,12 @@ "state": "translated", "value": "Sending to %1$d" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoi à %1$d" + } } } }, @@ -1698,6 +2538,12 @@ "state": "translated", "value": "Ready to share" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt à partager" + } } } }, @@ -1710,6 +2556,12 @@ "state": "translated", "value": "Working…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "En cours…" + } } } }, @@ -1722,6 +2574,12 @@ "state": "translated", "value": "Choose the invitation method available to you." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisissez la méthode d’invitation à votre disposition." + } } } }, @@ -1734,6 +2592,12 @@ "state": "translated", "value": "How would you like to connect?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Comment souhaitez-vous vous connecter ?" + } } } }, @@ -1746,6 +2610,12 @@ "state": "translated", "value": "Clear history" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Effacer l’historique" + } } } }, @@ -1758,6 +2628,12 @@ "state": "translated", "value": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil." + } } } }, @@ -1770,6 +2646,12 @@ "state": "translated", "value": "Clear receive history?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Effacer l’historique de réception ?" + } } } }, @@ -1782,6 +2664,12 @@ "state": "translated", "value": "Transfer received." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert reçu." + } } } }, @@ -1794,6 +2682,12 @@ "state": "translated", "value": "“%1$@” will be removed from VniDrop’s history. The downloaded file will remain on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "« %1$@ » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil." + } } } }, @@ -1806,6 +2700,12 @@ "state": "translated", "value": "Delete from receive history" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer de l’historique de réception" + } } } }, @@ -1818,6 +2718,12 @@ "state": "translated", "value": "Remove from history?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Retirer de l’historique ?" + } } } }, @@ -1830,6 +2736,12 @@ "state": "translated", "value": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC." + } } } }, @@ -1842,6 +2754,12 @@ "state": "translated", "value": "Nothing received yet" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Rien reçu pour l’instant" + } } } }, @@ -1854,6 +2772,12 @@ "state": "translated", "value": "Receive history cleared." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Historique de réception effacé." + } } } }, @@ -1866,6 +2790,12 @@ "state": "translated", "value": "History" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Historique" + } } } }, @@ -1878,6 +2808,12 @@ "state": "translated", "value": "Open a .vnd invitation" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ouvrir une invitation .vnd" + } } } }, @@ -1890,6 +2826,12 @@ "state": "translated", "value": "Choose an invitation saved or shared to this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisissez une invitation enregistrée ou partagée sur cet appareil." + } } } }, @@ -1902,6 +2844,12 @@ "state": "translated", "value": "Read NFC tag" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Lire un tag NFC" + } } } }, @@ -1914,6 +2862,12 @@ "state": "translated", "value": "Hold this device near the sender’s invitation tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approchez cet appareil du tag d’invitation de l’expéditeur." + } } } }, @@ -1926,6 +2880,12 @@ "state": "translated", "value": "Scan QR code" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Scanner un QR code" + } } } }, @@ -1938,6 +2898,12 @@ "state": "translated", "value": "Use the camera to scan the sender’s VniDrop code." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur." + } } } }, @@ -1950,6 +2916,12 @@ "state": "translated", "value": "Transfers you’ve received on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transferts que vous avez reçus sur cet appareil." + } } } }, @@ -1962,6 +2934,12 @@ "state": "translated", "value": "Hold near the NFC tag…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approchez du tag NFC…" + } } } }, @@ -1974,6 +2952,12 @@ "state": "translated", "value": "Couldn’t open VniDrop in Files." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible d’ouvrir VniDrop dans Fichiers." + } } } }, @@ -1986,6 +2970,12 @@ "state": "translated", "value": "Review transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vérifier le transfert" + } } } }, @@ -1998,6 +2988,12 @@ "state": "translated", "value": "Receive" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Recevoir" + } } } }, @@ -2010,6 +3006,12 @@ "state": "translated", "value": "VniDrop transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert VniDrop" + } } } }, @@ -2022,6 +3024,12 @@ "state": "translated", "value": "Anyone with this transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Toute personne disposant de ce transfert" + } } } }, @@ -2034,6 +3042,12 @@ "state": "translated", "value": "No approval is required. Only use this for items you are comfortable sharing." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager." + } } } }, @@ -2046,6 +3060,12 @@ "state": "translated", "value": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles." + } } } }, @@ -2058,6 +3078,12 @@ "state": "translated", "value": "Ask before each download" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demander avant chaque téléchargement" + } } } }, @@ -2070,6 +3096,12 @@ "state": "translated", "value": "You approve or refuse every new receiver." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vous approuvez ou refusez chaque nouveau destinataire." + } } } }, @@ -2082,6 +3114,12 @@ "state": "translated", "value": "Who can receive it?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Qui peut le recevoir ?" + } } } }, @@ -2094,6 +3132,12 @@ "state": "translated", "value": "Select files or a folder from this device. You can review the selection before creating the transfer." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert." + } } } }, @@ -2106,6 +3150,12 @@ "state": "translated", "value": "Choose what to share" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisissez quoi partager" + } } } }, @@ -2118,6 +3168,12 @@ "state": "translated", "value": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation." + } } } }, @@ -2130,6 +3186,12 @@ "state": "translated", "value": "Nothing shared yet" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Rien partagé pour l’instant" + } } } }, @@ -2142,6 +3204,12 @@ "state": "translated", "value": "Size unavailable" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Taille indisponible" + } } } }, @@ -2154,6 +3222,12 @@ "state": "translated", "value": "Folder" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Dossier" + } } } }, @@ -2166,6 +3240,12 @@ "state": "translated", "value": "Create a new transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Créer un nouveau transfert" + } } } }, @@ -2178,6 +3258,12 @@ "state": "translated", "value": "New transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nouveau transfert" + } } } }, @@ -2190,6 +3276,12 @@ "state": "translated", "value": "Review transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vérifier le transfert" + } } } }, @@ -2202,6 +3294,12 @@ "state": "translated", "value": "%1$d files selected" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d fichiers sélectionnés" + } } } }, @@ -2214,6 +3312,12 @@ "state": "translated", "value": "Stop sharing" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Arrêter le partage" + } } } }, @@ -2226,6 +3330,12 @@ "state": "translated", "value": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté." + } } } }, @@ -2238,6 +3348,12 @@ "state": "translated", "value": "Transfers you’re sharing from this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transferts que vous partagez depuis cet appareil." + } } } }, @@ -2250,6 +3366,12 @@ "state": "translated", "value": "Send" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer" + } } } }, @@ -2262,6 +3384,12 @@ "state": "translated", "value": "Transfer created." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert créé." + } } } }, @@ -2274,6 +3402,12 @@ "state": "translated", "value": "Transfer details" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Détails du transfert" + } } } }, @@ -2286,6 +3420,12 @@ "state": "translated", "value": "Your transfers" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vos transferts" + } } } }, @@ -2298,6 +3438,12 @@ "state": "translated", "value": "Your name, where transfers are saved, appearance, and notifications." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications." + } } } }, @@ -2310,6 +3456,12 @@ "state": "translated", "value": "Settings" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réglages" + } } } }, @@ -2322,6 +3474,12 @@ "state": "translated", "value": "Dismiss" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ignorer" + } } } }, @@ -2334,6 +3492,12 @@ "state": "translated", "value": "Available" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Disponible" + } } } }, @@ -2346,6 +3510,12 @@ "state": "translated", "value": "Cancelled" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annulé" + } } } }, @@ -2358,6 +3528,12 @@ "state": "translated", "value": "Completed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Terminé" + } } } }, @@ -2370,6 +3546,12 @@ "state": "translated", "value": "Failed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Échec" + } } } }, @@ -2382,6 +3564,12 @@ "state": "translated", "value": "Preparing" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation" + } } } }, @@ -2394,6 +3582,12 @@ "state": "translated", "value": "Receiving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réception" + } } } }, @@ -2406,6 +3600,12 @@ "state": "translated", "value": "Stopped" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Arrêté" + } } } }, @@ -2418,6 +3618,12 @@ "state": "translated", "value": "Calculating…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Calcul…" + } } } }, @@ -2430,6 +3636,12 @@ "state": "translated", "value": "Delete all transfers" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer tous les transferts" + } } } }, @@ -2442,6 +3654,12 @@ "state": "translated", "value": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible." + } } } }, @@ -2454,6 +3672,12 @@ "state": "translated", "value": "Deleting…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Suppression…" + } } } }, @@ -2466,6 +3690,12 @@ "state": "translated", "value": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici." + } } } }, @@ -2478,6 +3708,12 @@ "state": "translated", "value": "Received files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fichiers reçus" + } } } }, @@ -2490,6 +3726,12 @@ "state": "translated", "value": "Temporary files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fichiers temporaires" + } } } }, @@ -2502,6 +3744,12 @@ "state": "translated", "value": "Storage" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Stockage" + } } } }, @@ -2514,6 +3762,12 @@ "state": "translated", "value": "Total" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Total" + } } } }, @@ -2526,6 +3780,12 @@ "state": "translated", "value": "Transfer data" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Données de transfert" + } } } }, @@ -2538,6 +3798,12 @@ "state": "translated", "value": "All transfers deleted" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Tous les transferts supprimés" + } } } }, @@ -2550,6 +3816,12 @@ "state": "translated", "value": "See important updates for this transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Consultez les mises à jour importantes de ce transfert" + } } } }, @@ -2562,6 +3834,12 @@ "state": "translated", "value": "Activity" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Activité" + } } } }, @@ -2574,6 +3852,12 @@ "state": "translated", "value": "“%1$@” will stop being shared and its transfer history will be removed from this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "« %1$@ » cessera d’être partagé et son historique de transfert sera retiré de cet appareil." + } } } }, @@ -2586,6 +3870,12 @@ "state": "translated", "value": "Delete transfer?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer le transfert ?" + } } } }, @@ -2598,6 +3888,12 @@ "state": "translated", "value": "Transfer deleted." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert supprimé." + } } } }, @@ -2610,6 +3906,12 @@ "state": "translated", "value": "Deleting…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Suppression…" + } } } }, @@ -2622,6 +3924,12 @@ "state": "translated", "value": "Transfer details" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Détails du transfert" + } } } }, @@ -2634,6 +3942,12 @@ "state": "translated", "value": "Receiver access approved" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Accès du destinataire approuvé" + } } } }, @@ -2646,6 +3960,12 @@ "state": "translated", "value": "A receiver completed the transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinataire a terminé le transfert" + } } } }, @@ -2658,6 +3978,12 @@ "state": "translated", "value": "Connecting to sender" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connexion à l’expéditeur" + } } } }, @@ -2670,6 +3996,12 @@ "state": "translated", "value": "Downloading" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Téléchargement" + } } } }, @@ -2682,6 +4014,12 @@ "state": "translated", "value": "The transfer encountered a problem" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le transfert a rencontré un problème" + } } } }, @@ -2694,6 +4032,12 @@ "state": "translated", "value": "Preparing your transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation de votre transfert" + } } } }, @@ -2706,6 +4050,12 @@ "state": "translated", "value": "Ready to share" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt à partager" + } } } }, @@ -2718,6 +4068,12 @@ "state": "translated", "value": "Receiver access refused" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Accès du destinataire refusé" + } } } }, @@ -2730,6 +4086,12 @@ "state": "translated", "value": "A receiver requested access" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinataire a demandé l’accès" + } } } }, @@ -2742,6 +4104,12 @@ "state": "translated", "value": "Saving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrement" + } } } }, @@ -2754,6 +4122,12 @@ "state": "translated", "value": "Sharing stopped" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partage arrêté" + } } } }, @@ -2766,6 +4140,12 @@ "state": "translated", "value": "Transfer updated" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert mis à jour" + } } } }, @@ -2790,6 +4170,24 @@ } } } + }, + "fr": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d fichier" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d fichiers" + } + } + } + } } } }, @@ -2802,6 +4200,12 @@ "state": "translated", "value": "Invitation saved." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Invitation enregistrée." + } } } }, @@ -2814,6 +4218,12 @@ "state": "translated", "value": "Nearby device" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Appareil à proximité" + } } } }, @@ -2826,6 +4236,12 @@ "state": "translated", "value": "NFC tag writing is not available on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "L’écriture de tag NFC n’est pas disponible sur cet appareil." + } } } }, @@ -2838,6 +4254,12 @@ "state": "translated", "value": "Hold your device near a writable NFC tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approchez votre appareil d’un tag NFC inscriptible." + } } } }, @@ -2850,6 +4272,12 @@ "state": "translated", "value": "Invitation written to the NFC tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Invitation écrite sur le tag NFC." + } } } }, @@ -2862,6 +4290,12 @@ "state": "translated", "value": "There is no activity to show yet." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Aucune activité à afficher pour l’instant." + } } } }, @@ -2874,6 +4308,12 @@ "state": "translated", "value": "Nobody has requested this transfer yet." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Personne n’a encore demandé ce transfert." + } } } }, @@ -2886,6 +4326,12 @@ "state": "translated", "value": "Approved — waiting for completion" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approuvé — en attente de la fin" + } } } }, @@ -2898,6 +4344,12 @@ "state": "translated", "value": "Received successfully" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Reçu avec succès" + } } } }, @@ -2910,6 +4362,12 @@ "state": "translated", "value": "Request expired" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande expirée" + } } } }, @@ -2922,6 +4380,12 @@ "state": "translated", "value": "Request refused" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande refusée" + } } } }, @@ -2934,6 +4398,12 @@ "state": "translated", "value": "Waiting for your approval" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "En attente de votre approbation" + } } } }, @@ -2946,6 +4416,12 @@ "state": "translated", "value": "Status unavailable" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Statut indisponible" + } } } }, @@ -2958,6 +4434,12 @@ "state": "translated", "value": "%1$d completed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d terminés" + } } } }, @@ -2970,6 +4452,12 @@ "state": "translated", "value": "Requests, approvals, and completed deliveries" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demandes, approbations et livraisons terminées" + } } } }, @@ -2982,6 +4470,12 @@ "state": "translated", "value": "%1$d waiting" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d en attente" + } } } }, @@ -2994,6 +4488,12 @@ "state": "translated", "value": "Receivers" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Destinataires" + } } } }, @@ -3006,6 +4506,12 @@ "state": "translated", "value": "Scan with VniDrop to receive this transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Scannez avec VniDrop pour recevoir ce transfert" + } } } }, @@ -3018,6 +4524,12 @@ "state": "translated", "value": "QR code, invitation file, and nearby options" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "QR code, fichier d’invitation et options à proximité" + } } } }, @@ -3030,6 +4542,12 @@ "state": "translated", "value": "Share" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partager" + } } } }, @@ -3042,6 +4560,12 @@ "state": "translated", "value": "Not available" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Non disponible" + } } } }, @@ -3054,6 +4578,12 @@ "state": "translated", "value": "App version" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Version de l’app" + } } } } diff --git a/localization/strings.json b/localization/strings.json index 013448d..a375f30 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -2,7 +2,8 @@ "$schema": "./schema.json", "sourceLanguage": "en", "supportedLanguages": [ - "en" + "en", + "fr" ], "strings": { "%@": { @@ -31,7 +32,8 @@ } ], "translations": { - "en": "{arg1} {arg2} · {arg3}" + "en": "{arg1} {arg2} · {arg3}", + "fr": "{arg1} {arg2} · {arg3}" } }, "%@ · %@": { @@ -50,7 +52,8 @@ } ], "translations": { - "en": "{arg1} · {arg2}" + "en": "{arg1} · {arg2}", + "fr": "{arg1} · {arg2}" } }, "%@%%": { @@ -62,169 +65,197 @@ "about_bug_report": { "context": "About screen: button/link that opens the bug report form.", "translations": { - "en": "Report a bug" + "en": "Report a bug", + "fr": "Signaler un bug" } }, "about_description": { "context": "About screen: intro paragraph describing what VniDrop does.", "translations": { - "en": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done." + "en": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done.", + "fr": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé." } }, "about_is_direct": { "context": "About screen, 'What VniDrop is' list: point about direct device-to-device transfer.", "translations": { - "en": "A direct device-to-device transfer — your files go straight to the receiver." + "en": "A direct device-to-device transfer — your files go straight to the receiver.", + "fr": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire." } }, "about_is_encrypted": { "context": "About screen, 'What VniDrop is' list: point about encrypted, verified connections.", "translations": { - "en": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash." + "en": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash.", + "fr": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu." } }, "about_is_in_control": { "context": "About screen, 'What VniDrop is' list: point about controlling who receives.", "translations": { - "en": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation." + "en": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation.", + "fr": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation." } }, "about_is_no_account": { "context": "About screen, 'What VniDrop is' list: point about being account-free.", "translations": { - "en": "Account-free — there’s nothing to sign up for." + "en": "Account-free — there’s nothing to sign up for.", + "fr": "Sans compte — il n’y a rien à créer." } }, "about_is_open": { "context": "About screen, 'What VniDrop is' list: point about being open source.", "translations": { - "en": "Open source, released under the Apache 2.0 license." + "en": "Open source, released under the Apache 2.0 license.", + "fr": "Open source, publié sous licence Apache 2.0." } }, "about_is_title": { "context": "About screen: section heading for the 'What VniDrop is' list.", "translations": { - "en": "What VniDrop is" + "en": "What VniDrop is", + "fr": "Ce qu’est VniDrop" } }, "about_isnt_cloud": { "context": "About screen, 'What VniDrop isn't' list: point about not being cloud storage.", "translations": { - "en": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer." + "en": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer.", + "fr": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert." } }, "about_isnt_public": { "context": "About screen, 'What VniDrop isn't' list: point about invitations not being public broadcasts.", "translations": { - "en": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby." + "en": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby.", + "fr": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage." } }, "about_isnt_sync": { "context": "About screen, 'What VniDrop isn't' list: point about not being sync/backup.", "translations": { - "en": "Not a sync or backup service." + "en": "Not a sync or backup service.", + "fr": "Pas un service de synchronisation ou de sauvegarde." } }, "about_isnt_title": { "context": "About screen: section heading for the 'What VniDrop isn't' list.", "translations": { - "en": "What VniDrop isn’t" + "en": "What VniDrop isn’t", + "fr": "Ce que VniDrop n’est pas" } }, "about_license_label": { "context": "About screen: label for the license row.", "translations": { - "en": "License" + "en": "License", + "fr": "Licence" } }, "about_privacy": { "context": "About screen: link to the privacy policy.", "translations": { - "en": "Privacy policy" + "en": "Privacy policy", + "fr": "Politique de confidentialité" } }, "about_privacy_capability": { "context": "About screen, Privacy & security list: point that invitations are capabilities to share carefully.", "translations": { - "en": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”" + "en": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”", + "fr": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert »." } }, "about_privacy_deny": { "context": "About screen, Privacy & security list: point about denying unknown requests by default.", "translations": { - "en": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests." + "en": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests.", + "fr": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues." } }, "about_privacy_local": { "context": "About screen, Privacy & security list: point about received files staying local and never overwriting.", "translations": { - "en": "Received files are saved on your device and never silently overwrite an existing file." + "en": "Received files are saved on your device and never silently overwrite an existing file.", + "fr": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant." } }, "about_privacy_policy_label": { "context": "About screen: label for the privacy policy row.", "translations": { - "en": "Privacy policy" + "en": "Privacy policy", + "fr": "Politique de confidentialité" } }, "about_privacy_relay": { "context": "About screen, Privacy & security list: point explaining encrypted relays.", "translations": { - "en": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files." + "en": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files.", + "fr": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers." } }, "about_privacy_title": { "context": "About screen: section heading for the Privacy & security list.", "translations": { - "en": "Privacy & security" + "en": "Privacy & security", + "fr": "Confidentialité et sécurité" } }, "about_tagline": { "context": "About screen: short tagline under the app name.", "translations": { - "en": "Send files directly. Stay in control of who receives them." + "en": "Send files directly. Stay in control of who receives them.", + "fr": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit." } }, "about_title": { "context": "About screen: navigation/screen title.", "translations": { - "en": "About" + "en": "About", + "fr": "À propos" } }, "appearance_auto_description": { "context": "Settings > Appearance: description for the System/auto option.", "translations": { - "en": "Match this device’s light or dark appearance." + "en": "Match this device’s light or dark appearance.", + "fr": "Suivre l’apparence claire ou sombre de cet appareil." } }, "appearance_dark_mode": { "context": "Settings > Appearance: label for the dark theme option.", "translations": { - "en": "Dark mode" + "en": "Dark mode", + "fr": "Mode sombre" } }, "appearance_light_mode": { "context": "Settings > Appearance: label for the light theme option.", "translations": { - "en": "Light mode" + "en": "Light mode", + "fr": "Mode clair" } }, "appearance_system_mode": { "context": "Settings > Appearance: label for the follow-system option.", "translations": { - "en": "System" + "en": "System", + "fr": "Système" } }, "appearance_title": { "context": "Settings > Appearance: section title.", "translations": { - "en": "Appearance" + "en": "Appearance", + "fr": "Apparence" } }, "approval_connection_request": { "context": "Approval prompt: title when a receiver requests to download a transfer.", "translations": { - "en": "Receive request" + "en": "Receive request", + "fr": "Demande de réception" } }, "approval_endpoint_id": { @@ -236,13 +267,15 @@ } ], "translations": { - "en": "Device ID: {arg1}" + "en": "Device ID: {arg1}", + "fr": "Identifiant de l’appareil : {arg1}" } }, "approval_nearby_device": { "context": "Approval prompt: fallback label for a requester with no display name.", "translations": { - "en": "A nearby device" + "en": "A nearby device", + "fr": "Un appareil à proximité" } }, "approval_pending_count": { @@ -254,7 +287,8 @@ } ], "translations": { - "en": "{count} requests waiting" + "en": "{count} requests waiting", + "fr": "{count} demandes en attente" } }, "approval_request_body": { @@ -270,643 +304,750 @@ } ], "translations": { - "en": "{arg1} wants to receive “{arg2}”." + "en": "{arg1} wants to receive “{arg2}”.", + "fr": "{arg1} souhaite recevoir « {arg2} »." } }, "battery_level_title": { "context": "Device information row: battery level label.", "translations": { - "en": "Battery level" + "en": "Battery level", + "fr": "Niveau de batterie" } }, "bug_report_contact_hint": { "context": "Bug report form: placeholder text in the contact email field.", "translations": { - "en": "name@example.com" + "en": "name@example.com", + "fr": "nom@exemple.com" } }, "bug_report_contact_label": { "context": "Bug report form: label for the optional contact email field.", "translations": { - "en": "Contact email (optional)" + "en": "Contact email (optional)", + "fr": "E-mail de contact (facultatif)" } }, "bug_report_description": { "context": "Bug report form: intro text explaining what gets attached.", "translations": { - "en": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)." + "en": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted).", + "fr": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées)." } }, "bug_report_device_section": { "context": "Bug report form: heading for the attached device information section.", "translations": { - "en": "Device information" + "en": "Device information", + "fr": "Informations sur l’appareil" } }, "bug_report_expected_hint": { "context": "Bug report form: placeholder in the 'what did you expect' field.", "translations": { - "en": "Describe what you expected to happen" + "en": "Describe what you expected to happen", + "fr": "Décrivez ce à quoi vous vous attendiez" } }, "bug_report_expected_label": { "context": "Bug report form: label for the expected-behavior field.", "translations": { - "en": "What did you expect?" + "en": "What did you expect?", + "fr": "À quoi vous attendiez-vous ?" } }, "bug_report_include_logs": { "context": "Bug report form: toggle label to attach recent logs.", "translations": { - "en": "Include recent logs" + "en": "Include recent logs", + "fr": "Inclure les journaux récents" } }, "bug_report_include_logs_description": { "context": "Bug report form: explanation under the include-logs toggle.", "translations": { - "en": "Helps us diagnose the issue. Sensitive values are redacted before sending." + "en": "Helps us diagnose the issue. Sensitive values are redacted before sending.", + "fr": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi." } }, "bug_report_logs_size": { "context": "Bug report form: label showing the size of the log attachment.", "translations": { - "en": "Log attachment size" + "en": "Log attachment size", + "fr": "Taille de la pièce jointe des journaux" } }, "bug_report_missing_expected": { "context": "Bug report form: validation error when the expected-behavior field is empty.", "translations": { - "en": "Please describe what you expected." + "en": "Please describe what you expected.", + "fr": "Veuillez décrire ce à quoi vous vous attendiez." } }, "bug_report_missing_what": { "context": "Bug report form: validation error when the what-happened field is empty.", "translations": { - "en": "Please describe what happened." + "en": "Please describe what happened.", + "fr": "Veuillez décrire ce qui s’est passé." } }, "bug_report_steps_hint": { "context": "Bug report form: placeholder in the steps-to-reproduce field.", "translations": { - "en": "List the steps to reproduce the issue" + "en": "List the steps to reproduce the issue", + "fr": "Listez les étapes pour reproduire le problème" } }, "bug_report_steps_label": { "context": "Bug report form: label for the optional steps-to-reproduce field.", "translations": { - "en": "Steps to reproduce (optional)" + "en": "Steps to reproduce (optional)", + "fr": "Étapes pour reproduire (facultatif)" } }, "bug_report_submit": { "context": "Bug report form: submit button.", "translations": { - "en": "Submit report" + "en": "Submit report", + "fr": "Envoyer le rapport" } }, "bug_report_submit_failed": { "context": "Bug report form: error message when submission fails.", "translations": { - "en": "Could not submit the bug report. Try again later." + "en": "Could not submit the bug report. Try again later.", + "fr": "Impossible d’envoyer le rapport de bug. Réessayez plus tard." } }, "bug_report_submitted": { "context": "Bug report form: confirmation message after a successful submission.", "translations": { - "en": "Thanks — your bug report was recorded." + "en": "Thanks — your bug report was recorded.", + "fr": "Merci — votre rapport de bug a été enregistré." } }, "bug_report_submitting": { "context": "Bug report form: progress label while the report is being sent.", "translations": { - "en": "Submitting…" + "en": "Submitting…", + "fr": "Envoi…" } }, "bug_report_what_hint": { "context": "Bug report form: placeholder in the what-happened field.", "translations": { - "en": "Describe what happened" + "en": "Describe what happened", + "fr": "Décrivez ce qui s’est passé" } }, "bug_report_what_label": { "context": "Bug report form: label for the what-happened field.", "translations": { - "en": "What happened?" + "en": "What happened?", + "fr": "Que s’est-il passé ?" } }, "button_approve": { "context": "Button: approve a receiver's request.", "translations": { - "en": "Approve" + "en": "Approve", + "fr": "Approuver" } }, "button_back": { "context": "Button: go back to the previous step/screen.", "translations": { - "en": "Back" + "en": "Back", + "fr": "Retour" } }, "button_cancel": { "context": "Button: cancel the current action or dialog.", "translations": { - "en": "Cancel" + "en": "Cancel", + "fr": "Annuler" } }, "button_cancel_receive": { "context": "Button: cancel an in-progress receive.", "translations": { - "en": "Cancel" + "en": "Cancel", + "fr": "Annuler" } }, "button_change_files": { "context": "Button: change the selected files in the send flow.", "translations": { - "en": "Change files" + "en": "Change files", + "fr": "Modifier les fichiers" } }, "button_choose_files": { "context": "Button: open the file picker to choose files to send.", "translations": { - "en": "Choose files" + "en": "Choose files", + "fr": "Choisir des fichiers" } }, "button_choose_folder": { "context": "Button: open the folder picker (send selection or receive folder).", "translations": { - "en": "Choose folder" + "en": "Choose folder", + "fr": "Choisir un dossier" } }, "button_clear": { "context": "Button: clear the current input or selection.", "translations": { - "en": "Clear" + "en": "Clear", + "fr": "Effacer" } }, "button_close": { "context": "Button: close the current sheet/dialog.", "translations": { - "en": "Close" + "en": "Close", + "fr": "Fermer" } }, "button_create_new_transfer": { "context": "Button: start creating a new transfer (Send tab).", "translations": { - "en": "New transfer" + "en": "New transfer", + "fr": "Nouveau transfert" } }, "button_delete_transfer": { "context": "Button: delete a transfer.", "translations": { - "en": "Delete transfer" + "en": "Delete transfer", + "fr": "Supprimer le transfert" } }, "button_download_invitation": { "context": "Button: save the invitation as a .vnd file.", "translations": { - "en": "Save .vnd file" + "en": "Save .vnd file", + "fr": "Enregistrer le fichier .vnd" } }, "button_native_share": { "context": "Button: open the OS share sheet to share the invitation.", "translations": { - "en": "Share invitation" + "en": "Share invitation", + "fr": "Partager l’invitation" } }, "button_open_settings": { "context": "Button: open the OS Settings app (e.g. for permissions).", "translations": { - "en": "Open Settings" + "en": "Open Settings", + "fr": "Ouvrir les Réglages" } }, "button_receive": { "context": "Button: receive label (Receive action).", "translations": { - "en": "Receive" + "en": "Receive", + "fr": "Recevoir" } }, "button_receive_files": { "context": "Button: start receiving a transfer.", "translations": { - "en": "Start receiving" + "en": "Start receiving", + "fr": "Commencer à recevoir" } }, "button_refuse": { "context": "Button: refuse a receiver's request.", "translations": { - "en": "Refuse" + "en": "Refuse", + "fr": "Refuser" } }, "button_remove_file": { "context": "Button: remove a single file from the send selection.", "translations": { - "en": "Remove file" + "en": "Remove file", + "fr": "Retirer le fichier" } }, "button_reset_default": { "context": "Button: reset a setting to its default value.", "translations": { - "en": "Use default" + "en": "Use default", + "fr": "Valeur par défaut" } }, "button_retry": { "context": "Button: retry after a failed operation.", "translations": { - "en": "Retry" + "en": "Retry", + "fr": "Réessayer" } }, "button_share_file": { "context": "Button: start sharing the transfer (make it available).", "translations": { - "en": "Start sharing" + "en": "Start sharing", + "fr": "Commencer le partage" } }, "button_sharing_file": { "context": "Button: disabled/loading state while the transfer is being prepared.", "translations": { - "en": "Preparing transfer…" + "en": "Preparing transfer…", + "fr": "Préparation du transfert…" } }, "button_show_in_files": { "context": "Button: reveal a received file in the Files app.", "translations": { - "en": "Show in Files" + "en": "Show in Files", + "fr": "Afficher dans Fichiers" } }, "button_write_nfc": { "context": "Button: write the invitation to an NFC tag.", "translations": { - "en": "Write to NFC tag" + "en": "Write to NFC tag", + "fr": "Écrire sur un tag NFC" } }, "device_model_title": { "context": "Device information row: device model label.", "translations": { - "en": "Device model" + "en": "Device model", + "fr": "Modèle de l’appareil" } }, "device_name_title": { "context": "Device information row: device name label.", "translations": { - "en": "Device name" + "en": "Device name", + "fr": "Nom de l’appareil" } }, "diagnostics_description": { "context": "Settings > Diagnostics: explanation of what anonymous diagnostics collect.", "translations": { - "en": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included." + "en": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included.", + "fr": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus." } }, "diagnostics_disabled_message": { "context": "Settings > Diagnostics: confirmation shown when diagnostics are turned off.", "translations": { - "en": "Diagnostics sharing is off." + "en": "Diagnostics sharing is off.", + "fr": "Le partage des diagnostics est désactivé." } }, "diagnostics_enabled_message": { "context": "Settings > Diagnostics: confirmation shown when diagnostics are turned on.", "translations": { - "en": "Diagnostics sharing is on." + "en": "Diagnostics sharing is on.", + "fr": "Le partage des diagnostics est activé." } }, "diagnostics_title": { "context": "Settings > Diagnostics: toggle title.", "translations": { - "en": "Share diagnostics" + "en": "Share diagnostics", + "fr": "Partager les diagnostics" } }, "error_camera": { "context": "Error: camera permission is needed to scan a QR code.", "translations": { - "en": "Camera access is required to scan a QR code." + "en": "Camera access is required to scan a QR code.", + "fr": "L’accès à la caméra est nécessaire pour scanner un QR code." } }, "error_device_info": { "context": "Error: device information could not be loaded.", "translations": { - "en": "Could not load device information." + "en": "Could not load device information.", + "fr": "Impossible de charger les informations de l’appareil." } }, "error_filesystem": { "context": "Error: the selected files/folder could not be accessed.", "translations": { - "en": "VniDrop could not access the selected files or folder. Check permissions and try again." + "en": "VniDrop could not access the selected files or folder. Check permissions and try again.", + "fr": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez." } }, "error_generic": { "context": "Error: generic fallback message.", "translations": { - "en": "Something went wrong. Try again." + "en": "Something went wrong. Try again.", + "fr": "Une erreur est survenue. Réessayez." } }, "error_initialization": { "context": "Error: the app failed to finish starting up.", "translations": { - "en": "VniDrop could not finish starting up. Close the app and try again." + "en": "VniDrop could not finish starting up. Close the app and try again.", + "fr": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez." } }, "error_invalid_ticket": { "context": "Error: the invitation/ticket could not be parsed.", "translations": { - "en": "This invitation could not be read. Ask the sender for a new one." + "en": "This invitation could not be read. Ask the sender for a new one.", + "fr": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur." } }, "error_invitation_empty": { "context": "Error: the opened invitation contained no data.", "translations": { - "en": "That invitation is empty. Try opening it again." + "en": "That invitation is empty. Try opening it again.", + "fr": "Cette invitation est vide. Essayez de l’ouvrir à nouveau." } }, "error_missing_native_library": { "context": "Error: the native library is missing from the build.", "translations": { - "en": "The native VniDrop library is missing from this build." + "en": "The native VniDrop library is missing from this build.", + "fr": "La bibliothèque native de VniDrop est absente de cette version." } }, "error_nfc": { "context": "Error: the NFC tag could not be read/used.", "translations": { - "en": "This NFC tag could not be used. Try another tag." + "en": "This NFC tag could not be used. Try another tag.", + "fr": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre." } }, "error_permission": { "context": "Error: the transfer was not approved or was refused by the sender.", "translations": { - "en": "The sender has not approved this transfer, or it was refused." + "en": "The sender has not approved this transfer, or it was refused.", + "fr": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé." } }, "error_repository": { "context": "Error: transfer data could not be saved locally.", "translations": { - "en": "VniDrop could not save transfer data on this device." + "en": "VniDrop could not save transfer data on this device.", + "fr": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil." } }, "error_selection_failed": { "context": "Error: the selected item could not be opened.", "translations": { - "en": "Could not open the selected item. Try choosing it again." + "en": "Could not open the selected item. Try choosing it again.", + "fr": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau." } }, "error_share_empty": { "context": "Error: attempted to share with nothing selected.", "translations": { - "en": "Select at least one item to share." + "en": "Select at least one item to share.", + "fr": "Sélectionnez au moins un élément à partager." } }, "error_socket_bind": { "context": "Error: the app could not open its network sockets.", "translations": { - "en": "VniDrop could not open its network sockets on this device." + "en": "VniDrop could not open its network sockets on this device.", + "fr": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil." } }, "error_starting_up": { "context": "Error: an invitation was opened before startup finished.", "translations": { - "en": "VniDrop is still starting. Open the invitation again in a moment." + "en": "VniDrop is still starting. Open the invitation again in a moment.", + "fr": "VniDrop démarre encore. Rouvrez l’invitation dans un instant." } }, "error_transfer": { "context": "Error: the transfer could not be completed.", "translations": { - "en": "The transfer could not be completed. Check your connection and try again." + "en": "The transfer could not be completed. Check your connection and try again.", + "fr": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez." } }, "field_receiver_name": { "context": "Text field label: the receiver's display name.", "translations": { - "en": "Receiver name" + "en": "Receiver name", + "fr": "Nom du destinataire" } }, "field_sender_name": { "context": "Text field label: the sender's display name.", "translations": { - "en": "Sender name" + "en": "Sender name", + "fr": "Nom de l’expéditeur" } }, "field_transfer_name": { "context": "Text field label: the name given to a transfer.", "translations": { - "en": "Transfer name" + "en": "Transfer name", + "fr": "Nom du transfert" } }, "field_username": { "context": "Settings text field label: this device's display name.", "translations": { - "en": "Display name" + "en": "Display name", + "fr": "Nom d’affichage" } }, "folder_status_permission_required": { "context": "Receive-folder status: permission is required to write to the chosen folder.", "translations": { - "en": "Permission needed" + "en": "Permission needed", + "fr": "Autorisation requise" } }, "folder_status_unavailable": { "context": "Receive-folder status: the chosen folder is unavailable.", "translations": { - "en": "Unavailable" + "en": "Unavailable", + "fr": "Indisponible" } }, "folder_status_validating": { "context": "Receive-folder status: the folder is being checked.", "translations": { - "en": "Checking folder…" + "en": "Checking folder…", + "fr": "Vérification du dossier…" } }, "folder_status_writable": { "context": "Receive-folder status: the folder is valid and writable.", "translations": { - "en": "Ready" + "en": "Ready", + "fr": "Prêt" } }, "metadata_files": { "context": "Transfer metadata label: number of files.", "translations": { - "en": "Files" + "en": "Files", + "fr": "Fichiers" } }, "metadata_size": { "context": "Transfer metadata label: total size.", "translations": { - "en": "Size" + "en": "Size", + "fr": "Taille" } }, "metadata_status": { "context": "Transfer metadata label: current status.", "translations": { - "en": "Status" + "en": "Status", + "fr": "Statut" } }, "nav_receive": { "context": "Bottom navigation: Receive tab label.", "translations": { - "en": "Receive" + "en": "Receive", + "fr": "Recevoir" } }, "nav_send": { "context": "Bottom navigation: Send tab label.", "translations": { - "en": "Send" + "en": "Send", + "fr": "Envoyer" } }, "nav_settings": { "context": "Bottom navigation: Settings tab label.", "translations": { - "en": "Settings" + "en": "Settings", + "fr": "Réglages" } }, "network_title": { "context": "Device information row: network label.", "translations": { - "en": "Network" + "en": "Network", + "fr": "Réseau" } }, "notifications_description": { "context": "Settings > Notifications: explanation of what notifications are used for.", "translations": { - "en": "Get notified about new receive requests while VniDrop is in the background." + "en": "Get notified about new receive requests while VniDrop is in the background.", + "fr": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan." } }, "notifications_enabled_message": { "context": "Settings > Notifications: confirmation when notifications are enabled.", "translations": { - "en": "Notifications enabled." + "en": "Notifications enabled.", + "fr": "Notifications activées." } }, "notifications_local_title": { "context": "Settings > Notifications: label for the allow-notifications action.", "translations": { - "en": "Allow notifications" + "en": "Allow notifications", + "fr": "Autoriser les notifications" } }, "notifications_permission_denied": { "context": "Settings > Notifications: message when the OS permission is denied.", "translations": { - "en": "Notifications are turned off for VniDrop. You can enable them in Settings." + "en": "Notifications are turned off for VniDrop. You can enable them in Settings.", + "fr": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages." } }, "notifications_settings_open_failed": { "context": "Settings > Notifications: error when the OS notification settings can't be opened.", "translations": { - "en": "Could not open notification settings." + "en": "Could not open notification settings.", + "fr": "Impossible d’ouvrir les réglages de notifications." } }, "notifications_title": { "context": "Settings > Notifications: section title.", "translations": { - "en": "Notifications" + "en": "Notifications", + "fr": "Notifications" } }, "notifications_unsupported": { "context": "Settings > Notifications: message when notifications aren't supported on the device.", "translations": { - "en": "Notifications are not available on this device." + "en": "Notifications are not available on this device.", + "fr": "Les notifications ne sont pas disponibles sur cet appareil." } }, "os_version_title": { "context": "Device information row: operating system version label.", "translations": { - "en": "Operating system" + "en": "Operating system", + "fr": "Système d’exploitation" } }, "preferences_receive_folder_title": { "context": "Settings > Preferences: label for the received-files destination folder.", "translations": { - "en": "Save received transfers to" + "en": "Save received transfers to", + "fr": "Enregistrer les transferts reçus dans" } }, "preferences_title": { "context": "Settings > Preferences: section title.", "translations": { - "en": "Preferences" + "en": "Preferences", + "fr": "Préférences" } }, "progress_cancelled": { "context": "Transfer progress label: cancelled.", "translations": { - "en": "Cancelled" + "en": "Cancelled", + "fr": "Annulé" } }, "progress_completed": { "context": "Transfer progress label: completed.", "translations": { - "en": "Completed" + "en": "Completed", + "fr": "Terminé" } }, "progress_connected": { "context": "Transfer progress label: connected.", "translations": { - "en": "Connected" + "en": "Connected", + "fr": "Connecté" } }, "progress_connecting": { "context": "Transfer progress label: connecting.", "translations": { - "en": "Connecting" + "en": "Connecting", + "fr": "Connexion" } }, "progress_downloading": { "context": "Transfer progress label: downloading.", "translations": { - "en": "Downloading" + "en": "Downloading", + "fr": "Téléchargement" } }, "progress_failed": { "context": "Transfer progress label: failed.", "translations": { - "en": "Failed" + "en": "Failed", + "fr": "Échec" } }, "progress_getting_ready": { "context": "Transfer progress label: getting ready.", "translations": { - "en": "Getting ready" + "en": "Getting ready", + "fr": "Préparation" } }, "progress_interrupted": { "context": "Transfer progress label: the transfer was interrupted.", "translations": { - "en": "Transfer interrupted" + "en": "Transfer interrupted", + "fr": "Transfert interrompu" } }, "progress_preparing": { "context": "Transfer progress label: preparing.", "translations": { - "en": "Preparing" + "en": "Preparing", + "fr": "Préparation" } }, "progress_ready": { "context": "Transfer progress label: ready.", "translations": { - "en": "Ready" + "en": "Ready", + "fr": "Prêt" } }, "progress_receiving": { "context": "Transfer progress label: receiving.", "translations": { - "en": "Receiving" + "en": "Receiving", + "fr": "Réception" } }, "progress_requesting_access": { "context": "Transfer progress label: requesting access from the sender.", "translations": { - "en": "Requesting access" + "en": "Requesting access", + "fr": "Demande d’accès" } }, "progress_saving": { "context": "Transfer progress label: saving received files.", "translations": { - "en": "Saving" + "en": "Saving", + "fr": "Enregistrement" } }, "progress_sending": { "context": "Transfer progress label: sending.", "translations": { - "en": "Sending" + "en": "Sending", + "fr": "Envoi" } }, "progress_sending_to_count": { "context": "Transfer progress label: sending to N receivers. %lld = receiver count.", "translations": { - "en": "Sending to {count}" + "en": "Sending to {count}", + "fr": "Envoi à {count}" }, "args": [ { @@ -918,49 +1059,57 @@ "progress_share_ready": { "context": "Transfer progress label: the share is ready.", "translations": { - "en": "Ready to share" + "en": "Ready to share", + "fr": "Prêt à partager" } }, "progress_working": { "context": "Transfer progress label: generic working/in-progress state.", "translations": { - "en": "Working…" + "en": "Working…", + "fr": "En cours…" } }, "receive_choose_method_body": { "context": "Receive flow: body text prompting the user to pick an invitation method.", "translations": { - "en": "Choose the invitation method available to you." + "en": "Choose the invitation method available to you.", + "fr": "Choisissez la méthode d’invitation à votre disposition." } }, "receive_choose_method_title": { "context": "Receive flow: title of the connect-method chooser.", "translations": { - "en": "How would you like to connect?" + "en": "How would you like to connect?", + "fr": "Comment souhaitez-vous vous connecter ?" } }, "receive_clear_history": { "context": "Receive history: action to clear all history.", "translations": { - "en": "Clear history" + "en": "Clear history", + "fr": "Effacer l’historique" } }, "receive_clear_history_description": { "context": "Receive history: confirmation dialog body for clearing all history.", "translations": { - "en": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device." + "en": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device.", + "fr": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil." } }, "receive_clear_history_title": { "context": "Receive history: confirmation dialog title for clearing all history.", "translations": { - "en": "Clear receive history?" + "en": "Clear receive history?", + "fr": "Effacer l’historique de réception ?" } }, "receive_completed": { "context": "Receive flow: toast/message when a transfer finishes downloading.", "translations": { - "en": "Transfer received." + "en": "Transfer received.", + "fr": "Transfert reçu." } }, "receive_delete_history_description": { @@ -972,205 +1121,239 @@ } ], "translations": { - "en": "“{arg1}” will be removed from VniDrop’s history. The downloaded file will remain on this device." + "en": "“{arg1}” will be removed from VniDrop’s history. The downloaded file will remain on this device.", + "fr": "« {arg1} » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil." } }, "receive_delete_history_item": { "context": "Receive history: swipe/menu action to delete a single history item.", "translations": { - "en": "Delete from receive history" + "en": "Delete from receive history", + "fr": "Supprimer de l’historique de réception" } }, "receive_delete_history_title": { "context": "Receive history: confirmation title for removing one item.", "translations": { - "en": "Remove from history?" + "en": "Remove from history?", + "fr": "Retirer de l’historique ?" } }, "receive_empty_body": { "context": "Receive tab empty state: instructions on how to receive.", "translations": { - "en": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag." + "en": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag.", + "fr": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC." } }, "receive_empty_title": { "context": "Receive tab empty state: title when nothing has been received.", "translations": { - "en": "Nothing received yet" + "en": "Nothing received yet", + "fr": "Rien reçu pour l’instant" } }, "receive_history_cleared": { "context": "Receive history: toast confirming history was cleared.", "translations": { - "en": "Receive history cleared." + "en": "Receive history cleared.", + "fr": "Historique de réception effacé." } }, "receive_history_title": { "context": "Receive tab: History section title.", "translations": { - "en": "History" + "en": "History", + "fr": "Historique" } }, "receive_method_file": { "context": "Receive method: open a .vnd invitation file.", "translations": { - "en": "Open a .vnd invitation" + "en": "Open a .vnd invitation", + "fr": "Ouvrir une invitation .vnd" } }, "receive_method_file_description": { "context": "Receive method description: open a saved/shared invitation file.", "translations": { - "en": "Choose an invitation saved or shared to this device." + "en": "Choose an invitation saved or shared to this device.", + "fr": "Choisissez une invitation enregistrée ou partagée sur cet appareil." } }, "receive_method_nfc": { "context": "Receive method: read an NFC tag.", "translations": { - "en": "Read NFC tag" + "en": "Read NFC tag", + "fr": "Lire un tag NFC" } }, "receive_method_nfc_description": { "context": "Receive method description: hold near the sender's NFC tag.", "translations": { - "en": "Hold this device near the sender’s invitation tag." + "en": "Hold this device near the sender’s invitation tag.", + "fr": "Approchez cet appareil du tag d’invitation de l’expéditeur." } }, "receive_method_scan": { "context": "Receive method: scan a QR code.", "translations": { - "en": "Scan QR code" + "en": "Scan QR code", + "fr": "Scanner un QR code" } }, "receive_method_scan_description": { "context": "Receive method description: use the camera to scan the sender's code.", "translations": { - "en": "Use the camera to scan the sender’s VniDrop code." + "en": "Use the camera to scan the sender’s VniDrop code.", + "fr": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur." } }, "receive_new_subtitle": { "context": "Receive tab: subtitle under the title.", "translations": { - "en": "Transfers you’ve received on this device." + "en": "Transfers you’ve received on this device.", + "fr": "Transferts que vous avez reçus sur cet appareil." } }, "receive_nfc_waiting": { "context": "Receive flow: prompt while waiting to read an NFC tag.", "translations": { - "en": "Hold near the NFC tag…" + "en": "Hold near the NFC tag…", + "fr": "Approchez du tag NFC…" } }, "receive_open_files_failed": { "context": "Receive flow: error when opening VniDrop's folder in Files fails.", "translations": { - "en": "Couldn’t open VniDrop in Files." + "en": "Couldn’t open VniDrop in Files.", + "fr": "Impossible d’ouvrir VniDrop dans Fichiers." } }, "receive_review_title": { "context": "Receive flow: title of the review screen before accepting a transfer.", "translations": { - "en": "Review transfer" + "en": "Review transfer", + "fr": "Vérifier le transfert" } }, "receive_title": { "context": "Receive tab: screen title.", "translations": { - "en": "Receive" + "en": "Receive", + "fr": "Recevoir" } }, "receive_unknown_transfer": { "context": "Receive flow: fallback name for a transfer with no title.", "translations": { - "en": "VniDrop transfer" + "en": "VniDrop transfer", + "fr": "Transfert VniDrop" } }, "send_access_anyone": { "context": "Send access option: anyone with the invitation can receive.", "translations": { - "en": "Anyone with this transfer" + "en": "Anyone with this transfer", + "fr": "Toute personne disposant de ce transfert" } }, "send_access_anyone_description": { "context": "Send access option description: no approval required.", "translations": { - "en": "No approval is required. Only use this for items you are comfortable sharing." + "en": "No approval is required. Only use this for items you are comfortable sharing.", + "fr": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager." } }, "send_access_anyone_warning": { "context": "Send access option warning: caution about open access.", "translations": { - "en": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items." + "en": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items.", + "fr": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles." } }, "send_access_approval": { "context": "Send access option: approve each receiver.", "translations": { - "en": "Ask before each download" + "en": "Ask before each download", + "fr": "Demander avant chaque téléchargement" } }, "send_access_approval_description": { "context": "Send access option description: you approve/refuse each receiver.", "translations": { - "en": "You approve or refuse every new receiver." + "en": "You approve or refuse every new receiver.", + "fr": "Vous approuvez ou refusez chaque nouveau destinataire." } }, "send_access_title": { "context": "Send flow: heading for the who-can-receive access chooser.", "translations": { - "en": "Who can receive it?" + "en": "Who can receive it?", + "fr": "Qui peut le recevoir ?" } }, "send_choose_file_body": { "context": "Send flow: body text for the choose-what-to-share step.", "translations": { - "en": "Select files or a folder from this device. You can review the selection before creating the transfer." + "en": "Select files or a folder from this device. You can review the selection before creating the transfer.", + "fr": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert." } }, "send_choose_file_title": { "context": "Send flow: title of the choose-what-to-share step.", "translations": { - "en": "Choose what to share" + "en": "Choose what to share", + "fr": "Choisissez quoi partager" } }, "send_empty_body": { "context": "Send tab empty state: instructions on how to create a transfer.", "translations": { - "en": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file." + "en": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file.", + "fr": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation." } }, "send_empty_title": { "context": "Send tab empty state: title when nothing has been shared.", "translations": { - "en": "Nothing shared yet" + "en": "Nothing shared yet", + "fr": "Rien partagé pour l’instant" } }, "send_file_size_unknown": { "context": "Send flow: shown when a selected file's size can't be determined.", "translations": { - "en": "Size unavailable" + "en": "Size unavailable", + "fr": "Taille indisponible" } }, "send_folder_label": { "context": "Send flow: label indicating a selected item is a folder.", "translations": { - "en": "Folder" + "en": "Folder", + "fr": "Dossier" } }, "send_new_transfer_description": { "context": "Send flow: description for the create-new-transfer entry.", "translations": { - "en": "Create a new transfer" + "en": "Create a new transfer", + "fr": "Créer un nouveau transfert" } }, "send_new_transfer_title": { "context": "Send flow: title for the new-transfer step.", "translations": { - "en": "New transfer" + "en": "New transfer", + "fr": "Nouveau transfert" } }, "send_review_title": { "context": "Send flow: title of the review-transfer step before creating it.", "translations": { - "en": "Review transfer" + "en": "Review transfer", + "fr": "Vérifier le transfert" } }, "send_selected_files_count": { @@ -1182,187 +1365,218 @@ } ], "translations": { - "en": "{count} files selected" + "en": "{count} files selected", + "fr": "{count} fichiers sélectionnés" } }, "send_stop_sharing": { "context": "Transfer details: action to stop sharing a transfer.", "translations": { - "en": "Stop sharing" + "en": "Stop sharing", + "fr": "Arrêter le partage" } }, "send_stop_sharing_description": { "context": "Transfer details: confirmation body for stopping sharing.", "translations": { - "en": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped." + "en": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped.", + "fr": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté." } }, "send_subtitle": { "context": "Send tab: subtitle under the title.", "translations": { - "en": "Transfers you’re sharing from this device." + "en": "Transfers you’re sharing from this device.", + "fr": "Transferts que vous partagez depuis cet appareil." } }, "send_title": { "context": "Send tab: screen title.", "translations": { - "en": "Send" + "en": "Send", + "fr": "Envoyer" } }, "send_transfer_created": { "context": "Send flow: toast confirming a transfer was created.", "translations": { - "en": "Transfer created." + "en": "Transfer created.", + "fr": "Transfert créé." } }, "send_transfer_details_title": { "context": "Send flow: title of the transfer details screen.", "translations": { - "en": "Transfer details" + "en": "Transfer details", + "fr": "Détails du transfert" } }, "send_transfers_title": { "context": "Send tab: 'Your transfers' list heading.", "translations": { - "en": "Your transfers" + "en": "Your transfers", + "fr": "Vos transferts" } }, "settings_subtitle": { "context": "Settings screen: subtitle summarizing what's configurable.", "translations": { - "en": "Your name, where transfers are saved, appearance, and notifications." + "en": "Your name, where transfers are saved, appearance, and notifications.", + "fr": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications." } }, "settings_title": { "context": "Settings screen: title.", "translations": { - "en": "Settings" + "en": "Settings", + "fr": "Réglages" } }, "snackbar_dismiss": { "context": "Snackbar: accessibility label / action to dismiss the snackbar.", "translations": { - "en": "Dismiss" + "en": "Dismiss", + "fr": "Ignorer" } }, "status_available": { "context": "Transfer status: available (actively shared).", "translations": { - "en": "Available" + "en": "Available", + "fr": "Disponible" } }, "status_cancelled": { "context": "Transfer status: cancelled.", "translations": { - "en": "Cancelled" + "en": "Cancelled", + "fr": "Annulé" } }, "status_completed": { "context": "Transfer status: completed.", "translations": { - "en": "Completed" + "en": "Completed", + "fr": "Terminé" } }, "status_failed": { "context": "Transfer status: failed.", "translations": { - "en": "Failed" + "en": "Failed", + "fr": "Échec" } }, "status_preparing": { "context": "Transfer status: preparing.", "translations": { - "en": "Preparing" + "en": "Preparing", + "fr": "Préparation" } }, "status_receiving": { "context": "Transfer status: receiving.", "translations": { - "en": "Receiving" + "en": "Receiving", + "fr": "Réception" } }, "status_stopped": { "context": "Transfer status: stopped.", "translations": { - "en": "Stopped" + "en": "Stopped", + "fr": "Arrêté" } }, "storage_calculating": { "context": "Settings > Storage: placeholder while a size is being calculated.", "translations": { - "en": "Calculating…" + "en": "Calculating…", + "fr": "Calcul…" } }, "storage_delete_transfers": { "context": "Settings > Storage: button to delete all transfer records.", "translations": { - "en": "Delete all transfers" + "en": "Delete all transfers", + "fr": "Supprimer tous les transferts" } }, "storage_delete_transfers_description": { "context": "Settings > Storage: confirmation body for deleting all transfer records.", "translations": { - "en": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone." + "en": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone.", + "fr": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible." } }, "storage_deleting": { "context": "Settings > Storage: progress label while transfers are being deleted.", "translations": { - "en": "Deleting…" + "en": "Deleting…", + "fr": "Suppression…" } }, "storage_footer": { "context": "Settings > Storage: footer explaining how storage is managed.", "translations": { - "en": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here." + "en": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here.", + "fr": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici." } }, "storage_received_files": { "context": "Settings > Storage: label for the received-files size row.", "translations": { - "en": "Received files" + "en": "Received files", + "fr": "Fichiers reçus" } }, "storage_temporary": { "context": "Settings > Storage: label for the temporary-files size row.", "translations": { - "en": "Temporary files" + "en": "Temporary files", + "fr": "Fichiers temporaires" } }, "storage_title": { "context": "Settings > Storage: section title.", "translations": { - "en": "Storage" + "en": "Storage", + "fr": "Stockage" } }, "storage_total": { "context": "Settings > Storage: label for the total-size row.", "translations": { - "en": "Total" + "en": "Total", + "fr": "Total" } }, "storage_transfer_data": { "context": "Settings > Storage: label for the transfer-engine data size row.", "translations": { - "en": "Transfer data" + "en": "Transfer data", + "fr": "Données de transfert" } }, "storage_transfers_deleted": { "context": "Settings > Storage: toast confirming all transfers were deleted.", "translations": { - "en": "All transfers deleted" + "en": "All transfers deleted", + "fr": "Tous les transferts supprimés" } }, "transfer_activity_description": { "context": "Transfer details: description under the Activity section.", "translations": { - "en": "See important updates for this transfer" + "en": "See important updates for this transfer", + "fr": "Consultez les mises à jour importantes de ce transfert" } }, "transfer_activity_title": { "context": "Transfer details: Activity section title.", "translations": { - "en": "Activity" + "en": "Activity", + "fr": "Activité" } }, "transfer_delete_description": { @@ -1374,103 +1588,120 @@ } ], "translations": { - "en": "“{arg1}” will stop being shared and its transfer history will be removed from this device." + "en": "“{arg1}” will stop being shared and its transfer history will be removed from this device.", + "fr": "« {arg1} » cessera d’être partagé et son historique de transfert sera retiré de cet appareil." } }, "transfer_delete_title": { "context": "Transfer details: confirmation title for deleting a transfer.", "translations": { - "en": "Delete transfer?" + "en": "Delete transfer?", + "fr": "Supprimer le transfert ?" } }, "transfer_deleted": { "context": "Transfer details: toast confirming a transfer was deleted.", "translations": { - "en": "Transfer deleted." + "en": "Transfer deleted.", + "fr": "Transfert supprimé." } }, "transfer_deleting": { "context": "Transfer details: progress label while a transfer is being deleted.", "translations": { - "en": "Deleting…" + "en": "Deleting…", + "fr": "Suppression…" } }, "transfer_details_title": { "context": "Transfer details: screen title.", "translations": { - "en": "Transfer details" + "en": "Transfer details", + "fr": "Détails du transfert" } }, "transfer_event_approved": { "context": "Transfer activity event: a receiver's access was approved.", "translations": { - "en": "Receiver access approved" + "en": "Receiver access approved", + "fr": "Accès du destinataire approuvé" } }, "transfer_event_completed": { "context": "Transfer activity event: a receiver completed the transfer.", "translations": { - "en": "A receiver completed the transfer" + "en": "A receiver completed the transfer", + "fr": "Un destinataire a terminé le transfert" } }, "transfer_event_connecting": { "context": "Transfer activity event: connecting to the sender.", "translations": { - "en": "Connecting to sender" + "en": "Connecting to sender", + "fr": "Connexion à l’expéditeur" } }, "transfer_event_downloading": { "context": "Transfer activity event: downloading.", "translations": { - "en": "Downloading" + "en": "Downloading", + "fr": "Téléchargement" } }, "transfer_event_failed": { "context": "Transfer activity event: the transfer hit a problem.", "translations": { - "en": "The transfer encountered a problem" + "en": "The transfer encountered a problem", + "fr": "Le transfert a rencontré un problème" } }, "transfer_event_preparing": { "context": "Transfer activity event: preparing the transfer.", "translations": { - "en": "Preparing your transfer" + "en": "Preparing your transfer", + "fr": "Préparation de votre transfert" } }, "transfer_event_ready": { "context": "Transfer activity event: ready to share.", "translations": { - "en": "Ready to share" + "en": "Ready to share", + "fr": "Prêt à partager" } }, "transfer_event_refused": { "context": "Transfer activity event: a receiver's access was refused.", "translations": { - "en": "Receiver access refused" + "en": "Receiver access refused", + "fr": "Accès du destinataire refusé" } }, "transfer_event_requested": { "context": "Transfer activity event: a receiver requested access.", "translations": { - "en": "A receiver requested access" + "en": "A receiver requested access", + "fr": "Un destinataire a demandé l’accès" } }, "transfer_event_saving": { "context": "Transfer activity event: saving received files.", "translations": { - "en": "Saving" + "en": "Saving", + "fr": "Enregistrement" } }, "transfer_event_stopped": { "context": "Transfer activity event: sharing was stopped.", "translations": { - "en": "Sharing stopped" + "en": "Sharing stopped", + "fr": "Partage arrêté" } }, "transfer_event_updated": { "context": "Transfer activity event: the transfer was updated.", "translations": { - "en": "Transfer updated" + "en": "Transfer updated", + "fr": "Transfert mis à jour" } }, "transfer_file_count": { @@ -1485,85 +1716,102 @@ "en": { "other": "{count} files", "one": "{count} file" + }, + "fr": { + "one": "{count} fichier", + "other": "{count} fichiers" } } }, "transfer_invitation_saved": { "context": "Transfer share: toast confirming the invitation file was saved.", "translations": { - "en": "Invitation saved." + "en": "Invitation saved.", + "fr": "Invitation enregistrée." } }, "transfer_nearby_device": { "context": "Transfer share/receivers: label for a nearby device.", "translations": { - "en": "Nearby device" + "en": "Nearby device", + "fr": "Appareil à proximité" } }, "transfer_nfc_unavailable": { "context": "Transfer share: message when NFC writing isn't available on the device.", "translations": { - "en": "NFC tag writing is not available on this device." + "en": "NFC tag writing is not available on this device.", + "fr": "L’écriture de tag NFC n’est pas disponible sur cet appareil." } }, "transfer_nfc_waiting": { "context": "Transfer share: prompt while waiting to write an NFC tag.", "translations": { - "en": "Hold your device near a writable NFC tag." + "en": "Hold your device near a writable NFC tag.", + "fr": "Approchez votre appareil d’un tag NFC inscriptible." } }, "transfer_nfc_written": { "context": "Transfer share: confirmation the invitation was written to the NFC tag.", "translations": { - "en": "Invitation written to the NFC tag." + "en": "Invitation written to the NFC tag.", + "fr": "Invitation écrite sur le tag NFC." } }, "transfer_no_activity": { "context": "Transfer details: empty state for the Activity section.", "translations": { - "en": "There is no activity to show yet." + "en": "There is no activity to show yet.", + "fr": "Aucune activité à afficher pour l’instant." } }, "transfer_no_receivers": { "context": "Transfer details: empty state for the Receivers section.", "translations": { - "en": "Nobody has requested this transfer yet." + "en": "Nobody has requested this transfer yet.", + "fr": "Personne n’a encore demandé ce transfert." } }, "transfer_receiver_accepted": { "context": "Receiver status: approved, waiting for the download to complete.", "translations": { - "en": "Approved — waiting for completion" + "en": "Approved — waiting for completion", + "fr": "Approuvé — en attente de la fin" } }, "transfer_receiver_completed": { "context": "Receiver status: received successfully.", "translations": { - "en": "Received successfully" + "en": "Received successfully", + "fr": "Reçu avec succès" } }, "transfer_receiver_expired": { "context": "Receiver status: the request expired.", "translations": { - "en": "Request expired" + "en": "Request expired", + "fr": "Demande expirée" } }, "transfer_receiver_refused": { "context": "Receiver status: the request was refused.", "translations": { - "en": "Request refused" + "en": "Request refused", + "fr": "Demande refusée" } }, "transfer_receiver_requested": { "context": "Receiver status: waiting for the sender's approval.", "translations": { - "en": "Waiting for your approval" + "en": "Waiting for your approval", + "fr": "En attente de votre approbation" } }, "transfer_receiver_unknown": { "context": "Receiver status: status unavailable/unknown.", "translations": { - "en": "Status unavailable" + "en": "Status unavailable", + "fr": "Statut indisponible" } }, "transfer_receivers_completed_count": { @@ -1575,13 +1823,15 @@ } ], "translations": { - "en": "{count} completed" + "en": "{count} completed", + "fr": "{count} terminés" } }, "transfer_receivers_description": { "context": "Transfer details: description under the Receivers section.", "translations": { - "en": "Requests, approvals, and completed deliveries" + "en": "Requests, approvals, and completed deliveries", + "fr": "Demandes, approbations et livraisons terminées" } }, "transfer_receivers_pending": { @@ -1593,43 +1843,50 @@ } ], "translations": { - "en": "{count} waiting" + "en": "{count} waiting", + "fr": "{count} en attente" } }, "transfer_receivers_title": { "context": "Transfer details: Receivers section title.", "translations": { - "en": "Receivers" + "en": "Receivers", + "fr": "Destinataires" } }, "transfer_scan_qr": { "context": "Transfer share: caption under the QR code.", "translations": { - "en": "Scan with VniDrop to receive this transfer" + "en": "Scan with VniDrop to receive this transfer", + "fr": "Scannez avec VniDrop pour recevoir ce transfert" } }, "transfer_share_description": { "context": "Transfer details: description under the Share section.", "translations": { - "en": "QR code, invitation file, and nearby options" + "en": "QR code, invitation file, and nearby options", + "fr": "QR code, fichier d’invitation et options à proximité" } }, "transfer_share_title": { "context": "Transfer details: Share section title.", "translations": { - "en": "Share" + "en": "Share", + "fr": "Partager" } }, "value_unavailable": { "context": "Placeholder shown when a device-info or metadata value can't be read.", "translations": { - "en": "Not available" + "en": "Not available", + "fr": "Non disponible" } }, "version_title": { "context": "Device information / Settings row: app version label.", "translations": { - "en": "App version" + "en": "App version", + "fr": "Version de l’app" } } } diff --git a/shared/src/commonMain/composeResources/values-fr/strings.xml b/shared/src/commonMain/composeResources/values-fr/strings.xml new file mode 100644 index 0000000..cf78c95 --- /dev/null +++ b/shared/src/commonMain/composeResources/values-fr/strings.xml @@ -0,0 +1,257 @@ + + + Signaler un bug + VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé. + Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire. + Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu. + Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation. + Sans compte — il n’y a rien à créer. + Open source, publié sous licence Apache 2.0. + Ce qu’est VniDrop + Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert. + Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage. + Pas un service de synchronisation ou de sauvegarde. + Ce que VniDrop n’est pas + Licence + Politique de confidentialité + Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert ». + Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues. + Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant. + Politique de confidentialité + Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers. + Confidentialité et sécurité + Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit. + À propos + Suivre l’apparence claire ou sombre de cet appareil. + Mode sombre + Mode clair + Système + Apparence + Demande de réception + Identifiant de l’appareil : %1$s + Un appareil à proximité + %1$d demandes en attente + %1$s souhaite recevoir « %2$s ». + Niveau de batterie + nom@exemple.com + E-mail de contact (facultatif) + Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées). + Informations sur l’appareil + Décrivez ce à quoi vous vous attendiez + À quoi vous attendiez-vous ? + Inclure les journaux récents + Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi. + Taille de la pièce jointe des journaux + Veuillez décrire ce à quoi vous vous attendiez. + Veuillez décrire ce qui s’est passé. + Listez les étapes pour reproduire le problème + Étapes pour reproduire (facultatif) + Envoyer le rapport + Impossible d’envoyer le rapport de bug. Réessayez plus tard. + Merci — votre rapport de bug a été enregistré. + Envoi… + Décrivez ce qui s’est passé + Que s’est-il passé ? + Approuver + Retour + Annuler + Annuler + Modifier les fichiers + Choisir des fichiers + Choisir un dossier + Effacer + Fermer + Nouveau transfert + Supprimer le transfert + Enregistrer le fichier .vnd + Partager l’invitation + Ouvrir les Réglages + Recevoir + Commencer à recevoir + Refuser + Retirer le fichier + Valeur par défaut + Réessayer + Commencer le partage + Préparation du transfert… + Afficher dans Fichiers + Écrire sur un tag NFC + Modèle de l’appareil + Nom de l’appareil + Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus. + Le partage des diagnostics est désactivé. + Le partage des diagnostics est activé. + Partager les diagnostics + L’accès à la caméra est nécessaire pour scanner un QR code. + Impossible de charger les informations de l’appareil. + VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez. + Une erreur est survenue. Réessayez. + VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez. + Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur. + Cette invitation est vide. Essayez de l’ouvrir à nouveau. + La bibliothèque native de VniDrop est absente de cette version. + Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre. + L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé. + VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil. + Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau. + Sélectionnez au moins un élément à partager. + VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil. + VniDrop démarre encore. Rouvrez l’invitation dans un instant. + Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez. + Nom du destinataire + Nom de l’expéditeur + Nom du transfert + Nom d’affichage + Autorisation requise + Indisponible + Vérification du dossier… + Prêt + Fichiers + Taille + Statut + Recevoir + Envoyer + Réglages + Réseau + Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan. + Notifications activées. + Autoriser les notifications + Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages. + Impossible d’ouvrir les réglages de notifications. + Notifications + Les notifications ne sont pas disponibles sur cet appareil. + Système d’exploitation + Enregistrer les transferts reçus dans + Préférences + Annulé + Terminé + Connecté + Connexion + Téléchargement + Échec + Préparation + Transfert interrompu + Préparation + Prêt + Réception + Demande d’accès + Enregistrement + Envoi + Envoi à %1$d + Prêt à partager + En cours… + Choisissez la méthode d’invitation à votre disposition. + Comment souhaitez-vous vous connecter ? + Effacer l’historique + Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil. + Effacer l’historique de réception ? + Transfert reçu. + « %1$s » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil. + Supprimer de l’historique de réception + Retirer de l’historique ? + Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC. + Rien reçu pour l’instant + Historique de réception effacé. + Historique + Ouvrir une invitation .vnd + Choisissez une invitation enregistrée ou partagée sur cet appareil. + Lire un tag NFC + Approchez cet appareil du tag d’invitation de l’expéditeur. + Scanner un QR code + Utilisez la caméra pour scanner le code VniDrop de l’expéditeur. + Transferts que vous avez reçus sur cet appareil. + Approchez du tag NFC… + Impossible d’ouvrir VniDrop dans Fichiers. + Vérifier le transfert + Recevoir + Transfert VniDrop + Toute personne disposant de ce transfert + Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager. + Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles. + Demander avant chaque téléchargement + Vous approuvez ou refusez chaque nouveau destinataire. + Qui peut le recevoir ? + Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert. + Choisissez quoi partager + Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation. + Rien partagé pour l’instant + Taille indisponible + Dossier + Créer un nouveau transfert + Nouveau transfert + Vérifier le transfert + %1$d fichiers sélectionnés + Arrêter le partage + Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté. + Transferts que vous partagez depuis cet appareil. + Envoyer + Transfert créé. + Détails du transfert + Vos transferts + Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications. + Réglages + Ignorer + Disponible + Annulé + Terminé + Échec + Préparation + Réception + Arrêté + Calcul… + Supprimer tous les transferts + Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible. + Suppression… + Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici. + Fichiers reçus + Fichiers temporaires + Stockage + Total + Données de transfert + Tous les transferts supprimés + Consultez les mises à jour importantes de ce transfert + Activité + « %1$s » cessera d’être partagé et son historique de transfert sera retiré de cet appareil. + Supprimer le transfert ? + Transfert supprimé. + Suppression… + Détails du transfert + Accès du destinataire approuvé + Un destinataire a terminé le transfert + Connexion à l’expéditeur + Téléchargement + Le transfert a rencontré un problème + Préparation de votre transfert + Prêt à partager + Accès du destinataire refusé + Un destinataire a demandé l’accès + Enregistrement + Partage arrêté + Transfert mis à jour + Invitation enregistrée. + Appareil à proximité + L’écriture de tag NFC n’est pas disponible sur cet appareil. + Approchez votre appareil d’un tag NFC inscriptible. + Invitation écrite sur le tag NFC. + Aucune activité à afficher pour l’instant. + Personne n’a encore demandé ce transfert. + Approuvé — en attente de la fin + Reçu avec succès + Demande expirée + Demande refusée + En attente de votre approbation + Statut indisponible + %1$d terminés + Demandes, approbations et livraisons terminées + %1$d en attente + Destinataires + Scannez avec VniDrop pour recevoir ce transfert + QR code, fichier d’invitation et options à proximité + Partager + Non disponible + Version de l’app + + %1$d fichier + %1$d fichiers + +