- 20 April 2006
- 22.682
- 1.316
Moin.
Ich möchte versuchen, eine Webseite in mehreren Sprachen anzubieten. Im Moment beruht alles schon auf Smarty.
Meine Versuche mit Google haben mir zwei mögliche Ansätze gebracht:
Problematisch finde ich nur - und das is bei beiden Ansätzen der Fall -, wenn ich in meinen Templates Textpassagen drin hab, in denen Variablen sind.
Mal ein Extrembeispiel:
Überall, wo die Variablen und Funktionen sind, muss ich praktisch ja die Übersetzung aufsplitten 
Die entsprechende Übersetzung:
Sieht sehr doof aus.
Alternative: Ich setze die Variablen mit in die Übersetzung. Da sich die Übersetzung vor der Kompilierung abspielt, wäre es möglich.
Konkret am Beispiel:
Problem: Kurz vor der Kompilierung hab ich dann
- also noch Übersetzungskonstrukte drin. Ich müsste also mehrmals meinen Prefilter anwenden, um schließlich
zu erhalten.
Wie oft? Eine bestimmte Anzahl vorgeben oder solange durchgehen, bis alle "##irgendwas##"-Ausdrücke weg sind? Letztes könnte zur Endlosschleife werden, wenn man nicht aufpasst. Also auch böse.
Was würdet ihr empfehlen?
Ich möchte versuchen, eine Webseite in mehreren Sprachen anzubieten. Im Moment beruht alles schon auf Smarty.
Meine Versuche mit Google haben mir zwei mögliche Ansätze gebracht:
- mittels Konfigurationsdateien
https://www.phpinsider.com/smarty-forum/viewtopic.php?p=50780
Ich lege pro Sprache eine Konfigurationsdatei und lade diese dann entsprechend.
- Ableiten und Einsatz von Prefilter
https://www.robertnitsch.de/2007/05...rstutzung-mehrerer-sprachen-multilingualitat/
Ich leite Smarty ab und erzeuge mir so eine neue Klasse, die mittels Prefilter bestimmte Spezialtags in meinen Templates erkennt und die richtige Sprache einsetzt.
Smarty::fetch() wird überschreiben und sorgt dafür, dass jedes Template pro Sprache gecached wird.
HTML:
<?xml version="1.0" encoding="UTF-8" ?>
<language name="deutsch">
<phrase1>Übersetzung für Phrase 1</phrase1>
<!-- ... -->
</language>
Mal ein Extrembeispiel:
HTML:
<p>Dies ist ein langer Text, der übersetzt werden müsste.
Heute haben wir {$temperature}. Man braucht {$count_umbrellas}
{if $count_umbrellas == 1}Regenschirm{else}Regenschirme{/if},
wenn man aus dem Haus geht.
Und so weiter...</p>

HTML:
<p>##longtextpart1## {$temperature}##longtextpart2## {$count_umbrellas}
{if $count_umbrellas == 1}##umbrella_singular##{else}##umbrella_plural##{/if}##longtextpart3##</p>
HTML:
<?xml version="1.0" encoding="UTF-8" ?>
<language name="deutsch">
<longtextpart1>Dies ist ein langer Text, der übersetzt werden müsste.
Heute haben wir</longtextpart1>
<longtextpart2>. Man braucht</longtextpart2>
<longtextpart3>,
wenn man aus dem Haus geht.
Und so weiter...</longtextpart3>
<umbrella_singular>Regenschirm</umbrella_singular>
<umbrella_plural>Regenschirme</umbrella_plural>
</language>
Alternative: Ich setze die Variablen mit in die Übersetzung. Da sich die Übersetzung vor der Kompilierung abspielt, wäre es möglich.
Konkret am Beispiel:
HTML:
<p>##sometext##</p>
HTML:
<?xml version="1.0" encoding="UTF-8" ?>
<language name="deutsch">
<sometext>Dies ist ein langer Text, der übersetzt werden müsste.
Heute haben wir {$temperature}. Man braucht {$count_umbrellas}
{if $count_umbrellas == 1}##umbrella_singular##{else}##umbrella_plural##{/if},
wenn man aus dem Haus geht.
Und so weiter...</sometext>
<umbrella_singular>Regenschirm</umbrella_singular>
<umbrella_plural>Regenschirme</umbrella_plural>
</language>
HTML:
<p>Dies ist ein langer Text, der übersetzt werden müsste.
Heute haben wir {$temperature}. Man braucht {$count_umbrellas}
{if $count_umbrellas == 1}##umbrella_singular##{else}##umbrella_plural##{/if},
wenn man aus dem Haus geht.
Und so weiter...</p>
HTML:
<p>Dies ist ein langer Text, der übersetzt werden müsste.
Heute haben wir {$temperature}. Man braucht {$count_umbrellas}
{if $count_umbrellas == 1}Regenschirm{else}Regenschirme{/if},
wenn man aus dem Haus geht.
Und so weiter...</p>
Wie oft? Eine bestimmte Anzahl vorgeben oder solange durchgehen, bis alle "##irgendwas##"-Ausdrücke weg sind? Letztes könnte zur Endlosschleife werden, wenn man nicht aufpasst. Also auch böse.
Was würdet ihr empfehlen?