Introductie
Heel wat modules op drupal.org zijn gemaakt met het oog op gebruik in een ééntalige site. De grootste oorzaak is dat de auteurs vooral Amerikanen zijn. Meestal zijn de interface strings wel vertaalbaar maar andere configuratie instellingen zelden. En als deze vertaalbaar zijn worden ze nog steeds veel te vaak door t() gehaald wat helemaal geen goede oplossing is.
In deze blog post zal ik uitleggen hoe je een module schrijft die volledig vertaalbaar is. Met deze info kan je dan ook bestaande modules aanpassen en een patch op drupal.org zetten zodat de module vertaalbaar is voor mensen die na jou deze zullen gebruiken.
t()
De t() functie is waarschijnlijk bekend bij de meeste Drupal ontwikkelaars. Deze functie dient echter enkel en alleen om vaste interface strings van het Engels naar andere talen te vertalen via de Translate interface functionaliteit. Dat wilt dus zeggen dat je enkel Engelse strings in t() mag plaatsen.
Zorg er ook voor de je veranderlijke tekst doorgeeft als parameter zodat de tekst bijvoorbeeld niet voor elke gebruikersnaam dient vertaald te worden. Zoals het voorbeeld:
$text = t("@name's blog",
array('@name' => format_username($account)));
De t() functie dient dus niet om dynamische content zoals bevestingsberichten of custom berichten op bvb. submit knoppen vertaalbaar te maken. Als je in een configuratiescherm van een module het volgende zou zien:
$form['message_ok'] = array(
'#type' => 'textfield',
'#default_value' => variable_get('message_ok', 'Ok!'),
);
En dan op het moment dat deze getoond wordt het volgende:
Dan is dat niet ok. Als je het oorspronkelijke bericht verandert verlies je namelijk ook je vertalingen. Dit was een tijdje geleden namelijk nog het geval met de flag module.