Lieber Linuchs,
<p>Irgendwas ###Bitte gib die Postleitzahl oder den Namen deines Ortes ein###Please enter the postal code or the name of your place###Voer de postcode of de naam van uw plaats in### ist los am [datum].</p>
hmm. Verstehe ich das?
- Irgendwas
Bitte gib die Postleitzahl oder den Namen deines Ortes ein
ist los am 1.1.1970. - Irgendwas
Please enter the postal code or the name of your place
ist los am 1.1.1970. - Irgendwas
Voer de postcode of de naam van uw plaats in
ist los am 1.1.1970.
Sollen so die Ergebnisse aussehen? Warum nicht so?
<p>{#new-event-for-date} <strong>{$date}</strong></p>
<ul>
<li>
<label>
<span data-i18n="event-title"></span>
<input name="event-title" type="text">
</label>
</li>
<li>
<label>
<span data-i18n="zip"></span>
<input name="event-zip" type="text">
</label>
</li>
</ul>
Nur zur Erläuterung: Ich unterscheide in meinen Templates zwischen Sprachbausteinen ({#key}
) und Daten ({$var}
).
Eine passende JSON-Datei müsste nun so aussehen:
{
"event-title": {
"de": "Titel der Veranstaltung",
"en": "Event Title",
"nl": "Titel van het evenement"
},
"new-event-for-date": {
"de": "Neue Veranstaltung am",
"en": "New event on",
"nl": "Nieuw evenement op"
},
"zip": {
"de": "Postleitzahl",
"en": "ZIP Code",
"nl": "Postcode"
}
}
In PHP ist klar, wie man die jeweiligen Sprachbausteine bekommt:
$i18n = json_decode($dateipfad, true); // true = assoziatives Array
$lang = 'de'; // aktuelle Sprachwahl
function translate($key) {
$text = $key; // fallback
/* Kann man $i18n und $lang so in der
* Funktion verfügbar machen? Ich arbeite
* nur mit Objekten und die können auf
* $this->i18n zugreifen.
*/
global $i18n;
global $lang;
// default: Englisch - nur z.B.
if (array_key_exists($key, $i18n)
&& array_key_exists('en', $i18n[$key])
) {
$text = $i18n[$key]['en'];
}
if (array_key_exists($key, $i18n)
&& array_key_exists($lang, $i18n[$key])
) {
$text = $i18n[$key][$lang];
}
return $text;
}
echo translate('event-title'); // Titel der Veranstaltung
In JavaScript ist das im Grunde das selbe. Stellen wir uns vor, die Daten lägen in der Variablen i18n
:
const i18n = {}; // wird mit PHP oder AJAX befüllt
let currentLang = "de"; // aktuelle Sprachwahl
function translate (key) {
let text = key; // fallback
// default: Deutsch - nur z.B.
if (i18n[key] && i18n[key].de) {
text = i18n[key].de;
}
if (i18n[key] && i18n[key][currentLang]) {
text = i18n[key][currentLang];
}
return text;
}
Der Datumswert für {$date}
sollte bei deutscher Sprachausgabe das Format TT.MM.JJJJ haben, bei englischer MM/DD/YYYY. Keine Ahnung, wie das in den Niederlanden ist.
Liebe Grüße
Felix Riesterer