Fix FLEXIAPI-326 Rework email templates and translations

This commit is contained in:
Jonathan Bartet 2025-06-13 09:38:58 +02:00 committed by Timothée Jaussoin
parent e50aeefbfa
commit a1f73095fd
23 changed files with 100 additions and 65 deletions

View file

@ -23,7 +23,10 @@ class ExpiringSpace extends Mailable
public function envelope(): Envelope
{
return new Envelope(
subject: $this->space->name . ': '. __('Space is expiring in :days days', ['days' => $this->space->daysLeft]),
subject: __('Your space :space is expiring in :count days', [
'space' => $this->space->name,
'count' => $this->space->daysLeft,
]),
);
}

View file

@ -40,7 +40,7 @@ class NewsletterRegistration extends Mailable
public function envelope(): Envelope
{
return new Envelope(
subject: $this->account->space->name . ': '. __('Newsletter registration confirmed'),
subject: $this->account->space->name . ': '. __('New newsletter subscription'),
);
}

View file

@ -40,7 +40,7 @@ class Provisioning extends Mailable
public function envelope(): Envelope
{
return new Envelope(
subject: $this->account->space->name . ': '. __('Provisioning of your device'),
subject: __('Welcome to :space: Start using your account today', ['space' => $this->account->space->name,]),
);
}

View file

@ -40,7 +40,7 @@ class RecoverByCode extends Mailable
public function envelope(): Envelope
{
return new Envelope(
subject: $this->account->space->name . ': '. __('Account recovery'),
subject: $this->account->space->name . ': '. __('Your account recovery code'),
);
}

View file

@ -40,7 +40,7 @@ class RegisterValidation extends Mailable
public function envelope(): Envelope
{
return new Envelope(
subject: $this->account->space->name . ': '. __('Account registered'),
subject: $this->account->space->name . ': '. __('Confirm your registration'),
);
}

View file

