traductions : catalogues français (messages, validators, security)

Les 3 118 clés de messages.en.yaml, plus les domaines validators et
security, traduits en français. Le catalogue seul ne change rien à
l'écran : la locale est déclarée au commit suivant. CatalogueParityTest
vérifie désormais le français comme l'allemand et le pirate. C'est le
seul garde-fou, car Symfony retombe sans bruit sur l'anglais quand une
clé manque.

Choix de traduction, pour qui reprendra ces fichiers :
- Vouvoiement, l'usage des logiciels en français, alors que
  l'allemand tutoie. Aucun test ne l'impose, contrairement à
  GermanIsInformalTest.
- « Agenda » pour calendar, « libellé » pour label, « suivi » pour
  star (comme Gmail en français), « mettre en attente » pour snooze,
  « courrier » pour mail quand c'est le contenu et « mail » pour un
  message. Les termes des consoles Google et Microsoft sont repris tels
  que leurs interfaces françaises les affichent.
- Apostrophe typographique (’) partout dans le texte. Avec une
  apostrophe droite, chaque chaîne entre guillemets simples devrait la
  doubler, et un oubli casse le fichier entier. L'espace avant « : » à
  la française oblige aussi à mettre la valeur entre guillemets :
  security.fr.yaml ne se chargeait plus à cause de ça (« A colon cannot
  be used in an unquoted mapping value »). C'est corrigé et vérifié en
  chargeant les trois fichiers.
- Placeholders (%count%, {skinTone}, {{ limit }}) et formes plurielles
  ({0}…|{1}…|]1,Inf[…) contrôlés clé par clé contre l'anglais : aucun
  écart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018nYWPc4bWacb79hm4ytfni
This commit is contained in:
jo2904andClaude Opus 5.5 committed 2026-10-13 23:33:25 +02:00
1 parent ff87ee92d7
commit 32f6926df8
4 files changed
+4451 -1

No files matched your search

