multilingual: HTML-Platzhalterdatei online ändern?
- programmiertechnik
Moin,
mein ehrenamtliches Projekt ist dreisprachig: de, en, nl. Erfreulicherweise ist ein Niederländer im Team, der die deutschen Texte der Webseiten übersetzen möchte.
Bisher hat er mir per Mail die Übersetzung geschickt und ich habe sie eingebaut. Nachteile: Er kan das Ergebnis seiner Arbeit nicht zeitnah überprüfen, ich hatte Zusatzarbeit mit zeitlicher Verzögerung.
Jetzt grüble ich, wie man das efizienter umsetzen könnte.
In den HTML-Platzhalter-Dateien stehen die Sprachen hintereinander, begrenzt und getrennt durch die drei Zeichen #
. Vor der Ausgabe zerlege ich die Zeile mit explode
:
<p>###Heute ist###Today is###Vandaag is het### [wochentag], [tt.mm.jjjj]</p>
Vorhanden ist ein - wie ich finde - pfiffiges Info-System. Wenn man auf das Info-Symbol klickt, z.B. neben einem input-Feld, wird per Ajax der zugehörige Text geholt und angezeigt.
Für Administratoren wird ein Link angeboten, diesen Text zu bearbeiten. Beim nächsten Klick aufs Info-Symbol wird der neue Text gezeigt.
Jetzt fehlt nur noch die Idee, wie ich statt Bearbeitung der Datenbank die Platzhalter-Datei direkt verändere, um beim nächsten Aufruf der Seite den neuen Text zu sehen.
Wie handhabt ihr Übersetzungen in multilingualen Systemen?
Gruß, Linuchs
Tach!
Wie handhabt ihr Übersetzungen in multilingualen Systemen?
Üblicherweise erfinde ich das Rad nicht komplett neu und bediene mich eines Frameworks, das den allgemeinen Krams struktureller Natur mitbringt. Meistens ist für die Mehrsprachigkeit auch etwas eingebaut.
Viele Systeme gehen davon aus, dass man im Code nur einen Identifier für den Text drinstehen hat, und der eigentliche Text dann separat in einem Key-Value-Speicher steht. Es gibt auch Unterschiede bei derartigen Systemen. Einer wäre, dass der Identifier gleichzeitig ein Fallback ist. Damit hat man die hauptsächliche Sprache direkt im Code stehen und braucht dafür keine separate Datei.
Nun muss man noch dafür sorgen, dass jede Sprache die Texte übersetzt hat. Halbwegs gute Systeme stellen das fest, wenn irgendwo eine Übersetzung fehlt. Gute würden auch erkennen, wenn sich ein Text eines bestimmten Identifiers ändert, so dass die Übersetzer informiert werden können.
dedlfix.
Viele Systeme gehen davon aus, dass man im Code nur einen Identifier für den Text drinstehen hat, und der eigentliche Text dann separat in einem Key-Value-Speicher steht.
Meine Erfahrung: Für alles, was nicht an Ort und Stelle steht, geht die Übersicht verloren. Wie gerne würde ich die zentralen, teils 17 Jahre alten CSS-Dateien bereinigen, aber irgendwo "knallt" es dann. Also schleppt man den Mist bis zum Lebensende mit sich rum.
Tach!
Viele Systeme gehen davon aus, dass man im Code nur einen Identifier für den Text drinstehen hat, und der eigentliche Text dann separat in einem Key-Value-Speicher steht.
Meine Erfahrung: Für alles, was nicht an Ort und Stelle steht, geht die Übersicht verloren.
Ja, das kann durchaus passieren, dass man einen Identifier löscht und vergisst, den auch in den Übersetzungsdateien zu entfernen. Separate Dateien haben aber nicht nur Nachteile. Man kann zum Beispiel die Datei nehmen und sie dem Übersetzer geben. So muss er sich nicht durch sämtliche Quellen wühlen, oder stellvertretend du. Da wäre nun die Frage, ob man mit vergessenen Identifiern leben kann und dafür insgesamt weniger Aufwand hat. Und es ist auch nicht so, dass man nicht mit Hilfe eines Tools nach unberücksichtigten Identifiern suchen lassen kann.
dedlfix.
Separate Dateien haben aber nicht nur Nachteile. Man kann zum Beispiel die Datei nehmen und sie dem Übersetzer geben.
Der bekommt dann Textbrocken aus dem Umfeld gerissen? Jetzt bekomme ich eine Ahnung, warum manche Webseiten so seltsame Texte haben 😉
Tach!
Separate Dateien haben aber nicht nur Nachteile. Man kann zum Beispiel die Datei nehmen und sie dem Übersetzer geben.
Der bekommt dann Textbrocken aus dem Umfeld gerissen? Jetzt bekomme ich eine Ahnung, warum manche Webseiten so seltsame Texte haben 😉
Auch das ist ein Problem, wenn der Kontext nicht bekannt ist und damit die Übersetzung nicht ganz passt, wenn sie von diesem abhängig ist. Informationen zum Kontext sind daher ganz nützlich. Nur weiß man das ja nicht, was der Übersetzer für seine Sprache an Informationen benötigt. Hier kann ich auch nicht mit Erfahrung dienen, wie das Zusammenspiel geht, weil ich bisher nur zweisprachig selbst übersetzt habe.
dedlfix.
Hallo
Separate Dateien haben aber nicht nur Nachteile. Man kann zum Beispiel die Datei nehmen und sie dem Übersetzer geben.
Der bekommt dann Textbrocken aus dem Umfeld gerissen? Jetzt bekomme ich eine Ahnung, warum manche Webseiten so seltsame Texte haben 😉
Niemand hindert dich daran, für die Schlüssel in den von dedlfix vorgeschlagenen Schlüssel-Wert-Paaren selbstsprechende Namen zu definieren, zum Beispiel im INI-Format.
# front page
[indexpage]
siteheader = "remso.de, Chorkonzerte und mehr seit 1874"
footer = "©️ 1874-2019, Linuchs"
# another page
[furtherpage]
#…
# main navigation
[navigation]
calendar = "Konzertkalender"
choirlist = "Liste aller Chöre"
legals = "Impressum"
Vorausgesetzt, der Übersetzungswillige versteht lesend Englisch, kann er sich, eventuell mit einzelnen Nachfragen, den Zweck des Sprachschnipsels aus den Schlüsseln und den Kommentaren erschließen. Nur, weil es schlechte Beispiele gibt, heißt das nicht, dass man – und auch du – es nicht auch gut™️ machen könnte.
Tschö, Auge
Lieber Linuchs,
Wie handhabt ihr Übersetzungen in multilingualen Systemen?
<p>{#instructions-mail}</p>
<p>
<label><span>{#mail-address}:</span>
<input name="mail" type="email">
</p>
{
"instructions-mail": {
"de": "Bitte geben Sie Ihre Mailadresse an, damit wir sie mit SPAM zumüllen können. Vielen Dank.",
"en": "Tell us your e-mail address and benefit from our exclusive service."
},
"mail-address": {
"de": "Ihre Mailadresse",
"en": "Your e-mail address"
}
}
Liebe Grüße
Felix Riesterer
Lieber Felix,
der erste Code ist HTML und der zweite? Javascript?
Das würde bedeuten, dass du sämtliche Sprachen auslieferst und der Client pickt sich seine raus?
Wie heißt denn das gesamte Kommando?
Hallo
der erste Code ist HTML und der zweite? Javascript?
Jein. Das ist JSON (JavaScript Object Notation), wird aber auch von den meisten anderen Programmiersprachen (wie zum Beispiel auch PHP) unterstützt.
Das würde bedeuten, dass du sämtliche Sprachen auslieferst und der Client pickt sich seine raus?
Das könnte man zwar mit JS machen, wozu man den vollständigen Blob für alle Sprachen an den Browser übertragen müsste (will man im Allgemeinen nicht), das geht aber auch auf dem Server mit der PHP-Funktion json_decode
.
Tschö, Auge
Hallo Felix,
"de": "Bitte geben Sie Ihre Mailadresse an, damit wir sie mit SPAM zumüllen können. Vielen Dank.", "en": "Tell us your e-mail address and benefit from our exclusive service."
😂 beste Übersetzung!
LG,
CK