@ -1,11 +1,12 @@
{
"A verification code was sent by email to :email.": "Un code de vérification a été envoyé par email à :email",
"A verification code was sent by SMS to :phone.": "Un code de vérification a été envoyé par SMS au :phone",
"About": "À Propos",
"Account creation": "Création de compte",
"Account recovered recently, try again later": "Tentative de récupération de compte récente, retentez ultérieurement",
"Account Recovery Request":"Demande de récupération de compte",
"Account recovery": "Récupération de compte",
"Account registered": "Compte créé",
"Account settings": "Paramètres de compte",
"Actions": "Actions",
"Activate All": "Tout activer",
@ -30,6 +31,7 @@
"App Configuration": "Configuration de l'App",
"App settings": "Paramètres d'application",
"Assistant": "Assistant",
"Best regards,":"Cordialement,",
"Blocked": "Bloqué",
"Broadcast": "Broadcast",
"By email": "Inscription par email",
@ -43,14 +45,17 @@
"Change your phone number": "Changer votre numéro de téléphone",
"Check the README.md documentation": "Voir la documentation dans README.md",
"Clear to never expire": "Laisser vide pour ne jamais expirer",
"Configure your Linphone application": "Configurer votre application Linphone",
"Click the button below to choose a new password:": "Cliquez sur le bouton ci-dessous pour définir un nouveau mot de passe :",
"Code Verification" : "Vérification du code",
"Code": "Code",
"Configuration": "Configuration",
"Configure your Linphone application": "Configurer votre application Linphone",
"Configure": "Configurer",
"Confirm email": "Confirmer l'email",
"Confirm password": "Confirmer le mot de passe",
"Confirm your registration": "Confirmez votre inscription",
"Confirmed registration text": "Texte de confirmation d'inscription",
"Connect to your account":"Connexion à votre compte",
"Connection": "Connexion",
"Contacts List": "Liste de Contacts",
"Contacts Lists": "Listes de Contacts",
@ -71,7 +76,8 @@
"Dictionary": "Dictionnaire",
"Display name": "Nom d'affichage",
"Domain": "Domaine",
"Download the app": "Télécharger l'application",
"Download Linphone" : "Télécharger Linphone",
"Dont have the app yet?": "Vous navez pas encore lapplication ?",
"Edit": "Éditer",
"Email Server": "Serveur Mail",
"Email": "Email",
@ -90,12 +96,14 @@
"Fill the related columns if you want to add an external account as well": "Remplissez également les colonnes suivantes si vous souhaitez ajouter un compte externe",
"Fill to change": "Remplir pour changer",
"From": "Depuis",
"Hello":"Bonjour",
"Host": "Hôte",
"I accept the Privacy Policy": "J'accepte la Politique de Confidentialité",
"I accept the Terms and Conditions": "J'accepte les Conditions Générales",
"I would like to subscribe to the newsletter": "Je voudrais m'inscrire à la newsletter",
"I'm not a robot": "Je ne suis pas un robot",
"Identifier": "Identifiant",
"If you have any questions or need assistance, feel free to contact our support team.":"Si vous avez des questions ou besoin dassistance, notre équipe reste à votre disposition",
"Import": "Importer",
"In :days days": "Dans :days jours",
"In ini format, will complete the other settings": "Au format ini, complètera les autres paramètres",
@ -109,6 +117,7 @@
"Key": "Clef",
"Last used": "Dernière utilisation",
"Leave empty to create a root Space.": "Laisser vide si vous souhaitez créer un Espace à la racine",
"Login to my account":"Connexion à mon compte",
"Login using a QRCode": "S'authentifier avec un QRCode",
"Login": "Authentification",
"Manage": "Gérer",
@ -119,12 +128,13 @@
"My Account": "Mon Compte",
"My Space": "Mon Espace",
"Name": "Nom",
"Need help?" : "Besoin daide ?",
"Never expire": "N'expire jamais",
"Never": "Jamais",
"New Admin": "Nouvel Admin",
"New newsletter subscription": "Nouvelle inscription à votre newsletter",
"New Space": "Nouvel Espace",
"New user": "Nouvel utilisateur",
"Newsletter registration confirmed": "Confirmation de l'inscription à la newsletter",
"Newsletter registration email address": "Addresse email d'inscription à la liste de diffusion",
"Next": "Suivant",
"No account yet?": "Pas encore de compte ?",
@ -145,7 +155,7 @@
"Provisioning of your device": "Déploiement sur votre appareil",
"Provisioning tokens": "Jetons de déploiement",
"Provisioning": "Déploiement",
"Provisioning wizard URL": "URL de l'assistant de déploiement",
"Proxy/registrar address":"Adresse Proxy/registrar",
"Public registration": "Inscription publiques",
"QR Code scanning": "Scan de QR Code",
"Realm": "Royaume",
@ -159,6 +169,7 @@
"Renew": "Renouveller",
"Requests": "Requêtes",
"Resend": "Renvoyer",
"Reset my password":"Réinitialiser mon mot de passe",
"Reset password emails": "Email de réinitialisation de mot de passe",
"Reset password": "Réinitialiser le mot de passe",
"Reset your password": "Réinitialiser votre mot de passe",
@ -175,15 +186,16 @@
"Send": "Envoyer",
"Settings": "Paramètres",
"Show usernames only": "Afficher uniquement les noms d'utilisateur",
"SIP address":"Adresse SIP",
"Sip Adress": "Adresse SIP",
"SIP Domain": "Domaine SIP",
"Space is expiring in :days days": "Votre Espace expire dans %d jours",
"Space": "Espace",
"Spaces": "Espaces",
"Statistics": "Statistiques",
"Subdomain": "Sous-domaine",
"Super Admin": "Super Admin",
"Super Space": "Super Espace",
"Thank you for registering on :space.":"Merci de vous être inscrit sur :space.",
"Thanks for the validation": "Nous vous remercions pour la validation",
"The :attribute should not be a phone number": "Le champ :attribute ne peut pas être un numéro de téléphone",
"The account doesn't exists": "Le compte n'existe pas",
@ -192,10 +204,17 @@
"The contact doesn't exists": "Le contact n'existe pas",
"The file MUST be in CSV following this template": "Le fichier doit être au format CSV et respecter le modèle suivant",
"The first line contains the labels": "La premières ligne contient les étiquettes",
"The following email address wants to register to the mailing list:":"Ladresse e-mail suivante souhaite sinscrire à la liste de diffusion :",
"The link can only be visited once": "Le lien ne peut être utilisé qu'une fois",
"Third-party SIP account": "Compte SIP tiers",
"This code is valid for :minutes minutes.": "Ce code est valable pendant :minutes minutes.",
"This link is not available anymore.": "Ce lien n'est plus disponible.",
"This link will be available for :hours hours.": "Ce lien restera disponible pour :hours heures.",
"This link will expire in :hour hours.":"Ce lien expirera dans :hour heures.",
"To complete your registration, please enter the verification code below in the registration form:":"Pour finaliser votre inscription, veuillez saisir le code de vérification ci-dessous dans le formulaire d'inscription :",
"To ensure the continuity of your services (SIP calls, user accounts, configurations, etc.), we recommend renewing or updating your subscription before the expiration date.":"Afin dassurer la continuité de vos services (appels SIP, comptes utilisateurs, configurations, etc.), nous vous invitons à renouveler ou mettre à jour votre abonnement avant cette date.",
"To proceed, please enter the verification code below:":"Veuillez saisir le code de vérification ci-dessous pour poursuivre :",
"To start using your account, click the button below:":"Pour commencer à utiliser votre compte, cliquez sur le bouton ci-dessous :",
"To": "À",
"Transport": "Transport",
"Types": "Types",
@ -212,16 +231,28 @@
"Value": "Valeur",
"Verify": "Vérifier",
"Via": "Via",
"Visit our user guide" : "Consulter notre guide utilisateur",
"We are pleased to inform you that your account has been successfully created.":"Nous avons le plaisir de vous informer que votre compte a été créé avec succès.",
"We inform you that this space will expire on :date, in accordance with the expiration date defined in your subscription.":"Nous vous informons que l'espace expira le :date, conformément à la date dexpiration définie dans votre abonnement.",
"We received a request to recover your account on :space": "Nous avons reçu une demande de récupération de votre compte sur :space",
"We received a request to reset your password for your account on :space.":"Nous avons reçu une demande de réinitialisation de mot de passe pour votre compte sur :space",
"We will send you a verification code to recover your account.": "Nous vous enverrons un code de vérification pour récupérer votre compte.",
"Week": "Semaine",
"Welcome on :app_name": "Bienvenue sur :app_name",
"Welcome to :space: Start using your account today": "Bienvenue sur :space : commencez à utiliser votre compte dès maintenant",
"Welcome to :space":"Bienvenue sur :space",
"Year": "Année",
"You already have an account?": "Vous avez déjà un compte ?",
"You are going to permanently delete the following element. Please confirm your action.": "Vous allez supprimer l'élément suivant. Veuillez confirmer votre action.",
"You are going to permanently delete your account. Please enter your complete SIP address to confirm.": "Vous allez détruire défitivement votre compte. Veuillez entrer votre addresse SIP complète pour confirmer.",
"You are one of the administrators of the :space space configured on our service.":"Vous êtes lun des administrateurs de lespace :space configuré sur notre service.",
"You can also connect your account to the mobile app by scanning the QR code with the app":"Vous pouvez également connecter votre compte à lapplication mobile en scannant le QR code avec lapplication.",
"You can now configure this account on any SIP-compatible application using the following parameters:":"Vous pouvez désormais configurer ce compte sur toute application compatible SIP en utilisant les paramètres suivants :",
"You can now continue your registration process in the application": "Vous pouvez maintenant continuer le processus d'inscription dans l'application",
"You didn't receive the code?": "Vous n'avez pas reçu le code ?",
"Your account recovery code":"Votre code de récupération de compte",
"Your password was updated properly.": "Votre mot de passe a été mis à jour.",
"Your password" : "Votre mot de passe",
"Your space :space is expiring in :count days": "Votre espace :space expire dans :count jours",
"Your space has expired. Access to your interface is now disabled, and your users can no longer benefit from the service. To reactivate your space, please contact your account manager.": "Votre espace est arrivé à expiration. Laccès à votre interface est désormais désactivé, et vos utilisateurs ne peuvent plus bénéficier du service. Pour réactiver votre espace, veuillez contacter votre responsable de compte."
}

