Traduire une application Symfony en allemand
Déposez vos fichiers <code>translations/messages.fr.xlf</code> ou <code>.yaml</code> : Manuce traduit les valeurs en allemand, vérifie les paramètres <code>%name%</code> et <code>{name}</code> et vous rend le même fichier, prêt à remettre dans le projet. Il reste deux points à vérifier vous-même : la longueur des mots composés allemands dans l'interface et les pluriels écrits avec l'ancienne syntaxe à intervalles.
Combien ça coûte
Pour les fichiers de langue d'une application Symfony totalisant environ 3 000 mots, vers l’allemand :
Comprendre, usage interne.
Prêt à transmettre, par le spécialiste technique.
Relecture croisée. Pour ce qui engage.
Prix pour une langue, mise en page d'origine comprise. TVA non applicable, article 293 B du CGI. Le devis exact, calculé sur le nombre de mots de votre fichier, s'affiche avant paiement.
Ce que l'allemand change dans vos chaînes Symfony
L'allemand s'écrit en alphabet latin, mais il modifie la mise en page. Les mots composés se soudent en un seul bloc : « Paramètres du compte » devient Kontoeinstellungen, « Confirmation de commande » devient Bestellbestätigung. Le texte est souvent 20 à 35 % plus long que l'anglais, et un libellé court en français peut doubler en largeur. Un bouton prévu pour « Valider » peut ne plus contenir Bestätigen, et un en-tête de colonne peut déborder.
- Majuscules : tous les noms prennent une capitale, y compris au milieu d'une phrase, comme dans
Ihr Passwort wurde geändert. - Registre : en contexte professionnel, on vouvoie avec Sie (Melden Sie sich an). Certaines applications grand public tutoient avec du. Choisissez avant de traduire, puis gardez le même registre dans tous les domaines (
messages,validators, e-mails). - Ponctuation : pas d'espace avant « ? » ni avant « : ». On écrit
Passwort vergessen?, et les guillemets prennent la forme „ainsi“. - Coupure des mots : si la balise html de vos gabarits Twig porte
lang="de", la propriété CSShyphens: autopermet au navigateur de couper proprement les mots trop longs.
Pluriels : deux formes, mais pas réparties comme en français
L'allemand n'a que deux catégories de pluriel CLDR, one et other. La catégorie one ne couvre toutefois que 1. Là où le français écrit « 0 fichier », l'allemand écrit 0 Dateien.
Avec le format ICU, la règle s'applique d'elle-même à l'exécution. Par exemple, {count, plural, one {# Datei} other {# Dateien}} suffit, et le composant Intl choisit la bonne forme pour la locale de.
Avec l'ancienne syntaxe à barres verticales, les intervalles sont écrits en dur dans la chaîne. Une source française comme {0,1} %count% fichier|]1,Inf[ %count% fichiers garde ses bornes une fois traduite, et affichera donc « 0 Datei ». La traduction ne modifie pas ces intervalles. Dans le fichier allemand, corrigez-les en {0} Keine Dateien|{1} Eine Datei|]1,Inf[ %count% Dateien, ou passez ces messages au format ICU.
Ce que Manuce rend, et ce qu'il ne fait pas
Vous déposez messages.fr.xlf ou messages.fr.yaml, et vous récupérez le même fichier, dans le même format. Par exemple, cart.summary: "%count% articles dans votre panier" devient cart.summary: "%count% Artikel in Ihrem Warenkorb" : la clé et le paramètre restent identiques.
- Seules les valeurs changent. L'indentation, l'ordre des clés, les guillemets, les commentaires, les fins de ligne, l'encodage et le BOM sont conservés.
- Chaque valeur traduite est comparée à la source, variables et balises comprises. En cas d'écart persistant, la valeur source est gardée et le rapport le signale.
- Ne sont pas traduits : les clés, les valeurs vides, les URL, les adresses e-mail, les nombres, les couleurs, les formats de date, les identifiants et tout ce que vous marquez comme non traduisible.
- Un rapport accompagne le fichier : il liste les chaînes traduites et celles laissées telles quelles, avec la raison.
Manuce ne traduit que le contenu du fichier déposé. Il ne traite pas les chaînes écrites en dur dans un gabarit Twig ou un contrôleur, ne corrige pas les intervalles de pluriel et ne redimensionne pas l'interface. Il ne produit pas non plus de traduction assermentée : vos conditions générales et mentions légales destinées à l'Allemagne doivent être validées par un juriste. Le prix porte sur les mots des valeurs, hors clés et balises, et l'allemand est au tarif de base.
Préparer le projet, puis vérifier le résultat
Avant le dépôt :
- Lancez
php bin/console translation:extract --force fr. Toutes les chaînes passées par le filtre|transou par le service de traduction se retrouvent alors dans le fichier source. - Ne traduisez pas les messages fournis par Symfony lui-même. Les composants Validator et Security ont déjà leurs traductions allemandes : dans
validators.fr.xlf, seuls vos messages de contraintes personnalisés sont à traduire. - Signalez comme non traduisibles les noms de marque, de produit ou de plan tarifaire qui doivent rester tels quels.
Après la livraison :
- Enregistrez le fichier sous
translations/messages.de.xlf(ou.yaml) et ajoutezdeàenabled_locales. - Videz le cache, puis lancez
php bin/console debug:translation depour repérer les messages manquants. - Parcourez les écrans les plus denses (menus, boutons, tableaux, e-mails transactionnels) à la recherche de libellés allemands tronqués.
- Lisez le rapport : une valeur restée en français signale le plus souvent un paramètre mal formé dans la source.
En pratique
- Lancez l'extraction des messages pour obtenir un fichier source complet.
- Déposez messages.fr.xlf ou .yaml : le devis s'affiche et un extrait gratuit vous montre un paragraphe traduit.
- Choisissez le niveau de traduction et réglez la commande.
- Récupérez le fichier et le rapport, puis enregistrez le fichier sous translations/messages.de.xlf ou .yaml.
- Activez la locale de, videz le cache et contrôlez l'affichage des libellés longs.
Questions fréquentes
Mes paramètres %name% et {count} restent-ils intacts ?
Oui. Chaque valeur traduite est comparée à la source, paramètres et balises compris. Si un écart persiste, la valeur source est conservée et le rapport l'indique, ce qui évite qu'un message casse à l'exécution.
Faut-il traduire les domaines validators et security ?
Uniquement vos propres messages. Symfony fournit déjà les traductions allemandes des messages de ses contraintes de validation et de sécurité. Déposez seulement les entrées que vous avez ajoutées.
Pourquoi « 0 Datei » s'affiche-t-il au lieu de « 0 Dateien » ?
Votre message utilise probablement la syntaxe à intervalles, avec une borne {0,1} héritée du français. En allemand, seul 1 est au singulier. Corrigez les intervalles dans le fichier allemand ou passez au format ICU.
Les dates et les nombres seront-ils au format allemand ?
Les formats de date et les nombres présents dans le fichier ne sont pas traduits. L'affichage allemand (31.12.2025, 1.234,56) dépend de la locale active et des filtres Intl de Twig, pas du fichier de traduction.
Le texte allemand risque-t-il de casser ma mise en page ?
C'est possible : l'allemand est souvent 20 à 35 % plus long que l'anglais, et ses mots composés ne se coupent pas d'eux-mêmes. Prévoyez des boutons extensibles, déclarez lang="de" avec hyphens: auto, et vérifiez les écrans denses après l'intégration.
Le spécialiste qui s’en charge
Ce sujet est confié à Dédale, le spécialiste technique. Voir comment il travaille.
Le même fichier, vers une autre langue
Vers l’allemand, d’autres fichiers
À lire aussi
Testez sur votre fichier, gratuitement
Un extrait de votre fichier traduit au niveau choisi, avant tout paiement. Vous jugez, puis vous décidez.