From 7c7a4486cd1dc93f63e7fc7b8387cecd9526ba1b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:28:22 -0400 Subject: [PATCH] ilot/freescout: new aport --- ilot/freescout/APKBUILD | 82 +++++++ ilot/freescout/freescout-manage.sh | 11 + ilot/freescout/freescout.nginx | 56 +++++ ilot/freescout/freescout.post-install | 48 ++++ ilot/freescout/freescout.post-upgrade | 1 + ilot/freescout/freescout.pre-install | 25 ++ .../rename-client-to-membre-fr-en.patch | 220 ++++++++++++++++++ 7 files changed, 443 insertions(+) create mode 100644 ilot/freescout/APKBUILD create mode 100644 ilot/freescout/freescout-manage.sh create mode 100644 ilot/freescout/freescout.nginx create mode 100755 ilot/freescout/freescout.post-install create mode 120000 ilot/freescout/freescout.post-upgrade create mode 100755 ilot/freescout/freescout.pre-install create mode 100644 ilot/freescout/rename-client-to-membre-fr-en.patch diff --git a/ilot/freescout/APKBUILD b/ilot/freescout/APKBUILD new file mode 100644 index 0000000..1fd520c --- /dev/null +++ b/ilot/freescout/APKBUILD @@ -0,0 +1,82 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +pkgname=freescout +pkgver=1.8.139 +pkgrel=0 +pkgdesc="Free self-hosted help desk & shared mailbox" +arch="noarch" +url="freescout.net" +license="AGPL-3.0" +_php=php83 +_php_mods="-fpm -mbstring -xml -imap -zip -gd -curl -intl -tokenizer -pdo_pgsql -openssl -session -iconv -fileinfo -dom -pcntl" +depends="$_php ${_php_mods//-/$_php-} nginx postgresql pwgen" +makedepends="composer pcre" +install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/freescout-helpdesk/freescout/archive/refs/tags/$pkgver.tar.gz + freescout.nginx + freescout-manage.sh + rename-client-to-membre-fr-en.patch + " +pkgusers="freescout" +pkggroups="freescout" + +build() { + composer install --ignore-platform-reqs +} + +package() { + local logdir="/var/log/$pkgname" + local datadir="/var/lib/$pkgname" + local wwwdir="/usr/share/webapps/$pkgname" + local confdir="/etc/$pkgname" + + # Make directories + install -dm 755 \ + "$pkgdir"/$wwwdir \ + "$pkgdir"/$confdir \ + "$pkgdir"/$logdir \ + "$pkgdir"/$datadir + + # Copy and ln operations + cp $builddir/* -R "$pkgdir"/$wwwdir/. + for i in storage/app storage/framework bootstrap/cache \ + public/css/builds public/js/builds public/modules Modules; do + + if [ -d "$pkgdir"$wwwdir/$i ]; then + if [ ! -d "$pkgdir"/$datadir/${i%/*} ]; then + mkdir -p "$pkgdir"/$datadir/${i%/*} + fi + mv "$pkgdir"$wwwdir/$i "$pkgdir"/$datadir/$i + else + mkdir -p "$pkgdir"/$datadir/$i + fi + ln -s $datadir/$i "$pkgdir"/$wwwdir/$i + done + ln -s /etc/freescout/freescout.conf "$pkgdir"/usr/share/webapps/freescout/.env + ln -s $wwwdir/storage/app/public "$pkgdir"/$wwwdir/public/storage + + # log dir + rm -R "$pkgdir"/$wwwdir/storage/logs + ln -s "$logdir" "$pkgdir"/$wwwdir/storage/logs + + # Permission settings + chown -R freescout:www-data "$pkgdir"/$datadir "$pkgdir"/$logdir + + # config files + install -Dm644 "$srcdir"/freescout.nginx \ + "$pkgdir"/etc/nginx/http.d/freescout.conf + install -Dm640 "$builddir"/.env.example \ + "$pkgdir"/etc/freescout/freescout.conf + sed -i 's|APP_KEY.*|APP_KEY=@@SECRET_KEY@@|' "$pkgdir"/etc/freescout/freescout.conf + chown root:www-data "$pkgdir"/etc/freescout/freescout.conf + + # Install wrapper script to /usr/bin. + install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage +} +sha512sums=" +11d81fa670bd67a7db9f5bff3a067a1d1cf3c812a34c805a3fc83edc978ded3accc8334581eca1e73cf0ad95f8e289278add57de096528728e2989135b3057a3 freescout-1.8.139.tar.gz +e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx +7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh +3416da98d71aea5a7093913ea34e783e21ff05dca90bdc5ff3d00c548db5889f6d0ec98441cd65ab9f590be5cd59fdd0d7f1c98b5deef7bb3adbc8db435ec9bf rename-client-to-membre-fr-en.patch +" diff --git a/ilot/freescout/freescout-manage.sh b/ilot/freescout/freescout-manage.sh new file mode 100644 index 0000000..9367807 --- /dev/null +++ b/ilot/freescout/freescout-manage.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +BUNDLE_DIR='/usr/share/webapps/freescout' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'freescout' ]; then + exec su freescout -c '"$0" "$@"' -- php artisan "$@" +else + exec php artisan "$@" +fi diff --git a/ilot/freescout/freescout.nginx b/ilot/freescout/freescout.nginx new file mode 100644 index 0000000..15f2161 --- /dev/null +++ b/ilot/freescout/freescout.nginx @@ -0,0 +1,56 @@ +server { + listen 80; + listen [::]:80; + + server_name example.com www.example.com; + + root /usr/share/webapps/freescout/public; + + index index.php index.html index.htm; + + error_log /var/www/html/storage/logs/web-server.log; + + # Max. attachment size. + # It must be also set in PHP.ini via "upload_max_filesize" and "post_max_size" directives. + client_max_body_size 20M; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass unix:/run/php/php8.0-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } + # Uncomment this location if you want to improve attachments downloading speed. + # Also make sure to set APP_DOWNLOAD_ATTACHMENTS_VIA=nginx in the .env file. + #location ^~ /storage/app/attachment/ { + # internal; + # alias /var/www/html/storage/app/attachment/; + #} + location ~* ^/storage/attachment/ { + expires 1M; + access_log off; + try_files $uri $uri/ /index.php?$query_string; + } + location ~* ^/(?:css|js)/.*\.(?:css|js)$ { + expires 2d; + access_log off; + add_header Cache-Control "public, must-revalidate"; + } + # The list should be in sync with /storage/app/public/uploads/.htaccess and /config/app.php + location ~* ^/storage/.*\.((?!(jpg|jpeg|jfif|pjpeg|pjp|apng|bmp|gif|ico|cur|png|tif|tiff|webp|pdf|txt|diff|patch|json|mp3|wav|ogg|wma)).)*$ { + add_header Content-disposition "attachment; filename=$2"; + default_type application/octet-stream; + } + location ~* ^/(?:css|fonts|img|installer|js|modules|[^\\\]+\..*)$ { + expires 1M; + access_log off; + add_header Cache-Control "public"; + } + location ~ /\. { + deny all; + } +} diff --git a/ilot/freescout/freescout.post-install b/ilot/freescout/freescout.post-install new file mode 100755 index 0000000..467962b --- /dev/null +++ b/ilot/freescout/freescout.post-install @@ -0,0 +1,48 @@ +#!/bin/sh +set -eu + +group=www-data +config_file='/etc/freescout/freescout.conf' + +if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then + echo "* Generating random secret in $config_file" >&2 + + secret_key="$(freescout-manage key:generate --show)" + sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" +fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Freescout upgrade run: + * + * freescout-manage freescout:after-app-update + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/freescout/freescout.conf + * + * 2. Make sure cgi.fix_pathinfo=0 is set in /etc/php8x/php.ini is set + * + * 3. Create database for Freescout: + * + * psql -c "CREATE ROLE freescout PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE freescout OWNER freescout ENCODING 'UTF-8';" + * + * 4. Clear application cache and apply .env file changes: + * + * freescout-manage freescout:clear-cache + * + * 5. Create tables: + * + * freescout-manage migrate + * + * 6. Create admin user + * + * freescout-manage freescout:create-user + * + EOF +fi + diff --git a/ilot/freescout/freescout.post-upgrade b/ilot/freescout/freescout.post-upgrade new file mode 120000 index 0000000..d53f932 --- /dev/null +++ b/ilot/freescout/freescout.post-upgrade @@ -0,0 +1 @@ +freescout.post-install \ No newline at end of file diff --git a/ilot/freescout/freescout.pre-install b/ilot/freescout/freescout.pre-install new file mode 100755 index 0000000..6332408 --- /dev/null +++ b/ilot/freescout/freescout.pre-install @@ -0,0 +1,25 @@ +#!/bin/sh + +freescout_dir='/var/lib/freescout' + +if ! getent group freescout 1>/dev/null; then + echo '* Creating group freescout' 1>&2 + + addgroup -S freescout +fi + +if ! id freescout 2>/dev/null 1>&2; then + echo '* Creating user freescout' 1>&2 + + adduser -DHS -G freescout -h "$freescout_dir" -s /bin/sh \ + -g "added by apk for freescout" freescout + passwd -u freescout 1>/dev/null # unlock +fi + +if ! id -Gn freescout | grep -Fq www-data; then + echo '* Adding user freescout to group www-data' 1>&2 + + addgroup freescout www-data +fi + +exit 0 diff --git a/ilot/freescout/rename-client-to-membre-fr-en.patch b/ilot/freescout/rename-client-to-membre-fr-en.patch new file mode 100644 index 0000000..097e503 --- /dev/null +++ b/ilot/freescout/rename-client-to-membre-fr-en.patch @@ -0,0 +1,220 @@ +diff --git a/resources/lang/en.json b/resources/lang/en.json +new file mode 100644 +index 00000000..82d26052 +--- /dev/null ++++ b/resources/lang/en.json +@@ -0,0 +1,32 @@ ++{ ++ ":person changed the customer to :customer": ":person changed the member to :customer", ++ ":person changed the customer to :customer in conversation #:conversation_number": ":person changed the member to :customer in conversation #:conversation_number", ++ "Auto reply to customer": "Auto reply to member", ++ "Change Customer": "Change Member", ++ "Change the customer to :customer_email?": "Change the member to :customer_email?", ++ "Create a new customer": "Create a new member", ++ "Customer": "Member", ++ "Customer Name": "Member Name", ++ "Customer Profile": "Member Profile", ++ "Customer changed": "Member changed", ++ "Customer saved successfully.": "Member saved successfully", ++ "Customer viewed :when": "Member viewed :when", ++ "Customers": "Members", ++ "Customers email this address for help (e.g. support@domain.com)": "Members email this address for help (e.g. support@domain.com)", ++ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end has been moved from another member: :a_begin:customer:a_end.", ++ "Email to customer": "Email to member", ++ "Emails to Customers": "Emails to Members", ++ "Error sending email to customer": "Error sending email to member", ++ "Message not sent to customer": "Message not sent to member", ++ "Name that will appear in the From<\/strong> field when a customer views your email.": "Name that will appear in the From<\/strong> field when a member views your email.", ++ "No customers found": "No members found", ++ "No customers found. Would you like to create one?": "No members found. Would you like to create one?", ++ "Notify :person when a customer replies…": "Notify :person when a member replies…", ++ "Notify me when a customer replies…": "Notify me when a member replies…", ++ "Search for a customer by name or email": "Search for a member by name or email", ++ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "Sending emails need to be configured for the mailbox in order to send emails to members and support agents", ++ "This number is not visible to customers. It is only used to track conversations within :app_name": "This number is not visible to members. It is only used to track conversations within :app_name", ++ "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "This reply will go to the member. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.", ++ "This text will be added to the beginning of each email reply sent to a customer.": "This text will be added to the beginning of each email reply sent to a member.", ++ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "When a member emails this mailbox, application can send an auto reply to the member immediately.Only one auto reply is sent per new conversation." ++} +\ No newline at end of file +diff --git a/resources/lang/fr.json.orig b/resources/lang/fr.json +index ff8d9d4..98d158f 100644 +--- a/resources/lang/fr.json.orig ++++ b/resources/lang/fr.json +@@ -26,8 +26,8 @@ + ":person added a note to conversation #:conversation_number": ":person a ajouté une note à la conversation #:conversation_number", + ":person assigned :assignee conversation #:conversation_number": ":person a assigné :assignee à la conversation #:conversation_number", + ":person assigned to :assignee": ":person a assigné :assignee", +- ":person changed the customer to :customer": ":person a changé le client en :customer", +- ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le client en :customer dans la conversation #:conversation_number", ++ ":person changed the customer to :customer": ":person a changé le membre en :customer", ++ ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le membre en :customer dans la conversation #:conversation_number", + ":person created a draft": ":person a créé un brouillon", + ":person deleted": ":person supprimée", + ":person edited :creator's draft": ":person a modifié brouillon de :creator", +@@ -112,7 +112,7 @@ + "Auto Reply": "Réponse Automatique", + "Auto Reply status saved": "Statut de réponse automatique enregistré", + "Auto replies don't include your mailbox signature, so be sure to add your contact information if necessary.": "Les réponses automatiques n'incluent pas la signature de votre boîte aux lettres, assurez-vous d'ajouter vos coordonnées si nécessaire.", +- "Auto reply to customer": "Réponse automatique au client", ++ "Auto reply to customer": "Réponse automatique au membre", + "Back": "Retour", + "Back to folder": "Retour au dossier", + "Background Jobs": "Emplois d'arrière-plan", +@@ -123,10 +123,10 @@ + "Cancel": "Annuler", + "Cc": "Cc", + "Change": "Modifier", +- "Change Customer": "Changer de client", ++ "Change Customer": "Changer de membre", + "Change address in mailbox settings": "Modifier l'adresse dans les paramètres de la boîte aux lettres", + "Change default redirect": "Modifier la redirection par défaut", +- "Change the customer to :customer_email?": "Changer le client en :customer_email ?", ++ "Change the customer to :customer_email?": "Changer le membre en :customer_email ?", + "Change your password": "Changer votre mot de passe", + "Chat": "Tchat", + "Check Connection": "Vérifier la connexion", +@@ -182,7 +182,7 @@ + "Create a New User": "Créer un nouvel utilisateur", + "Create a Password": "Créer un mot de passe", + "Create a mailbox": "Créer une boîte de réception", +- "Create a new customer": "Créer un nouveau client", ++ "Create a new customer": "Créer un nouveau membre", + "Create symlink manually": "Créer un lien symbolique manuellement", + "Created At": "Créé à", + "Created by :person": "Créé par :person", +@@ -190,14 +190,14 @@ + "Current Password": "Mot de passe actuel", + "Custom From Name": "Nom de l'expéditeur personnalisé", + "Custom Name": "Nom personnalisé", +- "Customer": "Client", +- "Customer Name": "Nom du client", +- "Customer Profile": "Profil client", +- "Customer changed": "Client changé", +- "Customer saved successfully.": "Client enregistré avec succès.", +- "Customer viewed :when": "Client vu :when", +- "Customers": "Clients", +- "Customers email this address for help (e.g. support@domain.com)": "Les clients utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", ++ "Customer": "Membre", ++ "Customer Name": "Nom du membre", ++ "Customer Profile": "Profil membre", ++ "Customer changed": "Membre changé", ++ "Customer saved successfully.": "Membre enregistré avec succès.", ++ "Customer viewed :when": "Membre vu :when", ++ "Customers": "Membres", ++ "Customers email this address for help (e.g. support@domain.com)": "Les membres utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", + "Daily": "Quotidien", + "Dashboard": "Tableau de bord", + "Date": "Date", +@@ -247,15 +247,15 @@ + "Edit User": "Modifier l'utilisateur", + "Edited by :whom :when": "Édité par :whom :when", + "Email": "Email", +- "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre client : :a_begin:customer:a_end.", ++ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre membre : :a_begin:customer:a_end.", + "Email Address": "Adresse e-mail", + "Email Alerts For Administrators": "Envoyez des alertes par e-mail aux administrateurs", + "Email Header": "En-tête de l'e-mail", + "Email Signature": "Signature e-mail", + "Email Template": "Modèle d'e-mail", + "Email passed for delivery. If you don't receive a test email, check your mail server logs.": "E-mail transmis pour livraison. Si vous ne recevez pas d'e-mail de test, consultez les journaux de votre serveur de messagerie.", +- "Email to customer": "Courriel au client", +- "Emails to Customers": "Emails aux clients", ++ "Email to customer": "Courriel au membre", ++ "Emails to Customers": "Emails aux membres", + "Empty Trash": "Vider la corbeille", + "Empty license key": "Clé de licence vide", + "Enable Auto Reply": "Activer la réponse automatique", +@@ -276,7 +276,7 @@ + "Error occurred. Please try again later.": "Erreur est survenue. Veuillez réessayer plus tard.", + "Error occurred. Please try again or try another :%a_start%update method:%a_end%": "Erreur est survenue. Veuillez réessayer ou en essayer une autre :%a_start% méthode de mise à jour:%a_end%", + "Error sending alert": "Erreur lors de l'envoi de l'alerte", +- "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au client", ++ "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au membre", + "Error sending email to the user who replied to notification from wrong email": "Erreur lors de l'envoi d'un e-mail à l'utilisateur qui a répondu à la notification d'un mauvais e-mail", + "Error sending email to user": "Erreur lors de l'envoi d'un e-mail à l'utilisateur", + "Error sending invitation email to user": "Erreur lors de l'envoi d'un e-mail d'invitation à l'utilisateur", +@@ -419,7 +419,7 @@ + "Message bounced (:link)": "Message renvoyé (:link)", + "Message cannot be empty": "Le message ne peut pas être vide", + "Message has been already sent. Please discard this draft.": "Le message a déjà été envoyé. Veuillez effacer ce brouillon.", +- "Message not sent to customer": "Message non envoyé au client", ++ "Message not sent to customer": "Message non envoyé au membre", + "Method": "Méthode", + "Migrate DB": "Migrer la base de données", + "Mine": "Mes conversations", +@@ -439,7 +439,7 @@ + "My Apps": "Mes Applications", + "My open conversations": "Mes conversations ouvertes", + "Name": "Nom", +- "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un client consulte votre e-mail.", ++ "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un membre consulte votre e-mail.", + "New Conversation": "Nouvelle conversation", + "New Mailbox": "Nouvelle boîte de réception", + "New Password": "Nouveau mot de passe", +@@ -451,8 +451,8 @@ + "Next active conversation": "Conversation active suivante", + "No": "Non", + "No activations left for this license key": "Il ne reste aucune activation pour cette clé de licence", +- "No customers found": "Aucun client trouvé", +- "No customers found. Would you like to create one?": "Aucun client trouvé. Souhaitez-vous en créer un?", ++ "No customers found": "Aucun membre trouvé", ++ "No customers found. Would you like to create one?": "Aucun membre trouvé. Souhaitez-vous en créer un?", + "No invite was found. Please contact your administrator to have a new invite email sent.": "Aucune invitation trouvée. Veuillez contacter votre administrateur pour qu'il envoie une nouvelle invitation par email.", + "Non-writable files found": "Fichiers non-inscriptibles trouvés", + "None": "Aucun", +@@ -471,10 +471,10 @@ + "Notifications": "Notifications", + "Notifications saved successfully": "Notifications enregistrées", + "Notifications will start showing up here soon": "Les notifications commenceront bientôt à apparaître ici", +- "Notify :person when a customer replies…": "Avertir :person lorsqu'un client répond…", ++ "Notify :person when a customer replies…": "Avertir :person lorsqu'un membre répond…", + "Notify :person when another :app_name user replies or adds a note…": "Notifier :person quand un autre utilisateur :app_name répond ou ajoute une note…", + "Notify :person when…": "Avertir :person lorsque…", +- "Notify me when a customer replies…": "M'avertir lorsqu'un client répond…", ++ "Notify me when a customer replies…": "M'avertir lorsqu'un membre répond…", + "Notify me when another :app_name user replies or adds a note…": "M'avertir lorsqu'un autre utilisateur :app_name répond ou ajoute une note…", + "Notify me when…": "Prévenez-moi quand…", + "Number": "Numéro", +@@ -587,7 +587,7 @@ + "Search": "Recherche", + "Search Conversation by Number": "Rechercher une conversation par identifiant", + "Search Users": "Rechercher des utilisateurs", +- "Search for a customer by name or email": "Rechercher un client par nom ou par e-mail", ++ "Search for a customer by name or email": "Rechercher un membre par nom ou par e-mail", + "See logs": "Voir les journaux", + "Select Mailbox": "Sélectionnez une boîte aux lettres", + "Selected Users have access to this mailbox:": "Les utilisateurs sélectionnés ont accès à cette boîte aux lettres:", +@@ -613,7 +613,7 @@ + "Sending": "Envoi en cours", + "Sending Emails": "Sending Emails", + "Sending can not be undone": "L'envoie ne peut être annulé", +- "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux clients et aux agents de support", ++ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux membre et aux agents de support", + "Sendmail": "Exécutable Sendmail", + "Separate each email with a comma.": "Séparez chaque e-mail par une virgule", + "Server": "Serveur", +@@ -670,11 +670,11 @@ + "This is a test mail sent by :app_name. It means that outgoing email settings of your :mailbox mailbox are fine.": "Il s'agit d'un mail de test envoyé par :app_name. Cela signifie que les paramètres de courrier électronique sortant de votre boîte aux lettres :mailbox sont corrects.", + "This is a test system mail sent by :app_name. It means that mail settings are fine.": "Il s'agit d'un e-mail du système de test envoyé par :app_name. Cela signifie que les paramètres de messagerie sont corrects.", + "This may take several minutes": "Cela peut prendre plusieurs minutes", +- "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les clients. Il est uniquement utilisé pour suivre les conversations dans :app_name", ++ "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les membres. Il est uniquement utilisé pour suivre les conversations dans :app_name", + "This password is incorrect.": "Ce mot de passe est incorrect.", +- "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au client. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", ++ "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au membre. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", + "This setting gives you control over what page loads after you perform an action (send a reply, add a note, change conversation status or assignee).": "Ce paramètre vous permet de contrôler la page qui se charge après avoir effectué une action (envoyer une réponse, ajouter une note, etc.).", +- "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un client.", ++ "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un membre.", + "Thread is not in a draft state": "Le fil n'est pas à l'état de brouillon", + "Thread not found": "Fil non trouvé", + "Time Format": "Format de l'heure", +@@ -751,7 +751,7 @@ + "Welcome to :company_name!": "Bienvenue chez :company_name !", + "Welcome to :company_name, :first_name!": "Bienvenue chez :company_name, :first_name!", + "Welcome to the team!": "Bienvenue dans l'équipe !", +- "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un client envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au client. Une seule réponse automatique est envoyée par nouvelle conversation.", ++ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un membre envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au membre. Une seule réponse automatique est envoyée par nouvelle conversation.", + "Which mailboxes will user use?": "Quelles boîtes aux lettres l'utilisateur utilisera-t-il?", + "Who Else Will Use This Mailbox": "Qui d'autre utilisera cette boîte aux lettres", + "Work": "Professionnel",