View file

@ -21,7 +21,7 @@
<div>
<input type="text" readonly value="{{ $account->apiKey->key }}">
<label>Key</label>
<small>Can only be used from the following ip: {{ $account->apiKey->ip }} | {{ __('Requests ')}} {{ $account->apiKey->requests }}</small>
<small>Can only be used from the following ip: {{ $account->apiKey->ip }} | {{ __('Requests ') }} {{ $account->apiKey->requests }}</small>
</div>
</form>
@endif

View file

@ -8,7 +8,7 @@
<p>{{ __('Your password was updated properly.') }}</p>
<p>
<a class="btn" href="{{ route('account.login')}}">{{ __('Authenticate') }}</a>
<a class="btn" href="{{ route('account.login') }}">{{ __('Authenticate') }}</a>
</p>
</section>

View file

@ -53,7 +53,7 @@
@endif
<div class="large">
<input class="btn oppose" type="submit" value="{{ __('Send')}}">
<input class="btn oppose" type="submit" value="{{ __('Send') }}">
</div>
</form>
</div>

View file

@ -4,7 +4,7 @@
<header>
<h1><i class="ph ph-users"></i> {{ __('Users') }}</h1>
@if ($space)
<p>{{ $accounts->count()}} / @if ($space->max_accounts > 0){{ $space->max_accounts }} @else <i class="ph ph-infinity"></i>@endif</p>
<p>{{ $accounts->count() }} / @if ($space->max_accounts > 0){{ $space->max_accounts }} @else <i class="ph ph-infinity"></i>@endif</p>
@endif
<a class="btn secondary oppose" href="{{ route('admin.account.import.create') }}">
<i class="ph ph-upload-simple"></i>

