Ich war am überlegen ob ich einen eigenen Artikel für die Translations machen sollte oder nicht. Da ich mittlerweile nun auf den zweiten größeren Blocker gestoßen bin, habe ich mich DAFÜR entschieden.
Caching
Als ersten Punkt muss ich das gute alte Caching aufführen. Leider hat mich dies vor kurzem eine gute Stunde meiner Zeit gekostet.
Beispiel
Ich übersetze aktuell einige Transaction Mails und nutze dafür wegen der Übersicht eine neue Domain
mail.de.yaml
mail.en.yaml
Diese Domains kann man in Twig relativ einfach einbinden:
{{ 'helper.approved.text'|trans({},'mail')|raw }}
Wichtig hierbei ist eigentlich nur trans({},’mail‘) dabei gebe ich keine Werte in den geschweiften Klammern mit (nein weglassen oder ein leerer String funktionieren nicht) und bestimme die Domain im zweiten Parameter der trans Funktion.
Habt Ihr nur eine Domain in eurer Twig Datei, könnt Ihr auch einfach einen Default nutzen.
{% trans_default_domain 'mail' %}
Problem
Das ganze wird leider gecached – auch im dev Modus. Sprich wenn Ihr vorab mal die Domain nicht drin hattet wird euch der Textbaustein einfach als String ausgegeben.
php bin/console cache:clear
und es funktioniert. Ich werde es nie wieder vergessen!
Domains
Dabei sind wir auch schon beim zweiten Thema, die Domains. Mir war am Anfang nicht ganz klar, dass diese bei den Übersetzungen angegeben werden müssen. Macht ja auch Sinn, so könnt Ihr z.B. button.delete pro Domain anders benennen etc. pp.
Grundsätzlich solltet Ihr einzelne Teilbereiche in Domains untergliedern (außer euer Projekt ist sehr klein). In meinem Fall sind das:
- messages
- admin
- seo
In PHP ist das ganze ähnlich aufgebaut:
$translator->trans('helper.approved.subject', [], 'mail')
- Textbaustein Name
- Parameter
- Domain
- Locale
Die locale setze ich beim versenden an Kunden oder Nutzer immer je nach Sprache aus der Datenbank mit:
$translator->setLocale($user->getLang());
Meine Migration ist noch nicht final und es kommen sicher noch die ein oder anderen Punkte auf, daher lasse ich den Beitrag mal „offen“ und ergänze im Laufe der Zeit.