From 811ef800ad8095355256ef6cee0e8f28cae21188 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 27 Jan 2022 16:18:57 +0100 Subject: [PATCH 1/2] fix placeholder and cleanup --- .../Components/Elements/CardInputs/index.tsx | 107 ------------- .../Elements/CardInputs/utils/cardTypes.ts | 142 ------------------ .../Elements/CardInputs/utils/formatter.ts | 60 -------- .../Elements/CardInputs/utils/index.ts | 3 - .../Elements/CardInputs/utils/validator.ts | 107 ------------- .../SubscriptionTab/Common/AddCard.tsx | 43 ++++-- packages/files-ui/src/Themes/Constants.ts | 1 + packages/files-ui/src/Themes/DarkTheme.ts | 3 +- packages/files-ui/src/Themes/LightTheme.ts | 3 +- 9 files changed, 33 insertions(+), 436 deletions(-) delete mode 100644 packages/files-ui/src/Components/Elements/CardInputs/index.tsx delete mode 100644 packages/files-ui/src/Components/Elements/CardInputs/utils/cardTypes.ts delete mode 100644 packages/files-ui/src/Components/Elements/CardInputs/utils/formatter.ts delete mode 100644 packages/files-ui/src/Components/Elements/CardInputs/utils/index.ts delete mode 100644 packages/files-ui/src/Components/Elements/CardInputs/utils/validator.ts diff --git a/packages/files-ui/src/Components/Elements/CardInputs/index.tsx b/packages/files-ui/src/Components/Elements/CardInputs/index.tsx deleted file mode 100644 index 20836290b3..0000000000 --- a/packages/files-ui/src/Components/Elements/CardInputs/index.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React from "react" -import { formatCardNumber, formatExpiry, getCardTypeByValue } from "./utils" -import { Grid, TextInput, Typography } from "@chainsafe/common-components" -import { makeStyles, ITheme, createStyles } from "@chainsafe/common-theme" - -const useStyles = makeStyles(({ constants, palette }: ITheme) => - createStyles({ - error: { - color: palette.error.main, - paddingLeft: constants.generalUnit - } - }) -) - -interface ICardInputsProps { - cardNumber: string - cardExpiry: string - cardCvc: string - handleChangeCardNumber(value: string): void - handleChangeCardExpiry(value: string): void - handleChangeCardCvc(value: string): void - error?: string -} - -const CardInputs = (props: ICardInputsProps) => { - const classes = useStyles() - - const { - cardNumber, - cardExpiry, - cardCvc, - handleChangeCardNumber, - handleChangeCardExpiry, - handleChangeCardCvc, - error - } = props - const cardType = getCardTypeByValue(cardNumber) - - return ( - - - - handleChangeCardNumber(formatCardNumber(val?.toString() || "")) - } - size="large" - placeholder="1234 1234 1234 1234" - RightIcon={cardType && cardType.type ? cardType.icon : undefined} - label="Card number" - /> - - - - handleChangeCardExpiry(formatExpiry(val?.toString() || "")) - } - size="large" - placeholder="MM/YY" - label="Card expiry" - /> - - - handleChangeCardCvc(val?.toString() || "")} - size="large" - placeholder="CVC" - label="Card CVC" - /> - - - {error && ( - - {error} - - )} - - - ) -} - -export default CardInputs diff --git a/packages/files-ui/src/Components/Elements/CardInputs/utils/cardTypes.ts b/packages/files-ui/src/Components/Elements/CardInputs/utils/cardTypes.ts deleted file mode 100644 index fb3db2d200..0000000000 --- a/packages/files-ui/src/Components/Elements/CardInputs/utils/cardTypes.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { - AmexCardIcon, - VisaCardIcon, - MastercardCardIcon, - DinersclubCardIcon, - DiscoverCardIcon, - JcbCardIcon, - UnionpayCardIcon, - SvgIconProps -} from "@chainsafe/common-components" - -export const DEFAULT_CVC_LENGTH = 3 -export const DEFAULT_CARD_FORMAT = /(\d{1,4})/g - -export type CardType = - | "visa" - | "mastercard" - | "amex" - | "dinersclub" - | "discover" - | "jcb" - | "unionpay" - -export type CodeName = "CVV" | "CVC" | "CID" | "CVN" | "CVE" - -export interface ICardType { - displayName: string - type: CardType - format: RegExp - startPattern: RegExp - gaps: number[] - lengths: number[] - code: { - name: CodeName - length: number - } - icon?: React.FC -} - -export const CARD_TYPES: ICardType[] = [ - { - displayName: "Visa", - type: "visa", - format: DEFAULT_CARD_FORMAT, - startPattern: /^4/, - gaps: [4, 8, 12], - lengths: [16, 18, 19], - code: { - name: "CVV", - length: 3 - }, - icon: VisaCardIcon - }, - { - displayName: "Mastercard", - type: "mastercard", - format: DEFAULT_CARD_FORMAT, - startPattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/, - gaps: [4, 8, 12], - lengths: [16], - code: { - name: "CVC", - length: 3 - }, - icon: MastercardCardIcon - }, - { - displayName: "American Express", - type: "amex", - format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/, - startPattern: /^3[47]/, - gaps: [4, 10], - lengths: [15], - code: { - name: "CID", - length: 4 - }, - icon: AmexCardIcon - }, - { - displayName: "Diners Club", - type: "dinersclub", - format: DEFAULT_CARD_FORMAT, - startPattern: /^(36|38|30[0-5])/, - gaps: [4, 10], - lengths: [14, 16, 19], - code: { - name: "CVV", - length: 3 - }, - icon: DinersclubCardIcon - }, - { - displayName: "Discover", - type: "discover", - format: DEFAULT_CARD_FORMAT, - startPattern: /^(6011|65|64[4-9]|622)/, - gaps: [4, 8, 12], - lengths: [16, 19], - code: { - name: "CID", - length: 3 - }, - icon: DiscoverCardIcon - }, - { - displayName: "JCB", - type: "jcb", - format: DEFAULT_CARD_FORMAT, - startPattern: /^35/, - gaps: [4, 8, 12], - lengths: [16, 17, 18, 19], - code: { - name: "CVV", - length: 3 - }, - icon: JcbCardIcon - }, - { - displayName: "UnionPay", - type: "unionpay", - format: DEFAULT_CARD_FORMAT, - startPattern: /^62/, - gaps: [4, 8, 12], - lengths: [14, 15, 16, 17, 18, 19], - code: { - name: "CVN", - length: 3 - }, - icon: UnionpayCardIcon - } -] - -export const getCardTypeByValue = (value: string) => { - const cardTypes = CARD_TYPES.filter((cardType) => - cardType.startPattern.test(value) - ) - return cardTypes[0] ? cardTypes[0] : undefined -} - -export const getCardTypeByType = (type: CardType) => - CARD_TYPES.filter((cardType) => cardType.type === type)[0] diff --git a/packages/files-ui/src/Components/Elements/CardInputs/utils/formatter.ts b/packages/files-ui/src/Components/Elements/CardInputs/utils/formatter.ts deleted file mode 100644 index f6cc6e9c26..0000000000 --- a/packages/files-ui/src/Components/Elements/CardInputs/utils/formatter.ts +++ /dev/null @@ -1,60 +0,0 @@ -import * as cardTypes from "./cardTypes" - -export const formatCardNumber = (cardNumber: string) => { - const cardType = cardTypes.getCardTypeByValue(cardNumber) || - cardTypes.CARD_TYPES.find((cardType) => cardType.type === "visa") - - if (!cardType) return (cardNumber.match(/\d+/g) || []).join("") - - const format = cardType.format - if (format && format.global) { - return (cardNumber.match(format) || []).join(" ") - } - - if (format) { - const execResult = format.exec(cardNumber.split(" ").join("")) - if (execResult) { - return execResult - .splice(1, 3) - .filter((x) => x) - .join(" ") - } - } - - return cardNumber -} - -export const formatExpiry = (cardExpiry: string) => { - const prevExpiry = cardExpiry - - if (!prevExpiry) return null - let expiry: any = prevExpiry - if (/^[2-9]$/.test(expiry)) { - expiry = `0${expiry}` - } - - if (prevExpiry.length === 2 && +prevExpiry > 12) { - const [head, ...tail] = prevExpiry.split("") - expiry = `0${head}/${tail.join("")}` - } - - if (/^1[/-]$/.test(expiry)) { - return "01 / " - } - - expiry = expiry.match(/(\d{1,2})/g) || [] - if (expiry.length === 1) { - if (prevExpiry.includes("/")) { - return expiry[0] - } - if (/\d{2}/.test(expiry)) { - return `${expiry[0]} / ` - } - } - if (expiry.length > 2) { - const [, month = null, year = null] = - expiry.join("").match(/^(\d{2}).*(\d{2})$/) || [] - return [month, year].join(" / ") - } - return expiry.join(" / ") -} diff --git a/packages/files-ui/src/Components/Elements/CardInputs/utils/index.ts b/packages/files-ui/src/Components/Elements/CardInputs/utils/index.ts deleted file mode 100644 index fb871088cc..0000000000 --- a/packages/files-ui/src/Components/Elements/CardInputs/utils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./cardTypes" -export * from "./formatter" -export * from "./validator" diff --git a/packages/files-ui/src/Components/Elements/CardInputs/utils/validator.ts b/packages/files-ui/src/Components/Elements/CardInputs/utils/validator.ts deleted file mode 100644 index 17b9ec1875..0000000000 --- a/packages/files-ui/src/Components/Elements/CardInputs/utils/validator.ts +++ /dev/null @@ -1,107 +0,0 @@ -import * as cardTypes from "./cardTypes" - -const MONTH_REGEX = /(0[1-9]|1[0-2])/ - -export enum CardNumberErrors { - EMPTY_CARD_NUMBER = "Enter a card number", - INVALID_CARD_NUMBER = "Card number is invalid", -} - -export enum CardExpiryErrors { - EMPTY_EXPIRY_DATE = "Enter an expiry date", - MONTH_OUT_OF_RANGE = "Expiry month must be between 01 and 12", - INVALID_EXPIRY_DATE = "Expiry date is invalid", - YEAR_OUT_OF_RANGE = "Expiry year cannot be in the past", - DATE_OUT_OF_RANGE = "Expiry date cannot be in the past", -} - -export enum CardCvcErrors { - EMPTY_CVC = "Enter a CVC", - INVALID_CVC = "CVC is invalid", -} - -export const hasCardNumberReachedMaxLength = (currentValue: string) => { - const cardType = cardTypes.getCardTypeByValue(currentValue) - return ( - cardType && - currentValue.length >= cardType.lengths[cardType.lengths.length - 1] - ) -} - -export const isNumeric = (e: any) => { - return /^\d*$/.test(e.key) -} - -export const validateLuhn = (cardNumber: string) => { - return ( - cardNumber - .split("") - .reverse() - .map((digit) => parseInt(digit, 10)) - .map((digit, idx) => (idx % 2 ? digit * 2 : digit)) - .map((digit) => (digit > 9 ? (digit % 10) + 1 : digit)) - .reduce((accum, digit) => (accum += digit)) % - 10 === - 0 - ) -} - -export const getCardNumberError = (cardNumber: string): string | undefined => { - if (!cardNumber) { - return CardNumberErrors.EMPTY_CARD_NUMBER - } - - const rawCardNumber = cardNumber.replace(/\s/g, "") - const cardType = cardTypes.getCardTypeByValue(rawCardNumber) - if (cardType && cardType.lengths) { - const doesCardNumberMatchLength = cardType.lengths.includes( - rawCardNumber.length - ) - if (doesCardNumberMatchLength) { - const isLuhnValid = validateLuhn(rawCardNumber) - if (isLuhnValid) { - return - } - } - } - return CardNumberErrors.INVALID_CARD_NUMBER -} - -export const getExpiryDateError = (expiryDate: string): string | undefined => { - if (!expiryDate) { - return CardExpiryErrors.EMPTY_EXPIRY_DATE - } - const rawExpiryDate = expiryDate.replace(" / ", "").replace("/", "") - if (rawExpiryDate.length === 4) { - const month = rawExpiryDate.slice(0, 2) - const year = `20${rawExpiryDate.slice(2, 4)}` - if (!MONTH_REGEX.test(month)) { - return CardExpiryErrors.MONTH_OUT_OF_RANGE - } - if (parseInt(year) < new Date().getFullYear()) { - return CardExpiryErrors.YEAR_OUT_OF_RANGE - } - if ( - parseInt(year) === new Date().getFullYear() && - parseInt(month) < new Date().getMonth() + 1 - ) { - return CardExpiryErrors.DATE_OUT_OF_RANGE - } - return - } - return CardExpiryErrors.INVALID_EXPIRY_DATE -} - -export const getCVCError = (cvc: string, cardNumber: string) => { - const cardType = cardTypes.getCardTypeByValue(cardNumber) - if (!cvc) { - return CardCvcErrors.EMPTY_CVC - } - if (cvc.length < 3) { - return CardCvcErrors.INVALID_CVC - } - if (cardType && cvc.length !== cardType.code.length) { - return CardCvcErrors.INVALID_CVC - } - return -} diff --git a/packages/files-ui/src/Components/Modules/Settings/SubscriptionTab/Common/AddCard.tsx b/packages/files-ui/src/Components/Modules/Settings/SubscriptionTab/Common/AddCard.tsx index c8f3717925..5141d348e5 100644 --- a/packages/files-ui/src/Components/Modules/Settings/SubscriptionTab/Common/AddCard.tsx +++ b/packages/files-ui/src/Components/Modules/Settings/SubscriptionTab/Common/AddCard.tsx @@ -159,11 +159,16 @@ const AddCard = ({ onClose, onCardAdd, footerClassName, submitText, goBack }: IA classes.cardNumberInputs, focusElement === "number" && classes.cardInputsFocus )} - options={{ showIcon: true, style: { - base: { - color: theme.constants.addCard.color - } - } }} + options={{ + showIcon: true, + style: { + base: { + color: theme.constants.addCard.color, + "::placeholder": { + color: theme.constants.addCard.placeholderColor + } + } + } }} onFocus={() => setFocusElement("number")} onBlur={() => setFocusElement(undefined)} onChange={() => setCardAddError(undefined)} @@ -178,11 +183,15 @@ const AddCard = ({ onClose, onCardAdd, footerClassName, submitText, goBack }: IA onFocus={() => setFocusElement("expiry")} onBlur={() => setFocusElement(undefined)} onChange={() => setCardAddError(undefined)} - options={{ style: { - base: { - color: theme.constants.addCard.color - } - } }} + options={{ + style: { + base: { + color: theme.constants.addCard.color, + "::placeholder": { + color: theme.constants.addCard.placeholderColor + } + } + } }} /> setFocusElement("cvc")} onBlur={() => setFocusElement(undefined)} onChange={() => setCardAddError(undefined)} - options={{ style: { - base: { - color: theme.constants.addCard.color - } - } }} + options={{ + style: { + base: { + color: theme.constants.addCard.color, + "::placeholder": { + color: theme.constants.addCard.placeholderColor + } + } + } }} /> {cardAddError && ({ }, addCard: { color: "#DBDBDB", - shadow: "0px 0px 4px rgba(24, 144, 255, 0.5)" + shadow: "0px 0px 4px rgba(24, 144, 255, 0.5)", + placeholderColor: "#595959" }, cookieBanner: { backgroundColor: "var(--gray9)" diff --git a/packages/files-ui/src/Themes/LightTheme.ts b/packages/files-ui/src/Themes/LightTheme.ts index 95b20987c7..655f992286 100644 --- a/packages/files-ui/src/Themes/LightTheme.ts +++ b/packages/files-ui/src/Themes/LightTheme.ts @@ -172,7 +172,8 @@ export const lightTheme = createTheme({ }, addCard: { color: "#595959", - shadow: "0px 0px 4px rgba(24, 144, 255, 0.5)" + shadow: "0px 0px 4px rgba(24, 144, 255, 0.5)", + placeholderColor: "#BFBFBF" }, cookieBanner: { backgroundColor: "var(--csf-primary)" From eea83dfdac3ec583595184cdfe92247113c22be3 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 28 Jan 2022 10:00:01 +0000 Subject: [PATCH 2/2] lingui extract --- packages/files-ui/src/locales/fr/messages.po | 241 +++++-------------- 1 file changed, 57 insertions(+), 184 deletions(-) diff --git a/packages/files-ui/src/locales/fr/messages.po b/packages/files-ui/src/locales/fr/messages.po index dab382812d..e4b3ee657e 100644 --- a/packages/files-ui/src/locales/fr/messages.po +++ b/packages/files-ui/src/locales/fr/messages.po @@ -5,8 +5,7 @@ msgstr "" "POT-Creation-Date: 2021-04-23 11:05+0200\n" "PO-Revision-Date: 2022-01-20 22:53+0000\n" "Last-Translator: J. Lavoie \n" -"Language-Team: French \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -33,14 +32,8 @@ msgstr "<0>{currentStorage} de stockage" msgid "<0>{planStorageCapacity} of storage" msgstr "<0>{planStorageCapacity} de stockage" -msgid "" -"A backup secret phrase will be generated and used for your account.<0/>We do " -"not store it and <1>it can only be displayed once. Save it somewhere " -"safe!" -msgstr "" -"Une phrase secrète de sauvegarde sera générée et utilisé pour ce compte.<0/" -">Nous ne la sauvergardons pas <1>elle ne peut être affichée qu’une seule " -"fois. Gardez-la dans un endroit sûr !" +msgid "A backup secret phrase will be generated and used for your account.<0/>We do not store it and <1>it can only be displayed once. Save it somewhere safe!" +msgstr "Une phrase secrète de sauvegarde sera générée et utilisé pour ce compte.<0/>Nous ne la sauvergardons pas <1>elle ne peut être affichée qu’une seule fois. Gardez-la dans un endroit sûr !" msgid "A better sharing experience is coming soon." msgstr "Une meilleure expérience de partage sera bientôt disponible." @@ -55,9 +48,7 @@ msgid "Accepted currencies" msgstr "Devises acceptées" msgid "Access your billing history in settings or view your" -msgstr "" -"Accédez à l'historique de votre facturation dans les paramètres ou " -"visualisez votre" +msgstr "Accédez à l'historique de votre facturation dans les paramètres ou visualisez votre" msgid "Account" msgstr "Compte" @@ -77,13 +68,8 @@ msgstr "Ajouter une carte de crédit" msgid "Add a username" msgstr "Ajouter un nom d’utilisateur" -msgid "" -"Add at least one more authentication method to protect your account. You’d " -"only need any two to sign in to Files from any device." -msgstr "" -"Ajoutez au moins une méthode d’authentification pour protéger ce compte. " -"Vous avez besoin de deux méthode pour accéder à Files depuis n’importe quel " -"appareil." +msgid "Add at least one more authentication method to protect your account. You’d only need any two to sign in to Files from any device." +msgstr "Ajoutez au moins une méthode d’authentification pour protéger ce compte. Vous avez besoin de deux méthode pour accéder à Files depuis n’importe quel appareil." msgid "Add by sharing address, username, wallet address or ENS" msgstr "" @@ -98,9 +84,7 @@ msgid "Add more files" msgstr "Ajouter d’autres fichiers" msgid "Add viewers and editors by username, sharing id or Ethereum address." -msgstr "" -"Ajoutez des personnes pouvant visualiser ou afficher par nom d'utilisateur, " -"identifiant de partage ou adresse Ethereum." +msgstr "Ajoutez des personnes pouvant visualiser ou afficher par nom d'utilisateur, identifiant de partage ou adresse Ethereum." msgid "Adding you to the shared folder..." msgstr "Je vous ajoute au dossier partagé…" @@ -124,18 +108,13 @@ msgid "Approve" msgstr "Accepter" msgid "Are you sure? This will delete your default payment method." -msgstr "" -"Êtes-vous sûr(e) ? Ceci va supprimer votre moyen de paiement par défaut." +msgstr "Êtes-vous sûr(e) ? Ceci va supprimer votre moyen de paiement par défaut." msgid "Backup secret phrase" msgstr "Phrase secrète de sauvegarde" -msgid "" -"Backup secret phrase does not match user account, please double-check and " -"try again." -msgstr "" -"La phrase secrète de sauvegarde est incorrecte, merci de vérifier et " -"réessayer." +msgid "Backup secret phrase does not match user account, please double-check and try again." +msgstr "La phrase secrète de sauvegarde est incorrecte, merci de vérifier et réessayer." msgid "Billing history" msgstr "Historique des facturations" @@ -155,19 +134,11 @@ msgstr "Explorateur :" msgid "Bucket id" msgstr "Identifiant du seau" -msgid "" -"By connecting your wallet, you agree to our <0>Terms of Service and " -"<1>Privacy Policy" -msgstr "" -"En connectant votre portefeuille, vous acceptez nos <0>conditions de " -"service et notre <1>politique de confidentialité" +msgid "By connecting your wallet, you agree to our <0>Terms of Service and <1>Privacy Policy" +msgstr "En connectant votre portefeuille, vous acceptez nos <0>conditions de service et notre <1>politique de confidentialité" -msgid "" -"By forgetting this browser, you will not be able to use its associated " -"recovery key to sign-in." -msgstr "" -"En oubliant ce navigateur, vous ne pourrez pas utiliser la clé de " -"récupération qui lui est associée pour vous connecter." +msgid "By forgetting this browser, you will not be able to use its associated recovery key to sign-in." +msgstr "En oubliant ce navigateur, vous ne pourrez pas utiliser la clé de récupération qui lui est associée pour vous connecter." msgid "CID (Content Identifier)" msgstr "CID (Identifiant de contenu)" @@ -197,8 +168,7 @@ msgid "Change plan" msgstr "Changer de formule" msgid "Check your inbox! We've sent another email." -msgstr "" -"Vérifiez votre boîte de réception ! Nous avons envoyé un autre courriel." +msgstr "Vérifiez votre boîte de réception ! Nous avons envoyé un autre courriel." msgid "Click or drag to upload files" msgstr "Cliquer ou faire glisser un ficher pour le téléverser" @@ -221,7 +191,6 @@ msgstr "Confirmer l'augmentation de la formule" msgid "Confirmation" msgstr "Confirmation" -#, fuzzy msgid "Connect Wallet" msgstr "Connecter un portefeuille" @@ -447,12 +416,8 @@ msgstr "Le nom du dossier est déjà utilisé" msgid "Folders" msgstr "Dossiers" -msgid "" -"For security reasons, each time you sign in we’ll ask you for one of the " -"following to confirm your identity." -msgstr "" -"Pour des raisons de sécurité, chaque fois que vous vous connectez, nous vous " -"demanderons l’une des informations suivantes pour confirmer votre identité." +msgid "For security reasons, each time you sign in we’ll ask you for one of the following to confirm your identity." +msgstr "Pour des raisons de sécurité, chaque fois que vous vous connectez, nous vous demanderons l’une des informations suivantes pour confirmer votre identité." msgid "Forget this browser" msgstr "Oublier ce navigateur" @@ -505,13 +470,8 @@ msgstr "Avez-vous une question ?" msgid "Hello again!" msgstr "Ravis de vous revoir !" -msgid "" -"Hey! You only have two sign-in methods. If you lose that and have only one " -"left, you will be locked out of your account forever." -msgstr "" -"Hé ! Vous n’avez que deux méthodes de connexion. Si vous en perdez une et " -"qu’il ne vous en reste qu’une, vous ne pourrez plus jamais vous connecter à " -"votre compte." +msgid "Hey! You only have two sign-in methods. If you lose that and have only one left, you will be locked out of your account forever." +msgstr "Hé ! Vous n’avez que deux méthodes de connexion. Si vous en perdez une et qu’il ne vous en reste qu’une, vous ne pourrez plus jamais vous connecter à votre compte." msgid "Hold on, we are logging you in…" msgstr "Un instant, nous te connectons…" @@ -519,17 +479,8 @@ msgstr "Un instant, nous te connectons…" msgid "Home" msgstr "Accueil" -msgid "" -"If you think this file does not comply with our <0>Terms of Service, " -"please send the following information to report@files.chainsafe.io. Beware " -"that by sending the file's decryption key, an admin can then decrypt any " -"file in this shared folder." -msgstr "" -"Si vous pensez que ce fichier n'est pas conforme à nos <0>Conditions de " -"service, veuillez envoyer les informations suivantes à report@files." -"chainsafe.io. Attention, en envoyant la clé de déchiffrement du fichier, un " -"administrateur peut ensuite déchiffrer n'importe quel fichier de ce dossier " -"partagé." +msgid "If you think this file does not comply with our <0>Terms of Service, please send the following information to report@files.chainsafe.io. Beware that by sending the file's decryption key, an admin can then decrypt any file in this shared folder." +msgstr "Si vous pensez que ce fichier n'est pas conforme à nos <0>Conditions de service, veuillez envoyer les informations suivantes à report@files.chainsafe.io. Attention, en envoyant la clé de déchiffrement du fichier, un administrateur peut ensuite déchiffrer n'importe quel fichier de ce dossier partagé." msgid "Info" msgstr "Infos" @@ -576,12 +527,8 @@ msgstr "Chargement de l’aperçu" msgid "Loading your shared folders…" msgstr "Chargement de vos dossiers partagés…" -msgid "" -"Looks like you’re signing in from a new browser. Please choose one of the " -"following to continue:" -msgstr "" -"Il semble que vous vous connectiez à partir d’un nouveau navigateur. " -"Veuillez choisir une des options suivantes pour continuer :" +msgid "Looks like you’re signing in from a new browser. Please choose one of the following to continue:" +msgstr "Il semble que vous vous connectiez à partir d’un nouveau navigateur. Veuillez choisir une des options suivantes pour continuer :" msgid "Manage Access" msgstr "Gérer l’accès" @@ -676,11 +623,8 @@ msgstr "Ou créer un nouveau dossier partagé" msgid "Or Use an existing shared folder" msgstr "Ou utiliser un dossier partagé existant" -msgid "" -"Or confirm by signing into your Files on any browser you’ve used before." -msgstr "" -"Ou accepte la requête de connexion depuis n’importe quel appareil ou " -"navigateur utilisé auparavant." +msgid "Or confirm by signing into your Files on any browser you’ve used before." +msgstr "Ou accepte la requête de connexion depuis n’importe quel appareil ou navigateur utilisé auparavant." msgid "Or using one of the following:" msgstr "Ou en utilisant l’un des moyens suivants :" @@ -694,10 +638,8 @@ msgstr "Mot de passe" msgid "Password confirmation is required" msgstr "La confirmation du mot de passe est requise" -msgid "" -"Password does not match user account, please double-check and try again." -msgstr "" -"Le mot de passe ne correspond pas au compte, merci de vérifier et réessayer." +msgid "Password does not match user account, please double-check and try again." +msgstr "Le mot de passe ne correspond pas au compte, merci de vérifier et réessayer." msgid "Password needs to be more complex" msgstr "Le mot de passe doit être plus complexe" @@ -729,9 +671,7 @@ msgstr "Méthode de paiement" msgid "Plan changed successfully" msgstr "Formule changée" -msgid "" -"Please complete payment of the following outstanding invoices in order to " -"avoid account suspension" +msgid "Please complete payment of the following outstanding invoices in order to avoid account suspension" msgstr "" msgid "Please enter a file name" @@ -948,9 +888,7 @@ msgid "Social Sign-in Wallet" msgstr "Connecté avec un réseau social ou wallet" msgid "Something went wrong with email login! Please try again." -msgstr "" -"Un problème est survenu lors de la connexion avec courriel ! Veuillez " -"réessayer." +msgstr "Un problème est survenu lors de la connexion avec courriel ! Veuillez réessayer." msgid "Something went wrong!" msgstr "Quelque chose a mal tourné !" @@ -985,12 +923,8 @@ msgstr "Changer de formule" msgid "Switch to Free plan" msgstr "Passer à la formule gratuite" -msgid "" -"System maintenance is scheduled to start at {0}. The system will be " -"unavailable." -msgstr "" -"Une maintenance du système est prévue pour démarrer à {0}. Le système sera " -"indisponible." +msgid "System maintenance is scheduled to start at {0}. The system will be unavailable." +msgstr "Une maintenance du système est prévue pour démarrer à {0}. Le système sera indisponible." msgid "Teams" msgstr "Équipes" @@ -1035,8 +969,7 @@ msgid "There was an error deleting your data" msgstr "Une erreur s'est produite lors de la suppression de vos données" msgid "There was an error getting search results" -msgstr "" -"Une erreur s’est produite lors de l’obtention des résultats de recherche" +msgstr "Une erreur s’est produite lors de l’obtention des résultats de recherche" msgid "There was an error getting the preview." msgstr "Une erreur s’est produite lors de la génération de l’aperçu." @@ -1056,11 +989,8 @@ msgstr "Cette carte deviendra votre méthode de paiement par défaut" msgid "This is the free product." msgstr "Ceci est la version gratuite." -msgid "" -"This link is marlformed. Please verify that you copy/pasted it correctly." -msgstr "" -"Ce lien est marlformé. Veuillez vérifier que vous l'avez copié/collé " -"correctement." +msgid "This link is marlformed. Please verify that you copy/pasted it correctly." +msgstr "Ce lien est marlformé. Veuillez vérifier que vous l'avez copié/collé correctement." msgid "This link is not valid any more." msgstr "Ce lien n'est plus valide." @@ -1071,17 +1001,8 @@ msgstr "Ce nom d’utilisateur est déjà pris" msgid "This website uses cookies" msgstr "Ce site web utilise des cookies" -msgid "" -"This website uses cookies that help the website function and track " -"interactions for analytics purposes. You have the right to decline our use " -"of cookies. For us to provide a customizable user experience to you, please " -"click on the Accept button below.<0>Learn more" -msgstr "" -"Ce site web utilise des cookies qui l'aident à fonctionner et à suivre les " -"interactions à des fins d'analyse. Vous avez le droit de refuser notre " -"utilisation des cookies. Pour que nous puissions vous offrir une expérience " -"utilisateur personnalisable, veuillez cliquer sur le bouton Accepter ci-" -"dessous.<0>En savoir plus" +msgid "This website uses cookies that help the website function and track interactions for analytics purposes. You have the right to decline our use of cookies. For us to provide a customizable user experience to you, please click on the Accept button below.<0>Learn more" +msgstr "Ce site web utilise des cookies qui l'aident à fonctionner et à suivre les interactions à des fins d'analyse. Vous avez le droit de refuser notre utilisation des cookies. Pour que nous puissions vous offrir une expérience utilisateur personnalisable, veuillez cliquer sur le bouton Accepter ci-dessous.<0>En savoir plus" msgid "Total" msgstr "Total" @@ -1138,9 +1059,7 @@ msgid "Username set successfully" msgstr "Nom d’utilisateur défini avec succès" msgid "Usernames are public and can't be changed after creation." -msgstr "" -"Les noms d’utilisateur sont publics et ne peuvent pas être modifiés après " -"leur création." +msgstr "Les noms d’utilisateur sont publics et ne peuvent pas être modifiés après leur création." msgid "Using an email:" msgstr "En utilisant un courriel :" @@ -1166,35 +1085,20 @@ msgstr "Addresse du wallet" msgid "Want to help shape this product?" msgstr "Vous voulez participer à l'élaboration de ce produit ?" -msgid "" -"We are performing routine maintenance of the system. Service status updates " -"will be posted on the <0>Files Support Channel on Discord" -msgstr "" -"Nous effectuons une maintenance de routine du système. Les mises à jour de " -"l'état du service seront postées sur le canal <0>Files Support<0> sur Discord" +msgid "We are performing routine maintenance of the system. Service status updates will be posted on the <0>Files Support Channel on Discord" +msgstr "Nous effectuons une maintenance de routine du système. Les mises à jour de l'état du service seront postées sur le canal <0>Files Support<0> sur Discord" msgid "We can't encrypt files larger than 2GB. Some items will not be uploaded" -msgstr "" -"Nous ne pouvons pas chiffrer les fichiers de plus de 2 Go. Certains éléments " -"ne pourront pas être téléversés" +msgstr "Nous ne pouvons pas chiffrer les fichiers de plus de 2 Go. Certains éléments ne pourront pas être téléversés" msgid "Web3: {0}" msgstr "Web3 : {0}" -msgid "" -"We’ve got a new authentication system in place. All you need to do is enter " -"your password again to migrate your credentials over to the new system." -msgstr "" -"Nous avons mis en place un nouveau système d’authentification. Tout ce que " -"vous avez à faire est de saisir à nouveau votre mot de passe pour migrer vos " -"informations d’identification vers le nouveau système." +msgid "We’ve got a new authentication system in place. All you need to do is enter your password again to migrate your credentials over to the new system." +msgstr "Nous avons mis en place un nouveau système d’authentification. Tout ce que vous avez à faire est de saisir à nouveau votre mot de passe pour migrer vos informations d’identification vers le nouveau système." -msgid "" -"We’ve sent an email to {email}. It contains a verification code that’ll sign " -"you in super quickly!" -msgstr "" -"Nous avons envoyé un courriel à {email}. Il contient un code de vérification " -"pour vous connecter !" +msgid "We’ve sent an email to {email}. It contains a verification code that’ll sign you in super quickly!" +msgstr "Nous avons envoyé un courriel à {email}. Il contient un code de vérification pour vous connecter !" msgid "What a fine day it is." msgstr "Quelle belle journée." @@ -1209,8 +1113,7 @@ msgid "You can change this later." msgstr "Vous pouvez en changer plus tard." msgid "You can now create shared folders to share a file." -msgstr "" -"Vous pouvez maintenant créer des dossiers partagés pour partager un fichier." +msgstr "Vous pouvez maintenant créer des dossiers partagés pour partager un fichier." msgid "You can't move folders to this path" msgstr "Vous ne pouvez pas déplacer les dossiers vers ce chemin" @@ -1231,36 +1134,22 @@ msgid "You were added to the shared folder ({0}): {1}" msgstr "Vous avez été ajouté(e) au dossier partagé ({0}) : {1}" msgid "You will need to sign a message in your wallet to complete sign in." -msgstr "" -"Vous devrez signer un message avec votre wallet pour terminer la procédure " -"connexion." +msgstr "Vous devrez signer un message avec votre wallet pour terminer la procédure connexion." msgid "You would lose the following features:" msgstr "Vous perdriez ces fonctionnalités :" -msgid "" -"You've got a payment due. Until you've settled up, we've placed your account " -"in restricted mode" -msgstr "" -"Vous avez un paiement en retard. Tant qu'il n'a pas été réglé, l'accès à " -"votre compte a été restreint" +msgid "You've got a payment due. Until you've settled up, we've placed your account in restricted mode" +msgstr "Vous avez un paiement en retard. Tant qu'il n'a pas été réglé, l'accès à votre compte a été restreint" -msgid "" -"Your content exceeds the {planStorageCapacity} storage capacity for this " -"plan." -msgstr "" -"Votre contenu dépasse la capacité de stockage de {planStorageCapacity} de " -"cette formule." +msgid "Your content exceeds the {planStorageCapacity} storage capacity for this plan." +msgstr "Votre contenu dépasse la capacité de stockage de {planStorageCapacity} de cette formule." msgid "Your plan" msgstr "Votre formule" -msgid "" -"Your recovery key can be used to restore your account in place of your " -"backup secret phrase." -msgstr "" -"Votre clé de récupération vous permet de récupérer l'accès à votre compte à " -"la place de la phrase secrète." +msgid "Your recovery key can be used to restore your account in place of your backup secret phrase." +msgstr "Votre clé de récupération vous permet de récupérer l'accès à votre compte à la place de la phrase secrète." msgid "can-edit" msgstr "peut-modifier" @@ -1281,23 +1170,13 @@ msgid "view-only" msgstr "affichage seul" msgid "{0, plural, one {Downloading {1} file} other {Downloading {2} files}}" -msgstr "" -"{0, plural, one {Téléchargement de {1} fichier} other {Téléchargement de {2} " -"fichiers}}" +msgstr "{0, plural, one {Téléchargement de {1} fichier} other {Téléchargement de {2} fichiers}}" -msgid "" -"{0, plural, one {Encrypting and uploading {1} file} other {Encrypting and " -"uploading {2} files}}" -msgstr "" -"{0, plural, one {Chiffrement et téléversement de {1} fichier} other " -"{Chiffrement et téléversements {2} fichiers}}" +msgid "{0, plural, one {Encrypting and uploading {1} file} other {Encrypting and uploading {2} files}}" +msgstr "{0, plural, one {Chiffrement et téléversement de {1} fichier} other {Chiffrement et téléversements {2} fichiers}}" -msgid "" -"{0, plural, one {You are about to delete {1} item.} other {You are about to " -"delete {2} items.}}" -msgstr "" -"{0, plural, one {Vous êtes sur le point de supprimer {1} élément.} other " -"{Vous êtes sur le point de supprimer {2} éléments.}}" +msgid "{0, plural, one {You are about to delete {1} item.} other {You are about to delete {2} items.}}" +msgstr "{0, plural, one {Vous êtes sur le point de supprimer {1} élément.} other {Vous êtes sur le point de supprimer {2} éléments.}}" msgid "{0} cancelled" msgstr "{0} annulé(s)" @@ -1331,9 +1210,3 @@ msgstr "{planStorageCapacity} de stockage" msgid "{successCount} files transferred successfully, {0} failed" msgstr "{successCount} fichiers transférés avec succès, {0} échec(s)" - -msgid "Monthly billing" -msgstr "Facturation mensuelle" - -msgid "Yearly billing" -msgstr "Paiement annuel"