View file

@ -36,7 +36,7 @@
</td>
<td>
<code>{{ $api_key->key }}</code><br />
<small>{{ __('Activity expiration delay') }}: {{ $api_key->expires_after_last_used_minutes ? $api_key->expires_after_last_used_minutes . ' min' : __('Never')}} | {{ __('Last used') }}: {{ $api_key->last_used_at ?? __('Never') }}</small>
<small>{{ __('Activity expiration delay') }}: {{ $api_key->expires_after_last_used_minutes ? $api_key->expires_after_last_used_minutes . ' min' : __('Never') }} | {{ __('Last used') }}: {{ $api_key->last_used_at ?? __('Never') }}</small>
</td>
<td>{{ $api_key->created_at }}
<a class="btn secondary small oppose" href="{{ route('admin.api_keys.delete', $api_key->key) }}"><i class="ph ph-trash"></i></a>

View file

@ -12,7 +12,7 @@
<li class="breadcrumb-item">
<a href="{{ route('admin.spaces.integration', $space) }}">{{ __('Integration') }}</a>
</li>
<li class="breadcrumb-item active" aria-current="page">{{ __('Email Server') }} - {{ __('Delete' )}}</li>
<li class="breadcrumb-item active" aria-current="page">{{ __('Email Server') }} - {{ __('Delete' ) }}</li>
@endsection
@section('content')

View file

@ -1,14 +1,16 @@
@extends('mails.layout')
@section('content')
# {{ $space->name }} is expiring in {{ $space->daysLeft }} days
# {{ __('Your space :space is expiring in :count days', [ 'space' => $space->name, 'count' => $space->daysLeft]) }}
You are one of the administrator of the {{ $space->name }} space configured on our service.
{{ __('Hello') }},
We inform you that this Space is officialy expiring on **{{ $space->expire_at->format('d-m-Y') }}**.
{{ __('You are one of the administrators of the :space space configured on our service.', ['space' => $space->name]) }}
After that day you and your registered users will not be able to use the features provided by your subscription anymore.
{{ __('We inform you that this space will expire on :date, in accordance with the expiration date defined in your subscription.', [ 'date' => $space->expire_at->format('d-m-Y')]) }}.
Be sure to renew your subscription if you would like to continue to use our services.
{{ __('To ensure the continuity of your services (SIP calls, user accounts, configurations, etc.), we recommend renewing or updating your subscription before the expiration date.') }}
@endsection
{{ __('If you have any questions or need assistance, feel free to contact our support team.') }}
@endsection

View file

