Deus Figendi: Multilinguale Website

Beitrag lesen

Du bist doch nicht der erste, der ein mehrsprachiges Projekt in Angriff nimmt. Was für Lösungen zu dieser Problematik hast du dir schon angesehen und was hat dir daran nicht gefallen, dass du das Rad nochmal neu zu erfinden gedenkst?

Erm wie gesagt ich kenne die Methode aus diverser freier Websoftware dass man in /languages/de.php oder so die Strings ablegt. Manchmal auch in mehreren Dateien: /languages/en_words.php /languages/en_sentences.php /languages/en_paragraphs.php (oder thematisch statt nach Länge) Sonst wüsste ich jetzt nicht... naja außerhalb des Web wird afaik ähnlich verfahren, die Sprachdateien freier Software sind oft Listen oder XML oder .ini oder irgendwas dazwischen.

Den Inhalt einer Datenbank kann man aber nicht so einfach mal eben kopieren und jemandem zum Übersetzen geben. Dateien sind da erst einmal einfacher in der Handhabung.

Das stimmt. Allerdings soll die Software nicht wirklich zur Weitergabe gedacht sein... Hm ich muss ein bisschen ausholen: Also das Ganze soll mal so ähnlich wie die großen Video-Plattformen dieser Welt werden. Jedenfalls so vom Grundtenor her. Die wichtigen Unterschiede: Keine Urheberrechtsverletzungen wenn das klappt. (Wie ich das zu bewerkstelligen gedenke führt jetzt zu weit vom Thema weg denke ich). Eigentlich nur Audio. Fokus auf Alben und Playlists. Damit sollte man eine grobe Vorstellung haben. Es ist also nicht mein Ziel die Software quelloffen ins Netz zu stellen, damit möglichst viele andere damit eigene ähnliche Projekte starten. Weil es imho erstrebenswert ist die Benutzer möglichst zu bündeln. Dennoch habe ich vor die Quellen offen zu legen, allerdings aus primär egoistischen Gründen:

  1. Viele Entwickler finden schneller Fehler und Sicherheitslücken
  2. Viele Entwickler können den Code selbstständig erweitern, modifizieren etc. anstatt nur allgemeine Wünsche zu äußern.
  3. Wenn das Projekt einmal nicht mehr ist (eingeschlafen z.B.) soll dennoch die Möglichkeit bestehen, dass es andere nutzen. Bzw. finde ich es immer schade, dass geschriebenes Zeugs einfach so im Nirvana versackt obwohl es noch jemand hätte nutzen können. weniger egoistisch aber auch eher sekundär:
  4. Wenn jemandem meine Funktionen oder so gefallen könnte er/sie Teile des Codes nutzen (also so` cherrypicking)
  5. Forks, also wirklich ANDERE Projekte, die eben auf diesem aufbauen, aber nicht in Konkurrenz dazu stehen (ich konzentriere mich vor allem auf Soundtracks, Hintergrundmusik und so fort... wenn jemand daraus eine HipHop-DJ-Plattform machen will ist das für mich okay, auch wenn ich keinen HipHop mag ^^)

Damit wäre die Software unfrei, was mich durchaus ärgert, aber ich will es so. Ob ich dafür eine Lizenz finde oder eine schreiben muss und ob die Inhalte es überhaupt zulassen werden das ganze unfrei zu handhaben wird sich zeigen.

Was ich sagen will: Sprach-Dateien-Austausch unter oder an Übersetzer ist imho nicht notwendig. Zumal ich ja - wie unten angesprochen - das eher so im laufenden Betrieb machen will. Falls es dann doch mal Sinn machen sollte kann man imho ganz gut hin und her transformieren, vor wenigen Tagen habe ich eine Frage zum Thema CSV+SQL gestellt, eine entsprechende Abfrage auf der DB, die ein CSV generiert und schon hat man eine Datei, die man weiterreichen kann, mit der Tabellenkalkulation bearbeitet und auch (hoffentlich) unkompliziert re-importiert.

$AusgabeVariable[] = '<div class="example">'.htmlentities($texte['name_des_textes']).'</div>(...)';

Was hantierst du hier mit htmlentities() rum? Wenn du schon etwas Multilinguales aufstellst, dann verwende UTF-8, alles andere wäre - 'tschuldigung - dämlich. Einzig htmlspecialchars() benötigst du dann noch für den HTML-Kontext (und für die anderen Kontexte natürlich etwas dort benötigtes).

Stümmt.

Die Ausgabe so zu gestalten, dass man in die Variable einen Platzhalter einfügt und in eine Liste die Texte einträgt, die man so braucht:

$AusgabeVariable[] = '<div class="example">%%%name_des_textes%%%</div>(...)';

> > $verwendete_Texte[] = 'name_des_textes';

und direkt vor der Ausgabe erfolgt dann eine Abfrage auf der Datenbank gegen alle in $verwendete_Texte eingetragenen Namen, welche dann in der AusgabeVariable über eine der mannigfaltigen replace-Methoden ersetzt wird.

Die Array-Lösung käme mehr oder weniger mit einem strtr(), str_replace() oder preg_replace() aus (eigentlich eher preg_replace_callback(), denn irgendwie musst du beim Einfügen ja noch die kontextspezifische Kodierung reinbringen).

Meine Planung aktuell war $HTML_Ausgabe_Variable = str_replace($PlatzhalterArray , $db_result_array , $HTML_Ausgabe_Variable); Aber ich wollte mich eben noch nicht festlegen :)

Die DBMS-Lösung müsste zunächst alle Platzhalter zusammentragen,

wie gesagt, die wollte ich immer wenn ich einen Platzhalter verwende einfach in einem array (einer Liste) ablegen und daraus...

eine Abfrage generieren, das Ergebnis abholen und dann die Ersetzung mit einer der genannten Funktionen vornehmen.

So war auch mein Plan

Zudem wollte ich die Benutzer ein wenig einspannen, zwischendurch oder auch ständig irgendwo wo's nicht stört (ne Sitebar oder sowas) bittet man den Benutzer einen Begriff oder ganzen Text zu übersetzen von einer Sprache, die er beherrscht in eine Sprache, die er beherrscht.

Dafür eignen sich Textdateien primär schlecht. Aber was ist mit einer Qualitätskontrolle? Jeder Formularspammer kann dir dann deine Texte "übersetzen" - abgesehen von engagierten aber sprachlich doch nicht so ganz fitten Mitarbeitern.

Stimmt das ist ein Problem. Wie ich unten darlegte dachte ich noch an eine Abstimmung oder sowas, aber du hast recht, gegen Spam hilft das nichts. Gibt es denn nur böse Bots da draußen? ^^ Nee hast, recht muss ich verwerfen oder mir was einfallen lassen... oh und da kommen mir auch gleich Ideen:

  1. Statt Sidebar oder so könnte man auch jeden String, der nicht in der primärsprache des Benutzers erscheint mit einem hochgestellten Link (wie Fußnoten) versehen, der genau das ermöglicht. Das würde auch das Kontext-Problem lösen, weil total offensichtlich ist, in welchem Kontext der string steht.
  2. Nur erfahrene Benutzer dürfen übersetzen. Was auch immer das bedeutet, eine Woche dabei, einen Monat dabei drei Monate dabei und mindestens wöchentlich besucht... irgendwie sowas, einfach damit man nicht nur registrieren und losspammen kann. Vandalen kann man dann sperren/löschen und sie müssten wieder die entsprechende "Erfahrung" sammeln. Mal sehen, erstmal nur fixe Ideen, die mir während dieses Postings kamen.

ich kann mit vorstellen die Tabellen etwa so zu stukturieren:(...) (...)Die Kommentierdispziplin lässt ja bei den meisten Programmiereren (mich eingeschlossen) zu wünschen übrig.

Ich sehe wir sind uns einig :) Danke fürs bestätigen.

In Variante 1 KÖNNTE man sogar noch überlegen mehrere Einträge der gleichen Sprache für den gleichen Text zu vergeben und dann über eine Voting-Funktion deren Wert zu bestimmen (Laien-Übersetzungen können ja auch mal schief gehen).

Mach es nicht zu komplex/kompliziert. Du musst dir dann auch wieder einen Votingfunktionsmissbrauchsschutz implementieren.

Siehe oben :-D Mal gucken... 2. Nur erfahrene Benutzer dürfen übersetzen. Was auch immer das bedeutet, eine Woche dabei, einen Monat dabei drei Monate dabei und mindestens wöchentlich besucht... irgendwie sowas, einfach damit man nicht nur registrieren und losspammen kann. Vandalen kann man dann sperren/löschen und sie müssten wieder die entsprechende "Erfahrung" sammeln.

Wie könnte ich bei einer solchen Sache noch variable Inhalte in die Texte eingeben? Also das ein Text einen anderen enthält.

Jetzt wird es anspruchsvoll. Also, nicht was die reine Umsetzung mit Platzhaltern angeht, sondern das Berücksichtigen der sprachlichen <del>Gemein</del><ins>Besonder</ins>heiten. Um mal nur ein Beispiel zu nennen: nicht nur, dass manche Sprachen Einzahl und Mehrzahl unterscheiden und dafür unterschiedliche Wortformen verwenden und andere hingegen nicht, es gibt auch noch Sprachen, die für unterschiedliche Mengen unterschiedliche Formen im Angebot haben (Tschechisch, glaub ich, war so eine. 1 Einzahl, 2-4 Mehrzahl, 4-... andere Mehrzahlform).

Stimmt das ist ein Problem... Ich denke aber ich könnte mit den entsprechenden Unzukänglichkeiten leben, wie oft liest man im Netz denn sowas wie "1 Ergebnisse" oder so, weil es keine Überprüfung über die Menge gibt. Mir ist klar, dass sich das nicht nur auf Ein- und Mehrzahl bezieht, ich meinte vielmehr... wenn da eine falsche Gramatik ankommt ist aufgrund der offenen Struktur klar, wie das zustande kommt. Also lebt man damit. Ansonsten habe ich aber auch festgestellt, dass man ggf. mit passendem Satzbau zumindest in den Sprachen die ich beherrsche (deutsch, englisch, latein) zumeist ein vorhandener Begriff passend einbauen lässt. Ich hätte dieses Problem ja schon im Deutschen, weil hier Wortbeugungen auch nicht immer gleich funktionieren. Das wäre mir jetzt auch viel zu aufwendig da noch eine gigantische Gramatik-Regel-Datenbank hinter zu hängen. Nein, das obläge dem Übersetzer den Satz so zu gestalten, dass er passt (wenn es nur um Wortendungen geht oder so kann man die ja sogar in eine Übersetzung einbauen).

Grundsätzlich könnte man in die Texte selber den entsprechenden Platzhalter einfügen, [...] (so will ich Konsistenz in den Bezeichnungen erreichen, nicht das die gleiche Sache hier so und dort anders bezeichnet/übersetzt wird).

Nicht immer ist eine 1:1-Übersetzung möglich. Gelegentlich muss man da je nach Kontext unterschiedlich translieren.

Logisch, ich habe auch jetzt schon gleiche Begriffe mehrmals in der Sprach-Datei, weil sie unterschiedliche Bedeutungen haben (quasi Teekesselchen) und in einer Übersetzung nicht gleich wären.

Und letztlich: Was würdet ihr als fallback wählen?

Englisch. Das verstehen noch die meisten, die einen Begriff nicht in ihrer bevorzugten Sprache finden. Von Englisch nach Sprache X gibt es zudem die meisten Wörterbücher (online). Von X nach Y ist das nicht immer gegeben.

Mhm, schlüssig.

Wie sieht es mit unterschiedlichen Schreibweisen für Datum, Zahlen und Messwerten aus? Die korrekt anzugeben und bei Eingaben zu interpretieren wirst du allein mit Platzhalterersetzungen nicht auf die Reihe bekommen.

Hmm da hast du recht. Ich denke aber dass die Menge da gering ist. Wie gesagt geht es um eine Art Media-Player, also was brauch ich schon? Zeit (Dauer) ggf. Datum Floats (Tausenderpunkte, Dezimal-Abgrenzer-Zeichen aka Komma...) öööhm sonst? Okay, das kann man gerade noch aus der Sprache ableiten bzw. eine entsprechende Profilangabe machen... wird aber aufwendig, da hast du recht. Zweiter Knackpunkt: Ich weiß nicht was September auf Mandarin heißt. Alles in allem rechnen aber glaube ich die meisten Menschen im Dezimalsystem bzw. in Sekunden, Minuten, Stunden, Grad. Wenn man da arabische Ziffern verwendet und sich darauf beschränkt kommen alle zurecht denke ich.

(Übrigens, im Zend Framework steckt auch ein umfangreiches Paket zu diesem Thema. Deswegen ist der Download auch so groß, weil ein wesentlicher Teil davon Daten für ebendieses sind.)

Sagt mir nichts, schau ich mir gleich an.

Einige der Fragen habe ich ja weiter oben schon implizit mitbeantwortet, weswegen ich nicht noch einmal darauf eingehe. Lo!

Ja, vielen Dank für das Feedback und wie ich schrieb hatte ich während des Postens schon die ein oder andere Idee. Dank dir habe ich Probleme entdeckt, von denen ich nicht wusste, wurde bestätigt, habe Hilfe für die DB-Abfrage erhalten und so fort. Also schönen Dank dass du dich so ausführlich mit meinen Sorgen beschäftigst und ich hoffe ich klang jetzt nicht zu "verteidigend", ich denke nämlich ich nehme schon einiges aus deinem Beitrag mit :)

Gruß Deus Figendi

--
sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(