diff --git a/src/app/Http/Controllers/ContentController.php b/src/app/Http/Controllers/ContentController.php --- a/src/app/Http/Controllers/ContentController.php +++ b/src/app/Http/Controllers/ContentController.php @@ -86,7 +86,7 @@ return preg_split('/\s*,\s*/', strtolower(trim($locales))); } - return ['en', 'de']; + return ['en', 'de', 'fr']; } /** diff --git a/src/resources/js/app.js b/src/resources/js/app.js --- a/src/resources/js/app.js +++ b/src/resources/js/app.js @@ -270,7 +270,7 @@ index = '\u00B9' } - return this.price(cost) + '/month' + index + return this.price(cost) + '/' + this.$t('wallet.month') + index }, clickRecord(event) { if (!/^(a|button|svg|path)$/i.test(event.target.nodeName)) { diff --git a/src/resources/lang/en/ui.php b/src/resources/lang/en/ui.php --- a/src/resources/lang/en/ui.php +++ b/src/resources/lang/en/ui.php @@ -401,6 +401,7 @@ . " We will then convert this to {pc}, and on the next page you will be provided with the bank-details to transfer the amount in {pc}.", 'fill-up' => "Fill up by", 'history' => "History", + 'month' => "month", 'noperm' => "Only account owners can access a wallet.", 'payment-amount-hint' => "Choose the amount by which you want to top up your wallet.", 'payment-method' => "Method of payment: {method}", diff --git a/src/resources/lang/fr/app.php b/src/resources/lang/fr/app.php new file mode 100644 --- /dev/null +++ b/src/resources/lang/fr/app.php @@ -0,0 +1,81 @@ + "L'auto-paiement a été supprimé.", + 'mandate-update-success' => "L'auto-paiement a été mis-à-jour.", + + 'planbutton' => "Choisir :plan", + 'siteuser' => "Utilisateur du :site", + 'domain-setconfig-success' => "Les paramètres du domaine sont mis à jour avec succès.", + 'user-setconfig-success' => "Les paramètres d'utilisateur sont mis à jour avec succès.", + + 'process-async' => "Le processus d'installation a été poussé. Veuillez patienter.", + 'process-user-new' => "Enregistrement d'un utilisateur...", + 'process-user-ldap-ready' => "Création d'un utilisateur...", + 'process-user-imap-ready' => "Création d'une boîte aux lettres...", + 'process-distlist-new' => "Enregistrement d'une liste de distribution...", + 'process-distlist-ldap-ready' => "Création d'une liste de distribution...", + 'process-domain-new' => "Enregistrement d'un domaine personnalisé...", + 'process-domain-ldap-ready' => "Création d'un domaine personnalisé...", + 'process-domain-verified' => "Vérification d'un domaine personnalisé...", + 'process-domain-confirmed' => "vérification de la propriété d'un domaine personnalisé...", + 'process-success' => "Le processus d'installation s'est terminé avec succès.", + 'process-error-user-ldap-ready' => "Échec de créar un utilisateur.", + 'process-error-user-imap-ready' => "Échec de la vérification de l'existence d'une boîte aux lettres.", + 'process-error-domain-ldap-ready' => "Échec de créer un domaine.", + 'process-error-domain-verified' => "Échec de vérifier un domaine.", + 'process-error-domain-confirmed' => "Échec de la vérification de la propriété d'un domaine.", + 'process-distlist-new' => "Enregistrement d'une liste de distribution...", + 'process-distlist-ldap-ready' => "Création d'une liste de distribution...", + 'process-error-distlist-ldap-ready' => "Échec de créer une liste de distrubion.", + + 'distlist-update-success' => "Liste de distribution mis-à-jour avec succès.", + 'distlist-create-success' => "Liste de distribution créer avec succès.", + 'distlist-delete-success' => "Liste de distribution suppriméee avec succès.", + 'distlist-suspend-success' => "Liste de distribution à été suspendue avec succès.", + 'distlist-unsuspend-success' => "Liste de distribution à été débloquée avec succès.", + + 'domain-verify-success' => "Domaine vérifié avec succès.", + 'domain-verify-error' => "Vérification de propriété de domaine à échoué.", + 'domain-suspend-success' => "Domaine suspendue avec succès.", + 'domain-unsuspend-success' => "Domaine debloqué avec succès.", + + 'user-update-success' => "Mis-à-jour des données de l'utilsateur effectué avec succès.", + 'user-create-success' => "Utilisateur a été crée avec succès.", + 'user-delete-success' => "Utilisateur a été supprimé avec succès.", + 'user-suspend-success' => "Utilisateur a été suspendu avec succès.", + 'user-unsuspend-success' => "Utilisateur a été debloqué avec succès.", + 'user-reset-2fa-success' => "Réinstallation de l'authentification à 2-Facteur avec succès.", + + 'search-foundxdomains' => "Les domaines :x ont été trouvés.", + 'search-foundxgroups' => "Les listes de distribution :x ont été trouvées.", + 'search-foundxusers' => "Les comptes d'utilisateurs :x ont été trouvés.", + + 'signup-invitations-created' => "L'invitation à été crée.|:count nombre d'invitations ont été crée.", + 'signup-invitations-csv-empty' => "Aucune adresses email valides ont été trouvées dans le fichier téléchargé.", + 'signup-invitations-csv-invalid-email' => "Une adresse email invalide a été trouvée (:email) on line :line.", + 'signup-invitation-delete-success' => "Invitation supprimée avec succès.", + 'signup-invitation-resend-success' => "Invitation ajoutée à la file d'attente d'envoi avec succès.", + + 'support-request-success' => "Demande de soutien soumise avec succès.", + 'support-request-error' => "La soumission de demande de soutien a échoué.", + + 'wallet-award-success' => "Le bonus a été ajouté au portefeuille avec succès.", + 'wallet-penalty-success' => "La pénalité a été ajoutée au portefeuille avec succès.", + 'wallet-update-success' => "Portefeuille d'utilisateur a été mis-à-jour avec succès.", + + 'wallet-notice-date' => "Avec vos abonnements actuels, le solde de votre compte durera jusqu'à environ :date (:days).", + 'wallet-notice-nocredit' => "Votre crédit a été epuisé, veuillez recharger immédiatement votre solde.", + 'wallet-notice-today' => "Votre reste crédit sera épuisé aujourd'hui, veuillez recharger immédiatement.", + 'wallet-notice-trial' => "Vous êtes dans votre période d'essai gratuite.", + 'wallet-notice-trial-end' => "Vous approchez de la fin de votre période d'essai gratuite, veuillez recharger pour continuer.", +]; diff --git a/src/resources/lang/fr/auth.php b/src/resources/lang/fr/auth.php new file mode 100644 --- /dev/null +++ b/src/resources/lang/fr/auth.php @@ -0,0 +1,19 @@ + 'Ces identifiants ne correspondent pas à nos enregistrements.', + 'password' => 'Le mot de passe fourni est incorrect.', + 'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.', +]; \ No newline at end of file diff --git a/src/resources/lang/fr/documents.php b/src/resources/lang/fr/documents.php new file mode 100644 --- /dev/null +++ b/src/resources/lang/fr/documents.php @@ -0,0 +1,40 @@ + "ID de Compte", + 'amount' => "Montant", + 'customer-no' => "No°de Client.", + 'date' => "Date", + 'description' => "Description", + 'period' => "Période", + 'total' => "Total", + + 'month1' => "Janvier", + 'month2' => "Février", + 'month3' => "Mars", + 'month4' => "Avril", + 'month5' => "Mai", + 'month6' => "Juin", + 'month7' => "Juillet", + 'month8' => "Août", + 'month9' => "Septembre", + 'month10' => "Octobre", + 'month11' => "Novembre", + 'month12' => "Décembre", + + 'receipt-filename' => ":site Receipt for :id", + 'receipt-title' => "Reçu pour :month :year", + 'receipt-item-desc' => ":site Services", + 'receipt-refund' => "Remboursement", + 'receipt-chargeback' => "Refacturation", + + 'subtotal' => "Sous-Total", + 'vat' => "VAT (:rate%)", +]; diff --git a/src/resources/lang/fr/mail.php b/src/resources/lang/fr/mail.php new file mode 100644 --- /dev/null +++ b/src/resources/lang/fr/mail.php @@ -0,0 +1,90 @@ + "Salut :name,", + 'footer1' => "Meilleures salutations,", + 'footer2' => "Votre :site Équipe", + + 'more-info-html' => "Cliquez ici pour plus d'information.", + 'more-info-text' => "Cliquez :href pour plus d'information.", + + 'negativebalance-subject' => ":site Paiement Requis", + 'negativebalance-body' => "C'est une notification pour vous informer que votre :site le solde du compte est en négatif et nécessite votre attention." + . " Veillez à mettre en place un auto-paiement pour éviter de tel avertissement comme celui-ci dans le future.", + 'negativebalance-body-ext' => "Régler votre compte pour le maintenir en fontion:", + + 'negativebalancereminder-subject' => ":site Rappel de Paiement", + 'negativebalancereminder-body' => "Vous n'avez peut-être pas rendu compte que vous êtes en retard avec votre paiement pour :site compte." + . " Veillez à mettre en place un auto-paiement pour éviter de tel avertissement comme celui-ci dans le future.", + 'negativebalancereminder-body-ext' => "Régler votre compte pour le maintenir en fontion:", + 'negativebalancereminder-body-warning' => "Soyez conscient que votre compte sera suspendu si le" + . " solde de votre compte n'est réglé avant le :date.", + + 'negativebalancesuspended-subject' => ":site Compte Suspendu", + 'negativebalancesuspended-body' => "Votre :site compte a été suspendu à la suite d'un solde négatif pendant trop longtemps." + . " Veillez nvisager de mettre en place un auto-paiement pour éviter de tel avertissement comme celui-ci dans le future.", + 'negativebalancesuspended-body-ext' => "Régler votre compte pour le maintenir en fontion:", + 'negativebalancesuspended-body-warning' => "Veuillez vous assurer que votre compte et toutes ses données seront supprimés" + . " si le solde de votre compte n'est pas réglé avant le :date.", + + 'negativebalancebeforedelete-subject' => ":site Dernier Avertissement", + 'negativebalancebeforedelete-body' => "Ceci-ci est le dernier rappel pour régler votre :site solde de compte." + . " votre compte et toutes ses données seront supprimés si le solde de votre compte nest pas régler avant le :date.", + 'negativebalancebeforedelete-body-ext' => "Régler votre compte immédiatement:", + + 'passwordreset-subject' => ":site Réinitialisation du mot de passe", + 'passwordreset-body1' => "Quelqu'un a récemment demandé de changer votre :site mot de passe.", + 'passwordreset-body2' => "Si vous êtes dans ce cas, veuillez utiliser ce code de vérification pour terminer le processus:", + 'passwordreset-body3' => "Vous pourrez également cliquer sur le lien ci-dessous:", + 'passwordreset-body4' => "si vous n'avez pas fait une telle demande, vous pouvez soit ignorer ce message, soit prendre contact avec nous au sujet de cet incident.", + + 'paymentmandatedisabled-subject' => ":site Problème d'auto-paiement", + 'paymentmandatedisabled-body' => "Votre :site solde du compte est négatif" + . " et le montant configuré pour le rechargement automatique du solde ne suffit pas" + . " le coût des abonnements consommés.", + 'paymentmandatedisabled-body-ext' => "En vous facturant plusieurs fois le même monant dans un court laps de temps" + . " peut entraîner des problêmes avec le fournisseur du service de paiement." + . " Pour éviter tout problème, nous avons suspendu l'auto-paiement pour votre compte." + . " Pour resourdre le problème,veuillez vous connecter aux paramètres de votre compte et modifier le montant d'auto-paiement.", + + 'paymentfailure-subject' => ":site Paiement Echoué", + 'paymentfailure-body' => "Un problème est survenu avec l'auto-paiement pour votre :site account.\n" + . "Nous avons tenté de vous facturer via votre méthode de paiement choisie, mais le chargement n'a pas été effectué.", + 'paymentfailure-body-ext' => "Pour éviter tout problème supplémentaire, nous avons suspendu l'auto-paiement sur votre compte." + . " Pour resourdre le problème,veuillez vous connecter aux paramètres de votre compte au", + 'paymentfailure-body-rest' => "Vous y trouverez la possibilité de payer manuellement votre compte et" + . " de modifier vos paramètres d'auto-paiement.", + + 'paymentsuccess-subject' => ":site Paiement Effectué", + 'paymentsuccess-body' => "L'auto-paiement pour votre :site le compte s'est exécuté sans problème. " + . "Vous pouvez contrôler le solde de votre nouveau compte et obtenir plus de détails ici:", + + 'support' => "Cas particulier? Il y a un probléme avec une charge?\n" + . ":site Le support reste à votre disposition.", + + 'signupcode-subject' => ":site Enregistrement", + 'signupcode-body1' => "Voici votre code de vérification pour le :site registration process:", + 'signupcode-body2' => "Vous pouvez également continuer avec le processus d'enregistrement en cliquant sur le lien ci-dessous:", + + 'signupinvitation-subject' => ":site Invitation", + 'signupinvitation-header' => "Salut,", + 'signupinvitation-body1' => "Vous êtes invité à joindre :site. Cliquez sur le lien ci-dessous pour vous inscrire.", + 'signupinvitation-body2' => "", + + 'suspendeddebtor-subject' => ":site Compte Suspendu", + 'suspendeddebtor-body' => "Vous êtes en retard avec le paiement de votre :site compte" + . " pour plus de :days jours. Votre compte est suspendu.", + 'suspendeddebtor-middle' => "Réglez immédiatement pour réactiver votre compte.", + 'suspendeddebtor-cancel' => "Vous ne souhaitez plus être notre client?" + . " Voici la démarche à suivre pour annuler votre compte:", + +]; diff --git a/src/resources/lang/fr/meet.php b/src/resources/lang/fr/meet.php new file mode 100644 --- /dev/null +++ b/src/resources/lang/fr/meet.php @@ -0,0 +1,30 @@ + 'La connexion n´existe pas.', + 'connection-dismiss-error' => 'Échec du rejet de la connexion.', + 'room-not-found' => 'La salle n´existe pas.', + 'room-setconfig-success' => 'La configuration de la salle a été actualisée avec succès.', + 'room-unsupported-option-error' => 'Option de configuration de la salle invalide.', + 'session-not-found' => 'La session n\'existe pas.', + 'session-create-error' => 'Échec de la création de la session.', + 'session-join-error' => 'Échec de se joindre à la session.', + 'session-close-error' => 'Échec de fermer la session.', + 'session-close-success' => 'La session a été terminée avec succès.', + 'session-password-error' => 'Échec de se joindre à la session. Mot de pas invalide.', + 'session-request-accept-error' => 'Echec d\'accepter la demande d\'adhésion', + 'session-request-deny-error' => 'Echec de refuser la demande d\'adhésion.', + 'session-room-locked-error' => 'Échec de se joindre à la session. Salle verrouillée.', +]; diff --git a/src/resources/lang/fr/transactions.php b/src/resources/lang/fr/transactions.php new file mode 100644 --- /dev/null +++ b/src/resources/lang/fr/transactions.php @@ -0,0 +1,26 @@ + ':user_email a créé :sku_title pour :object', + 'entitlement-billed' => ':sku_title for :object est facturé à :amount', + 'entitlement-deleted' => ':user_email supprimé :sku_title pour :object', + + 'entitlement-created-short' => 'Ajoutée :sku_title pour :object', + 'entitlement-billed-short' => 'Facturé :sku_title pour :object', + 'entitlement-deleted-short' => 'Supprimé :sku_title pour :object', + + 'wallet-award' => 'bonus de :amount attribué à :wallet; :description', + 'wallet-chargeback' => ':amount été refacturé par :wallet', + 'wallet-credit' => ':amount a été ajouté au solde de :wallet', + 'wallet-debit' => ':amount a été déduit du solde de :wallet', + 'wallet-penalty' => 'Le solde de :wallet été réduit de :amount; :description', + 'wallet-refund' => ':amount a été remboursé sur le solde de :wallet', + 'wallet-refund' => ':amount a été remboursé par :wallet', + + 'wallet-award-short' => 'Prime: :description', + 'wallet-chargeback-short' => 'Rétrofacturation', + 'wallet-credit-short' => 'Paiement', + 'wallet-debit-short' => 'Déduction', + 'wallet-penalty-short' => 'Charger: :description', + 'wallet-refund-short' => 'Remboursement: :description', +]; diff --git a/src/resources/lang/fr/ui.php b/src/resources/lang/fr/ui.php new file mode 100644 --- /dev/null +++ b/src/resources/lang/fr/ui.php @@ -0,0 +1,421 @@ + [ + 'faq' => "FAQ", + ], + + 'btn' => [ + 'add' => "Ajouter", + 'accept' => "Accepter", + 'back' => "Back", + 'cancel' => "Annuler", + 'close' => "Fermer", + 'continue' => "Continuer", + 'delete' => "Supprimer", + 'deny' => "Refuser", + 'download' => "Télécharger", + 'edit' => "Modifier", + 'file' => "Choisir le ficher...", + 'moreinfo' => "Plus d'information", + 'refresh' => "Actualiser", + 'reset' => "Réinitialiser", + 'resend' => "Envoyer à nouveau", + 'save' => "Sauvegarder", + 'search' => "Chercher", + 'signup' => "S'inscrire", + 'submit' => "Soumettre", + 'suspend' => "Suspendre", + 'unsuspend' => "Débloquer", + 'verify' => "Vérifier", + ], + + 'dashboard' => [ + 'beta' => "bêta", + 'distlists' => "Listes de distribution", + 'chat' => "Chat Vidéo", + 'domains' => "Domaines", + 'invitations' => "Invitations", + 'profile' => "Votre profil", + 'users' => "D'utilisateurs", + 'wallet' => "Portefeuille", + 'webmail' => "Webmail", + 'stats' => "Statistiques", + ], + + 'distlist' => [ + 'list-title' => "Liste de distribution | Listes de Distribution", + 'create' => "Créer une liste", + 'delete' => "Suprimmer une list", + 'email' => "Courriel", + 'list-empty' => "il n'y a pas de listes de distribution dans ce compte.", + 'new' => "Nouvelle liste de distribution", + 'recipients' => "Destinataires", + ], + + 'domain' => [ + 'dns-verify' => "Exemple de vérification du DNS d'un domaine:", + 'dns-config' => "Exemple de configuration du DNS d'un domaine:", + 'namespace' => "Espace de noms", + 'verify' => "Vérification du domaine", + 'verify-intro' => "Afin de confirmer que vous êtes bien le titulaire du domaine, nous devons exécuter un processus de vérification avant de l'activer définitivement pour la livraison d'e-mails.", + 'verify-dns' => "Le domaine doit avoir l'une des entrées suivantes dans le DNS:", + 'verify-dns-txt' => "Entrée TXT avec valeur:", + 'verify-dns-cname' => "ou entrée CNAME:", + 'verify-outro' => "Lorsque cela est fait, appuyez sur le bouton ci-dessous pour lancer la vérification.", + 'verify-sample' => "Voici un fichier de zone simple pour votre domaine:", + 'config' => "Configuration du domaine", + 'config-intro' => "Afin de permettre à {app} de recevoir le trafic de messagerie pour votre domaine, vous devez ajuster les paramètres DNS, plus précisément les entrées MX, en conséquence.", + 'config-sample' => "Modifiez le fichier de zone de votre domaine et remplacez les entrées MX existantes par les valeurs suivantes:", + 'config-hint' => "Si vous ne savez pas comment définir les entrées DNS pour votre domaine, veuillez contacter le service d'enregistrement auprès duquel vous avez enregistré le domaine ou votre fournisseur d'hébergement Web.", + 'spf-whitelist' => "SPF Whitelist", + 'spf-whitelist-text' => "Le Sender Policy Framework permet à un domaine expéditeur de dévoiler, par le biais de DNS," + . " quels systèmes sont autorisés à envoyer des e-mails avec une adresse d'expéditeur d'enveloppe dans le domaine en question.", + 'spf-whitelist-ex' => "Vous pouvez ici spécifier une liste de serveurs autorisés, par exemple: .ess.barracuda.com.", + ], + + 'error' => [ + '400' => "Mauvaide demande", + '401' => "Non autorisé", + '403' => "Accès refusé", + '404' => "Pas trouvé", + '405' => "Méthode non autorisée", + '500' => "Erreur de serveur interne", + 'unknown' => "Erreur inconnu", + 'server' => "Erreur de serveur", + ], + + 'form' => [ + 'amount' => "Montant", + 'code' => "Le code de confirmation", + 'config' => "Configuration", + 'date' => "Date", + 'description' => "Description", + 'details' => "Détails", + 'domain' => "Domaine", + 'email' => "Adresse e-mail", + 'firstname' => "Prénom", + 'lastname' => "Nom de famille", + 'none' => "aucun", + 'or' => "ou", + 'password' => "Mot de passe", + 'password-confirm' => "Confirmer le mot de passe", + 'phone' => "Téléphone", + 'status' => "État", + 'surname' => "Nom de famille", + 'user' => "Utilisateur", + 'primary-email' => "Email principal", + 'id' => "ID", + 'created' => "Créé", + 'deleted' => "Supprimé", + 'disabled' => "Désactivé", + 'enabled' => "Activé", + 'general' => "Général", + 'settings' => "Paramètres", + ], + + 'invitation' => [ + 'create' => "Créez des invitation(s)", + 'create-title' => "Invitation à une inscription", + 'create-email' => "Saisissez l'adresse électronique de la personne que vous souhaitez inviter.", + 'create-csv' => "Pour envoyer plusieurs invitations à la fois, fournissez un fichier CSV (séparé par des virgules) ou un fichier en texte brut, contenant une adresse e-mail par ligne.", + 'empty-list' => "Il y a aucune invitation dans la mémoire de données.", + 'title' => "Invitation d'inscription", + 'search' => "Adresse E-mail ou domaine", + 'send' => "Envoyer invitation(s)", + 'status-completed' => "Utilisateur s'est inscrit", + 'status-failed' => "L'envoi a échoué", + 'status-sent' => "Envoyé", + 'status-new' => "Pas encore envoyé", + ], + + 'lang' => [ + 'en' => "Anglais", + 'de' => "Allemand", + 'fr' => "Français", + 'it' => "Italien", + ], + + 'login' => [ + '2fa' => "Code du 2ème facteur", + '2fa_desc' => "Le code du 2ème facteur est facultatif pour les utilisateurs qui n'ont pas configuré l'authentification à deux facteurs.", + 'forgot_password' => "Mot de passe oublié?", + 'header' => "Veuillez vous connecter", + 'sign_in' => "Se connecter", + 'webmail' => "Webmail" + ], + + 'meet' => [ + 'title' => "Voix et vidéo-conférence", + 'welcome' => "Bienvenue dans notre programme bêta pour les conférences vocales et vidéo.", + 'url' => "Vous disposez d'une salle avec l'URL ci-dessous. Cette salle ouvre uniquement quand vous y êtes vous-même. Utilisez cette URL pour inviter des personnes à vous rejoindre.", + 'notice' => "Il s'agit d'un travail en évolution et d'autres fonctions seront ajoutées au fil du temps. Les fonctions actuelles sont les suivantes:", + 'sharing' => "Partage d'écran", + 'sharing-text' => "Partagez votre écran pour des présentations ou des exposés.", + 'security' => "sécurité de chambre", + 'security-text' => "Renforcez la sécurité de la salle en définissant un mot de passe que les participants devront connaître." + . " avant de pouvoir entrer, ou verrouiller la porte afin que les participants doivent frapper, et un modérateur peut accepter ou refuser ces demandes.", + 'qa' => "Lever la main (Q&A)", + 'qa-text' => "Les membres du public silencieux peuvent lever la main pour animer une séance de questions-réponses avec les membres du panel.", + 'moderation' => "Délégation des Modérateurs", + 'moderation-text' => "Déléguer l'autorité du modérateur pour la séance, afin qu'un orateur ne soit pas inutilement" + . " interrompu par l'arrivée des participants et d'autres tâches du modérateur.", + 'eject' => "Éjecter les participants", + 'eject-text' => "Éjectez les participants de la session afin de les obliger à se reconnecter ou de remédier aux violations des règles." + . " Cliquez sur l'icône de l'utilisateur pour un renvoi effectif.", + 'silent' => "Membres du Public en Silence", + 'silent-text' => "Pour une séance de type webinaire, configurez la salle pour obliger tous les nouveaux participants à être des spectateurs silencieux.", + 'interpreters' => "Canaux d'Audio Spécifiques de Langues", + 'interpreters-text' => "Désignez un participant pour interpréter l'audio original dans une langue cible, pour les sessions avec des participants multilingues." + . " L'interprète doit être capable de relayer l'audio original et de le remplacer.", + 'beta-notice' => "Rappelez-vous qu'il s'agit d'une version bêta et pourrait entraîner des problèmes." + . " Au cas où vous rencontreriez des problèmes, n'hésitez pas à nous en faire part en contactant le support.", + + // Room options dialog + 'options' => "Options de salle", + 'password' => "Mot de passe", + 'password-none' => "aucun", + 'password-clear' => "Effacer mot de passe", + 'password-set' => "Définir le mot de passe", + 'password-text' => "Vous pouvez ajouter un mot de passe à votre session. Les participants devront fournir le mot de passe avant d'être autorisés à rejoindre la session.", + 'lock' => "Salle verrouillée", + 'lock-text' => "Lorsque la salle est verrouillée, les participants doivent être approuvés par un modérateur avant de pouvoir rejoindre la réunion.", + 'nomedia' => "Réservé aux abonnés", + 'nomedia-text' => "Force tous les participants à se joindre en tant qu'abonnés (avec caméra et microphone désactivés)" + . "Les modérateurs pourront les promouvoir en tant qu'éditeurs tout au long de la session.", + + // Room menu + 'partcnt' => "Nombres de participants", + 'menu-audio-mute' => "Désactiver le son", + 'menu-audio-unmute' => "Activer le son", + 'menu-video-mute' => "Désactiver la vidéo", + 'menu-video-unmute' => "Activer la vidéo", + 'menu-screen' => "Partager l'écran", + 'menu-hand-lower' => "Baisser la main", + 'menu-hand-raise' => "Lever la main", + 'menu-channel' => "Canal de langue interprétée", + 'menu-chat' => "Le Chat", + 'menu-fullscreen' => "Plein écran", + 'menu-fullscreen-exit' => "Sortir en plein écran", + 'menu-leave' => "Quitter la session", + + // Room setup screen + 'setup-title' => "Préparez votre session", + 'mic' => "Microphone", + 'cam' => "Caméra", + 'nick' => "Surnom", + 'nick-placeholder' => "Votre nom", + 'join' => "JOINDRE", + 'joinnow' => "JOINDRE MAINTENANT", + 'imaowner' => "Je suis le propriétaire", + + // Room + 'qa' => "Q & A", + 'leave-title' => "Salle fermée", + 'leave-body' => "La session a été fermée par le propriétaire de la salle.", + 'media-title' => "Configuration des médias", + 'join-request' => "Demande de rejoindre", + 'join-requested' => "{user} demandé à rejoindre.", + + // Status messages + 'status-init' => "Vérification de la salle...", + 'status-323' => "La salle est fermée. Veuillez attendre le démarrage de la session par le propriétaire.", + 'status-324' => "La salle est fermée. Elle sera ouverte aux autres participants après votre adhésion.", + 'status-325' => "La salle est prête. Veuillez entrer un mot de passe valide.", + 'status-326' => "La salle est fermée. Veuillez entrer votre nom et réessayer.", + 'status-327' => "En attendant la permission de joindre la salle.", + 'status-404' => "La salle n'existe pas.", + 'status-429' => "Trop de demande. Veuillez, patienter.", + 'status-500' => "La connexion à la salle a échoué. Erreur de serveur.", + + // Other menus + 'media-setup' => "configuration des médias", + 'perm' => "Permissions", + 'perm-av' => "Publication d'audio et vidéo", + 'perm-mod' => "Modération", + 'lang-int' => "Interprète de langue", + 'menu-options' => "Options", + ], + + 'menu' => [ + 'cockpit' => "Cockpit", + 'login' => "Connecter", + 'logout' => "Deconnecter", + 'signup' => "S'inscrire", + 'toggle' => "Basculer la navigation", + ], + + 'msg' => [ + 'initializing' => "Initialisation...", + 'loading' => "Chargement...", + 'loading-failed' => "Échec du chargement des données.", + 'notfound' => "Resource introuvable.", + 'info' => "Information", + 'error' => "Erreur", + 'warning' => "Avertissement", + 'success' => "Succès", + ], + + 'nav' => [ + 'more' => "Charger plus", + 'step' => "Étape {i}/{n}", + ], + + 'password' => [ + 'reset' => "Réinitialiser le mot de passe", + 'reset-step1' => "Entrez votre adresse e-mail pour réinitialiser votre mot de passe.", + 'reset-step1-hint' => "Veuillez vérifier votre dossier de spam ou débloquer {email}.", + 'reset-step2' => "Nous avons envoyé un code de confirmation à votre adresse e-mail externe." + . " Entrez le code que nous vous avons envoyé, ou cliquez sur le lien dans le message.", + ], + + 'signup' => [ + 'email' => "Adresse e-mail actuelle", + 'login' => "connecter", + 'title' => "S'inscrire", + 'step1' => "Inscrivez-vous pour commencer votre mois gratuit.", + 'step2' => "Nous avons envoyé un code de confirmation à votre adresse e-mail. Entrez le code que nous vous avons envoyé, ou cliquez sur le lien dans le message.", + 'step3' => "Créez votre identité Kolab (vous pourrez choisir des adresses supplémentaires plus tard).", + 'voucher' => "Coupon Code", + ], + + 'status' => [ + 'prepare-account' => "Votre compte est en cours de préparation.", + 'prepare-domain' => "Le domain est en cours de préparation.", + 'prepare-distlist' => "La liste de distribution est en cours de préparation.", + 'prepare-user' => "Le compte d'utilisateur est en cours de préparation.", + 'prepare-hint' => "Certaines fonctionnalités peuvent être manquantes ou en lecture seule pour le moment.", + 'prepare-refresh' => "Le processus ne se termine jamais? Appuyez sur le bouton \"Refresh\", s'il vous plaît.", + 'ready-account' => "Votre compte est presque prêt.", + 'ready-domain' => "Le domaine est presque prêt.", + 'ready-distlist' => "La liste de distribution est presque prête.", + 'ready-user' => "Le compte d'utilisateur est presque prêt.", + 'verify' => "Veuillez vérifier votre domaine pour terminer le processus de configuration.", + 'verify-domain' => "Vérifier domaine", + 'deleted' => "Supprimé", + 'suspended' => "Suspendu", + 'notready' => "Pas Prêt", + 'active' => "Actif", + ], + + 'support' => [ + 'title' => "Contacter Support", + 'id' => "Numéro de client ou adresse é-mail que vous avez chez nous.", + 'id-pl' => "e.g. 12345678 ou john@kolab.org", + 'id-hint' => "Laissez vide si vous n'êtes pas encore client", + 'name' => "Nom", + 'name-pl' => "comment nous devons vous adresser dans notre réponse", + 'email' => "adresse e-mail qui fonctionne", + 'email-pl' => "assurez-vous que nous pouvons vous atteindre à cette adresse", + 'summary' => "Résumé du problème", + 'summary-pl' => "une phrase qui résume votre situation", + 'expl' => "Analyse du problème", + ], + + 'user' => [ + '2fa-hint1' => "Cela éliminera le droit à l'authentification à 2-Facteurs ainsi que les éléments configurés par l'utilisateur.", + '2fa-hint2' => "Veuillez vous assurer que l'identité de l'utilisateur est correctement confirmée.", + 'address' => "Adresse", + 'aliases' => "Alias", + 'aliases-email' => "Alias E-mail", + 'aliases-none' => "Cet utilisateur n'aucune alias e-mail.", + 'add-bonus' => "Ajouter un bonus", + 'add-bonus-title' => "Ajouter un bonus au portefeuille", + 'add-penalty' => "Ajouter une pénalité", + 'add-penalty-title' => "Ajouter une pénalité au portefeuille", + 'auto-payment' => "Auto-paiement", + 'auto-payment-text' => "Recharger par {amount} quand le montant est inférieur à {balance} utilisant {method}", + 'country' => "Pays", + 'create' => "Créer un utilisateur", + 'custno' => "No. de Client.", + 'delete' => "Supprimer Utilisateur", + 'delete-email' => "Supprimer {email}", + 'delete-text' => "Voulez-vous vraiment supprimer cet utilisateur de façon permanente?" + . " Cela supprimera toutes les données du compte et retirera la permission d'accéder au compte d'e-email." + . " Veuillez noter que cette action ne peut pas être révoquée.", + 'discount' => "Rabais", + 'discount-hint' => "rabais appliqué", + 'discount-title' => "Rabais de compte", + 'distlists' => "Listes de Distribution", + 'distlists-none' => "Il y a aucune liste de distribution dans ce compte.", + 'domains' => "Domaines", + 'domains-none' => "Il y a pas de domaines dans ce compte.", + 'ext-email' => "E-mail externe", + 'finances' => "Finances", + 'greylisting' => "Greylisting", + 'greylisting-text' => "La greylisting est une méthode de défense des utilisateurs contre le spam." + . " Tout e-mail entrant provenant d'un expéditeur non reconnu est temporairement rejeté." + . " Le serveur d'origine doit réessayer après un délai cette fois-ci, le mail sera accepté." + . " Les spammeurs ne réessayent généralement pas de remettre le mail.", + 'list-title' => "Comptes d'utilisateur", + 'managed-by' => "Géré par", + 'new' => "Nouveau compte d'utilisateur", + 'org' => "Organisation", + 'package' => "Paquet", + 'price' => "Prix", + 'profile-title' => "Votre profile", + 'profile-delete' => "Supprimer compte", + 'profile-delete-title' => "Supprimer ce compte?", + 'profile-delete-text1' => "Cela supprimera le compte ainsi que tous les domaines, utilisateurs et alias associés à ce compte.", + 'profile-delete-warning' => "Cette opération est irrévocable", + 'profile-delete-text2' => "Comme vous ne pourrez plus rien récupérer après ce point, assurez-vous d'avoir migré toutes les données avant de poursuivre.", + 'profile-delete-support' => "Étant donné que nous nous attachons à toujours nous améliorer, nous aimerions vous demander 2 minutes de votre temps. " + . "Le meilleur moyen de nous améliorer est le feedback des utilisateurs, et nous voudrions vous demander" + . "quelques mots sur les raisons pour lesquelles vous avez quitté notre service. Veuillez envoyer vos commentaires au {email}.", + 'profile-delete-contact' => "Par ailleurs, n'hésitez pas à contacter le support de {app} pour toute question ou souci que vous pourriez avoir dans ce contexte.", + 'reset-2fa' => "Réinitialiser l'authentification à 2-Facteurs.", + 'reset-2fa-title' => "Réinitialisation de l'Authentification à 2-Facteurs", + 'title' => "Compte d'utilisateur", + 'search-pl' => "ID utilisateur,e-mail ou domamine", + 'skureq' => "{sku} demande {list}.", + 'subscription' => "Subscription", + 'subscriptions' => "Subscriptions", + 'subscriptions-none' => "Cet utilisateur n'a pas de subscriptions.", + 'users' => "Utilisateurs", + 'users-none' => "Il n'y a aucun utilisateur dans ce compte.", + ], + + 'wallet' => [ + 'add-credit' => "Ajouter un crédit", + 'auto-payment-cancel' => "Annuler l'auto-paiement", + 'auto-payment-change' => "Changer l'auto-paiement", + 'auto-payment-failed' => "La configuration des paiements automatiques a échoué. Redémarrer le processus pour activer les top-ups automatiques.", + 'auto-payment-hint' => "Cela fonctionne de la manière suivante: Chaque fois que votre compte est épuisé, nous débiterons votre méthode de paiement préférée d'un montant que vous aurez défini." + . " Vous pouvez annuler ou modifier l'option de paiement automatique à tout moment.", + 'auto-payment-setup' => "configurer l'auto-paiement", + 'auto-payment-disabled' => "L'auto-paiement configuré a été désactivé. Rechargez votre porte-monnaie ou augmentez le montant d'auto-paiement.", + 'auto-payment-info' => "L'auto-paiement est set pour recharger votre compte par {amount} lorsque le solde de votre compte devient inférieur à {balance}.", + 'auto-payment-inprogress' => "La configuration d'auto-paiement est toujours en cours.", + 'auto-payment-next' => "Ensuite, vous serez redirigé vers la page de paiement, où vous pourrez fournir les coordonnées de votre carte de crédit.", + 'auto-payment-disabled-next' => "L'auto-paiement est désactivé. Dès que vous aurez soumis de nouveaux paramètres, nous l'activerons et essaierons de recharger votre portefeuille.", + 'auto-payment-update' => "Mise à jour de l'auto-paiement.", + 'banktransfer-hint' => "Veuillez noter qu'un virement bancaire peut nécessiter plusieurs jours avant d'être effectué.", + 'currency-conv' => "Le principe est le suivant: Vous spécifiez le montant dont vous voulez recharger votre portefeuille en {wc}." + . " Nous convertirons ensuite ce montant en {pc}, et sur la page suivante, vous obtiendrez les coordonnées bancaires pour transférer le montant en {pc}.", + 'fill-up' => "Recharger par", + 'history' => "Histoire", + 'month' => "mois", + 'noperm' => "Seuls les propriétaires de compte peuvent accéder à un portefeuille.", + 'payment-amount-hint' => "Choisissez le montant dont vous voulez recharger votre portefeuille.", + 'payment-method' => "Mode de paiement: {method}", + 'payment-warning' => "Vous serez facturé pour {price}.", + 'pending-payments' => "Paiements en attente", + 'pending-payments-warning' => "Vous avez des paiements qui sont encore en cours. Voir l'onglet \"Paiements en attente\" ci-dessous.", + 'pending-payments-none' => "Il y a aucun paiement en attente pour ce compte.", + 'receipts' => "Reçus", + 'receipts-hint' => "Vous pouvez télécharger ici les reçus (au format PDF) pour les paiements de la période spécifiée. Sélectionnez la période et appuyez sur le bouton Télécharger.", + 'receipts-none' => "Il y a aucun reçu pour les paiements de ce compte. Veuillez noter que vous pouvez télécharger les reçus après la fin du mois.", + 'title' => "Solde du compte", + 'top-up' => "Rechargez votre portefeuille", + 'transactions' => "Transactions", + 'transactions-none' => "Il y a aucun transaction pour ce compte.", + 'when-below' => "lorsque le solde du compte est inférieur à", + ], +]; diff --git a/src/resources/lang/fr/validation.php b/src/resources/lang/fr/validation.php new file mode 100644 --- /dev/null +++ b/src/resources/lang/fr/validation.php @@ -0,0 +1,187 @@ + 'Le champ :attribute doit être accepté.', + 'active_url' => 'Le champ :attribute n\'est pas une URL valide.', + 'after' => 'Le champ :attribute doit être une date postérieure au :date.', + 'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale au :date.', + 'alpha' => 'Le champ :attribute doit contenir uniquement des lettres.', + 'alpha_dash' => 'Le champ :attribute doit contenir uniquement des lettres, des chiffres et des tirets.', + 'alpha_num' => 'Le champ :attribute doit contenir uniquement des chiffres et des lettres.', + 'array' => 'Le champ :attribute doit être un tableau.', + 'attached' => ':attribute est déjà attaché(e).', + 'before' => 'Le champ :attribute doit être une date antérieure au :date.', + 'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.', + 'between' => [ + 'array' => 'Le tableau :attribute doit contenir entre :min et :max éléments.', + 'file' => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.', + 'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.', + 'string' => 'Le texte :attribute doit contenir entre :min et :max caractères.', + ], + 'boolean' => 'Le champ :attribute doit être vrai ou faux.', + 'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.', + 'current_password' => 'Le mot de passe est incorrect.', + 'date' => 'Le champ :attribute n\'est pas une date valide.', + 'date_equals' => 'Le champ :attribute doit être une date égale à :date.', + 'date_format' => 'Le champ :attribute ne correspond pas au format :format.', + 'different' => 'Les champs :attribute et :other doivent être différents.', + 'digits' => 'Le champ :attribute doit contenir :digits chiffres.', + 'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.', + 'dimensions' => 'La taille de l\'image :attribute n\'est pas conforme.', + 'distinct' => 'Le champ :attribute a une valeur en double.', + 'email' => 'Le champ :attribute doit être une adresse email valide.', + 'ends_with' => 'Le champ :attribute doit se terminer par une des valeurs suivantes : :values', + 'exists' => 'Le champ :attribute sélectionné est invalide.', + 'file' => 'Le champ :attribute doit être un fichier.', + 'filled' => 'Le champ :attribute doit avoir une valeur.', + 'gt' => [ + 'array' => 'Le tableau :attribute doit contenir plus de :value éléments.', + 'file' => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.', + 'numeric' => 'La valeur de :attribute doit être supérieure à :value.', + 'string' => 'Le texte :attribute doit contenir plus de :value caractères.', + ], + 'gte' => [ + 'array' => 'Le tableau :attribute doit contenir au moins :value éléments.', + 'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.', + 'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.', + 'string' => 'Le texte :attribute doit contenir au moins :value caractères.', + ], + 'image' => 'Le champ :attribute doit être une image.', + 'in' => 'Le champ :attribute est invalide.', + 'in_array' => 'Le champ :attribute n\'existe pas dans :other.', + 'integer' => 'Le champ :attribute doit être un entier.', + 'ip' => 'Le champ :attribute doit être une adresse IP valide.', + 'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.', + 'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.', + 'json' => 'Le champ :attribute doit être un document JSON valide.', + 'lt' => [ + 'array' => 'Le tableau :attribute doit contenir moins de :value éléments.', + 'file' => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.', + 'numeric' => 'La valeur de :attribute doit être inférieure à :value.', + 'string' => 'Le texte :attribute doit contenir moins de :value caractères.', + ], + 'lte' => [ + 'array' => 'Le tableau :attribute doit contenir au plus :value éléments.', + 'file' => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.', + 'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.', + 'string' => 'Le texte :attribute doit contenir au plus :value caractères.', + ], + 'max' => [ + 'array' => 'Le tableau :attribute ne peut contenir plus de :max éléments.', + 'file' => 'La taille du fichier de :attribute ne peut pas dépasser :max kilo-octets.', + 'numeric' => 'La valeur de :attribute ne peut être supérieure à :max.', + 'string' => 'Le texte de :attribute ne peut contenir plus de :max caractères.', + ], + 'mimes' => 'Le champ :attribute doit être un fichier de type : :values.', + 'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.', + 'min' => [ + 'array' => 'Le tableau :attribute doit contenir au moins :min éléments.', + 'file' => 'La taille du fichier de :attribute doit être supérieure à :min kilo-octets.', + 'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.', + 'string' => 'Le texte :attribute doit contenir au moins :min caractères.', + ], + 'multiple_of' => 'La valeur de :attribute doit être un multiple de :value', + 'not_in' => 'Le champ :attribute sélectionné n\'est pas valide.', + 'not_regex' => 'Le format du champ :attribute n\'est pas valide.', + 'numeric' => 'Le champ :attribute doit contenir un nombre.', + 'password' => 'Le mot de passe est incorrect', + 'present' => 'Le champ :attribute doit être présent.', + 'prohibited' => 'Le champ :attribute est interdit.', + 'prohibited_if' => 'Le champ :attribute est interdit quand :other a la valeur :value.', + 'prohibited_unless' => 'Le champ :attribute est interdit à moins que :other est l\'une des valeurs :values.', + 'regex' => 'Le format du champ :attribute est invalide.', + 'relatable' => ':attribute n\'est sans doute pas associé(e) avec cette donnée.', + 'required' => 'Le champ :attribute est obligatoire.', + 'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.', + 'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.', + 'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.', + 'required_with_all' => 'Le champ :attribute est obligatoire quand :values sont présents.', + 'required_without' => 'Le champ :attribute est obligatoire quand :values n\'est pas présent.', + 'required_without_all' => 'Le champ :attribute est requis quand aucun de :values n\'est présent.', + 'same' => 'Les champs :attribute et :other doivent être identiques.', + 'size' => [ + 'array' => 'Le tableau :attribute doit contenir :size éléments.', + 'file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.', + 'numeric' => 'La valeur de :attribute doit être :size.', + 'string' => 'Le texte de :attribute doit contenir :size caractères.', + ], + 'starts_with' => 'Le champ :attribute doit commencer avec une des valeurs suivantes : :values', + 'string' => 'Le champ :attribute doit être une chaîne de caractères.', + 'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.', + 'unique' => 'La valeur du champ :attribute est déjà utilisée.', + 'uploaded' => 'Le fichier du champ :attribute n\'a pu être téléversé.', + 'url' => 'Le format de l\'URL de :attribute n\'est pas valide.', + 'uuid' => 'Le champ :attribute doit être un UUID valide', + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + 'attributes' => [ + 'address' => 'adresse', + 'age' => 'âge', + 'available' => 'disponible', + 'city' => 'ville', + 'content' => 'contenu', + 'country' => 'pays', + 'current_password' => 'mot de passe actuel', + 'date' => 'date', + 'day' => 'jour', + 'description' => 'description', + 'email' => 'adresse email', + 'excerpt' => 'extrait', + 'first_name' => 'prénom', + 'gender' => 'genre', + 'hour' => 'heure', + 'last_name' => 'nom', + 'minute' => 'minute', + 'mobile' => 'portable', + 'month' => 'mois', + 'name' => 'nom', + 'password' => 'mot de passe', + 'password_confirmation' => 'confirmation du mot de passe', + 'phone' => 'téléphone', + 'second' => 'seconde', + 'sex' => 'sexe', + 'size' => 'taille', + 'time' => 'heure', + 'title' => 'titre', + 'username' => 'nom d\'utilisateur', + 'year' => 'année', + ], + '2fareq' => "Le code du second facteur est requis.", + '2fainvalid' => "Le code du deuxième facteur n'est pas valideSecond factor code is invalid.", + 'emailinvalid' => "L'adresse e-mail spécifiée est invalide.", + 'domaininvalid' => "Le domaine spécifié n'est pas valide.", + 'domainnotavailable' => "Le domaine spécifié n'est pas disponible.", + 'logininvalid' => "Le login spécifié est invalide.", + 'loginexists' => "Le login spécifié n'est pas disponible.", + 'domainexists' => "Le domaine spécifié n'est pas disponible.", + 'noemailorphone' => "Le texte spécifié n'est pas un e-mail valide ni un numéro de téléphone.", + 'packageinvalid' => "Le paquet sélectionné est invalide.", + 'packagerequired' => "Le paquet est requis.", + 'usernotexists' => "Impossible de trouver l'utilisateur.", + 'voucherinvalid' => "Le code du coupon est invalide ou a expiré.", + 'noextemail' => "Cet utilisateur ne possède pas d'adresse e-mail externe.", + 'entryinvalid' => "L'attribut :attribute est invalide.", + 'entryexists' => "L'attribut :attribute n'est pas disponible.", + 'minamount' => "Le montant minimum pour un paiement unitaire est :amount.", + 'minamountdebt' => "Le montant indiqué ne couvre pas le solde du compte.", + 'notalocaluser' => "L'adresse e-mail indiquée n'existe pas.", + 'memberislist' => "Le destinataire ne peut pas être le même que l'adresse de la liste.", + 'listmembersrequired' => "Au moins un destinataire est requis.", + 'spf-entry-invalid' => "Le format de l'entrée est invalide. Un nom de domaine débutant par un point est attendu.", + 'invalid-config-parameter' => "Le paramètre de configuration demandé est inconnu.", + +]; diff --git a/src/resources/themes/default/lang/fr/faq.php b/src/resources/themes/default/lang/fr/faq.php new file mode 100644 --- /dev/null +++ b/src/resources/themes/default/lang/fr/faq.php @@ -0,0 +1,9 @@ + "Est-il possible de convertir un compte individuel en compte de groupe?", + 'storage' => "Combien d'espace de stockage est fourni avec mon compte?", + 'tos' => "quelles sont vos conditions de service?", + +]; diff --git a/src/resources/themes/default/lang/fr/menu.php b/src/resources/themes/default/lang/fr/menu.php new file mode 100644 --- /dev/null +++ b/src/resources/themes/default/lang/fr/menu.php @@ -0,0 +1,10 @@ + "Blog", + 'explore' => "Explorer", + 'support' => "Support", + 'tos' => "Conditions de Service", + +]; diff --git a/src/resources/themes/default/lang/fr/support.php b/src/resources/themes/default/lang/fr/support.php new file mode 100644 --- /dev/null +++ b/src/resources/themes/default/lang/fr/support.php @@ -0,0 +1,13 @@ + "Contacter Support", + 'text1' => "Notre équipe de support technique est là pour vous aider si vous rencontrez des difficultés." + . " Vous ne devriez pas avoir à parler à des machines ou à naviguer dans des menus vocaux," + . " mais plutôt à des êtres humains qui vous répondent personnellement.", + 'text2' => "Cette aide est déjà intégrée dans votre souscription, il n'y a donc aucun coût supplémentaire pour vous." + . " Si vous rencontrez des problèmes avec votre compte :site, ou si vous avez des questions" + . " sur notre produit avant de vous inscrire, veuillez nous contacter.", + +]; diff --git a/src/tests/Browser/LogonTest.php b/src/tests/Browser/LogonTest.php --- a/src/tests/Browser/LogonTest.php +++ b/src/tests/Browser/LogonTest.php @@ -56,9 +56,10 @@ }) // Switch English -> German ->whenAvailable('nav .dropdown-menu', function (Browser $browser) { - $browser->assertElementsCount('a', 2) + $browser->assertElementsCount('a', 3) ->assertSeeIn('a:nth-child(1)', 'EN - English') ->assertSeeIn('a:nth-child(2)', 'DE - German') + ->assertSeeIn('a:nth-child(3)', 'FR - French') ->click('a:nth-child(2)'); }) ->waitUntilMissing('nav .dropdown-menu') @@ -79,7 +80,8 @@ }) // Switch German -> English ->whenAvailable('nav .dropdown-menu', function (Browser $browser) { - $browser->click('a:nth-child(1)'); + $browser->assertSeeIn('a:nth-child(1)', 'Englisch') + ->click('a:nth-child(1)'); }) ->waitUntilMissing('nav .dropdown-menu') ->within(new Menu(), function ($browser) {