@ -1,14 +1,16 @@
<x-mail::message>
@yield('content')
Regards,
{{ __('Best regards,') }}
{{ config('mail.signature') }}
<x-mail::panel>
You dont have the app yet? [Download Linphone](https://www.linphone.org/en/docs/install-linphone/)
Need help? [Visit our user guide](https://linphone.org/en/docs)
{{ __('Dont have the app yet?') }} [{{ __('Download Linphone')}}](https://www.linphone.org/en/download/)
{{ __('Need help?') }} [{{ __('Visit our user guide') }}](https://linphone.org/en/docs)
</x-mail::panel>
</x-mail::message>
</x-mail::message>

View file

@ -1,7 +1,7 @@
@extends('mails.layout')
@section('content')
Hello,
{{ __('Hello') }},
The following email address wants to register to the mailing list: {{ $account->email }}.
{{ __('The following email address wants to register to the mailing list:') }} {{ $account->email }}.
@endsection

View file

@ -1,7 +1,9 @@
To connect your account to the application, click on the following link:
{{ __('We are pleased to inform you that your account has been successfully created.') }}
[{{__('Login to my account')}}]({{ $account->provisioning_wizard_url }})
{{ __('To start using your account, click the button below:') }}
You can also configure your device by scanning the QR code with the mobile app, or by pasting the link below into the desktop application.
[{{ __('Login to my account') }}]({{ $account->provisioning_wizard_url }})
{{ __('You can also connect your account to the mobile app by scanning the QR code with the app') }}
![QRCode]({{ $account->provisioning_qrcode_url }})

View file

@ -1,9 +1,9 @@
@extends('mails.layout')
@section('content')
# Welcome to {{ space()->name }}
# {{ __('Welcome to :space', ['space' => space()->name]) }}
Hello {{ $account->identifier }},
{{ __('Hello') }} {{ $account->identifier }},
@include('mails.parts.provisioning')
@endsection

View file

@ -1,9 +1,9 @@
@extends('mails.layout')
@section('content')
# Welcome to {{ space()->name }}
# {{ __('Welcome to :space', ['space' => space()->name]) }}
Hello {{ $account->identifier }},
{{ __('Hello') }} {{ $account->identifier }},
@include('mails.parts.provisioning')
@endsection

View file

@ -1,20 +1,16 @@
@extends('mails.layout')
@section('content')
# Authenticate on {{ $account->space->name }}
# {{ __('Account Recovery Request') }}
Hello {{ $account->identifier }},
{{ __('We received a request to recover your account on :space', ['Space' => $space->name]) }}
You are trying to authenticate to {{ $account->space->name }} using your email account.
Please enter the code bellow to finish the authentication process.
{{ __('To proceed, please enter the verification code below:') }}
## {{ $account->recovery_code }}
@if (config('app.recovery_code_expiration_minutes') > 0)
The code is only available {{ config('app.recovery_code_expiration_minutes') }} minutes.
{{ __('This code is valid for :minutes minutes.', ['minutes' => config('app.recovery_code_expiration_minutes')]) }}
@endif
@include('mails.parts.provisioning')
@endsection

View file

@ -1,20 +1,16 @@
@extends('mails.layout')
@section('content')
# Authenticate on {{ $account->space->name }}
# {{ __('Account Recovery Request') }}
Hello {{ $account->identifier }},
{{ __('We received a request to recover your account on :space', ['Space' => $space->name]) }}
You are trying to authenticate to {{ $account->space->name }} using your email account.
Please enter the code bellow to finish the authentication process.
{{ __('To proceed, please enter the verification code below:') }}
## {{ $account->recovery_code }}
@if (config('app.recovery_code_expiration_minutes') > 0)
The code is only available {{ config('app.recovery_code_expiration_minutes') }} minutes.
{{ __('This code is valid for :minutes minutes.', ['minutes' => config('app.recovery_code_expiration_minutes')]) }}
@endif
@include('mails.parts.provisioning')
@endsection

View file

@ -1,13 +1,16 @@
@extends('mails.layout')
@section('content')
# Account registration on {{ $account->space->name }}
# {{ __('Welcome to :space', ['space' => $account->space->name]) }}
Hello {{ $account->identifier }},
{{ __('Thank you for registering on :space.', ['space' => $account->space->name]) }}
You just created an account on {{ $account->space->name }} using your email account.
Please enter the following code on the confirmation page:
{{ __('To complete your registration, please enter the verification code below in the registration form:') }}
## {{ $account->emailChangeCode()->first()->code }}
@if (config('app.recovery_code_expiration_minutes') > 0)
{{ __('This code is valid for :minutes minutes.', ['minutes' => config('app.recovery_code_expiration_minutes')]) }}
@endif
@endsection

View file

@ -1,13 +1,13 @@
@extends('mails.layout')
@section('content')
# Reset your password on {{ $account->space->name }}
# {{ __('Reset your password') }}
Hello {{ $account->identifier }},
{{ __('Hello') }} {{ $account->identifier }},
You are invited to reset your {{ $account->identifier }} account password on {{ $account->space->name }} via your email account.
{{ __('We received a request to reset your password for your account on :space.', ['space' => $account->space->name]) }}
The following link will be valid for {{ config('app.reset_password_email_token_expiration_minutes')/60 }} hours.
{{ __('Click the button below to choose a new password:') }}
[{{ __('Reset my password') }}]({{ route('account.reset_password_email.change', $account->currentResetPasswordEmailToken->token) }})

View file

@ -11,7 +11,7 @@ body *:not(html):not(style):not(br):not(tr):not(code) {
body {
-webkit-text-size-adjust: none;
background-color: #ffffff;
color: #718096;
color: #4E6074;
height: 100%;
line-height: 1.4;
margin: 0;
@ -38,7 +38,7 @@ a img {
/* Typography */
h1 {
color: #3d4852;
color: #4E6074;
font-size: 18px;
font-weight: bold;
margin-top: 0;
@ -202,7 +202,7 @@ p img {
}
.table td {
color: #74787e;
color: #4E6074;
font-size: 15px;
line-height: 18px;
margin: 0;
@ -274,7 +274,7 @@ p img {
}
.panel-content p {
color: #718096;
color: #4E6074;
}
.panel-item {