@@ -9,7 +9,7 @@ use PHPUnit\Framework\TestCase;
use Symfony\Component\Yaml\Yaml;
/**
* Every key in the English catalogue exists in German and in pirate English.
* Every key in the English catalogue exists in German, French and pirate English.
*
* A missing key is not an error anywhere Symfony looks: the translator falls
* back to `en`, the page renders, and the only symptom is an English sentence
@@ -27,6 +27,7 @@ final class CatalogueParityTest extends TestCase
public static function locales(): iterable
{
yield 'de' => ['de'];
yield 'fr' => ['fr'];
yield 'en_PI' => ['en_PI'];
}
File diff suppressed because it is too large. Load diff
+14
View File
@@ -0,0 +1,14 @@
# Échecs de connexion, dans le domaine où Symfony les résout. Voir
# security.en.yaml pour le pourquoi de chaque entrée.
account.deactivated: Votre compte a été désactivé par un administrateur. Demandez-lui de le réactiver — rien de ce qui vous appartient n’a été supprimé.
account.removed: Ce compte a été supprimé et ne peut plus servir à se connecter.
# Authentification unique via un fournisseur OpenID Connect.
oidc.unavailable: L’authentification unique ne fonctionne pas pour le moment. Connectez-vous avec votre mot de passe, ou demandez à votre administrateur de consulter les journaux.
oidc.denied: Le fournisseur de connexion ne vous a pas laissé entrer dans plMail.
oidc.failed: La connexion via votre fournisseur n’a pas pu aboutir. Réessayez.
oidc.no_email: 'Votre fournisseur de connexion n’a pas communiqué votre adresse e-mail à plMail : il n’y a donc aucun compte auquel vous connecter.'
oidc.email_unverified: Votre fournisseur de connexion n’a pas confirmé votre adresse e-mail, plMail ne la liera donc à aucun compte. Adressez-vous à votre administrateur.
oidc.ambiguous: Plusieurs comptes ici ont votre adresse e-mail. Demandez à votre administrateur de régler cela.
oidc.no_account: Il n’existe pas encore de compte plMail pour vous. Demandez à votre administrateur d’en créer un avec votre adresse e-mail.
oidc.linked_elsewhere: Le compte qui a votre adresse e-mail est déjà lié à quelqu’un d’autre chez votre fournisseur de connexion. Adressez-vous à votre administrateur.
+35
View File
@@ -0,0 +1,35 @@
# Messages de contraintes. Symfony traduit la validation dans le domaine
# `validators`, pas `messages` — voir validators.en.yaml.
account.host_invalid: Saisissez uniquement un nom d’hôte ou une adresse IP — sans barre oblique, point d’interrogation ni @.
admin.ai.keep_alive_invalid: Utilisez une durée comme 5m, 30m ou 4h, un nombre de secondes, ou -1 pour garder le modèle chargé en permanence — laissez vide pour utiliser le réglage de l’hôte.
admin.integrations.client_id_missing: Saisissez l’ID client qui va avec ce secret.
admin.integrations.secret_missing: Saisissez aussi le secret client — un ID client seul ne permet à personne de se connecter.
admin.sso.error.client_id_missing: 'Un ID client est nécessaire avec l’émetteur et le secret. Les trois, ou aucun.'
admin.sso.error.issuer_missing: 'Un émetteur est nécessaire avec l’ID client et le secret. Les trois, ou aucun.'
admin.sso.error.issuer_not_https: 'L’émetteur doit commencer par https://. plMail fait confiance au fournisseur grâce à la connexion TLS vers lui.'
admin.sso.error.secret_missing: 'Un secret client est nécessaire avec l’émetteur et l’ID client. Les trois, ou aucun.'
admin.users.password_too_short: Utilisez au moins {{ limit }} caractères — ce mot de passe est choisi pour quelqu’un d’autre.
alias.invalid: Saisissez une adresse e-mail valide.
app_password.name_required: Donnez un nom au mot de passe d’application pour le reconnaître plus tard.
caldav.address_required: Saisissez l’adresse de votre serveur CalDAV — sans elle, plMail n’a personne à interroger.
caldav.credential_required: Saisissez un mot de passe d’application, ou cochez la case pour utiliser celui enregistré d’un compte mail.
caldav.reuse_account_required: Choisissez le compte mail dont utiliser le mot de passe, ou décochez la case et saisissez-en un.
caldav.username_required: Saisissez le nom d’utilisateur sous lequel votre serveur CalDAV vous connaît.
calendar.name_required: Donnez un nom à l’agenda — c’est ce qui le distingue des autres.
compose.recipient_invalid: "« {{ address }} » n’est pas une adresse e-mail valide."
compose.recipient_required: Ajoutez au moins un destinataire avant d’envoyer.
settings.password.current_required: Saisissez votre mot de passe actuel — c’est ce qui empêche quelqu’un devant votre écran déverrouillé de le changer.
settings.password.current_wrong: Ce n’est pas votre mot de passe actuel.
settings.password.mismatch: Les deux nouveaux mots de passe ne correspondent pas.
settings.password.too_short: Utilisez au moins {{ limit }} caractères.
setup.install.password_mismatch: Les deux mots de passe ne correspondent pas.
setup.install.password_too_short: Utilisez au moins {{ limit }} caractères. Ce compte n’a pas de réinitialisation de mot de passe.
user.email_taken: Quelqu’un utilise déjà cette adresse. Chaque adresse de cette installation appartient à une seule personne.
admin.ai.field.base_url_invalid: 'Ceci doit commencer par http:// ou https://.'
profile.avatar_wrong_type: 'Utilisez une image PNG, JPEG, GIF ou WebP.'
admin.ai.headers.malformed: 'Écrivez chaque en-tête sur sa propre ligne sous la forme Nom: valeur.'
admin.ai.headers.name: 'Un nom d’en-tête ne peut contenir que des lettres, des chiffres et des tirets, et ne peut pas être vide.'
admin.ai.headers.value: 'Une valeur d’en-tête ne peut pas être vide, ne peut pas contenir de saut de ligne ni d’autre caractère de contrôle, et fait au plus 4096 caractères.'
admin.ai.headers.reserved: 'Un de ces en-têtes est défini par plMail lui-même et ne peut pas être remplacé : Host, Content-Type, Content-Length, Connection et consorts.'
admin.ai.headers.duplicate: 'Le même en-tête est listé deux fois.'
admin.ai.headers.too_many: 'Au plus %max% en-têtes supplémentaires.'