Viele meiner Ideen entstehen aus Frustration: Vorhandene Lösungen sind
- Zu einfach: Sie können nicht das, was ich erwarte
- Zu groß: Sie können zu viel
- Zu kompliziert: Ohne 22 seitige Spezifikation ist man aufgeschmissen
- Zu .. unheimlich. Ernsthaft :X
So auch diesmal. Ich nutzte lange Zeit den Gettext-Adapter für Zend_Translate, aber wenn man die Scan-Funktion von PoEdit nicht richtig nutzen kann, wird es unbequem. Zunächst tippt man sich selbst eine pot-Datei, daraus erstellt man eine oder mehrere po-Dateien, in denen man endlich übersetzen kann. Letzter Schritt ist bekanntlich die Kompilierung in eine mo-Datei.
Der auffälligste Nachteil ist, dass man nicht mal eben einzelne Strings übersetzen kann, man muss immer gleich kompilieren. Übersetzung per Webfrontend wird damit schon mal schwieriger. Der nächste logische Schritt war demnach eine textbasierte Übersetzungsquelle, die allerdings fast alle ursprünglich als Übersetzungsspeicher dienen, nicht direkt für multilinguale Anwendungen, wodurch deren Umfang unschön wird (zB Spezifikation von TMX). PHP-Arary, CSV oder Ini-basierte Textquellen schlossen sich von selbst aus.
Es keimte dann die Idee auf mein eigenes Übersetzungsformat zu entwickeln. Standardisierte Formate haben immer den Vorteil, dass entweder “der Betroffene” sie kennt, oder es zumindest offene Quellen gibt, wo man sich informieren kann. Sowas funktioniert bei Eigententwicklungen eher selten. Da kann man nur hoffen, dass diese a) sooo cool wird, dass jeder sie haben will, b) sie sooo einfach wird, dass man nicht mal den Zaunpfahl braucht, damit irgendwer sie versteht, oder c) es einen einfach egal ist. Ich entschied mich für b).
Die bisherige (nicht öffentliche) Implementierung basiert auf XML und orientiert sich so nen halben Meter an Gettext. Da ich mich für b) entschieden habe, sollte ich nicht mehr viel Reden müssen
<sxt>
<msg msgid="Access denied">
<msgstr locale="de">Zugang verweigert</msgstr>
<msgstr locale="en">Sry, youre out</msgstr>
</msg>
</sxt>
Ein Hauptmerkmal ist, dass sie im Umfang stark reduziert ist, deshalb auch die Orientierung an Gettext. Der Hauptunterschied zu Gettext wiederum ist, dass eine Datei mehrere Sprachen fassen kann. Und das es XML ist, da lässt sich schwer verbergen. Grundsätzlich soll die Implementierung so stehen bleiben, Details können sich allerdings noch ändern. Eventuell bring ich das “One Language per File” zusätzlich noch mit ein?
Soweit stand der Dinge. Bei mir funktioniert es und ich denke, ich werde es so auch nutzen (sonst hätte ich es nicht entwickeln müssen). Eine Veröffentlichung erfolgt dann wie gehabt im Rahmen von Libcrunch. Vielleicht freut sich sogar jemand darüber
Wer noch etwas über meine innere Zerrissenheit über diese Thema wissen will, kann sich das dazugehörige Thema antun.
Grüße, KingCrunch
Nachtrag:
Der Name wird sich nochmal ändern, SimpleXML gibts ja schon -.- Das ist insofern peinlich, da ich intern SimpleXML auch nutze …
Klingt sehr interessant, vielleicht lässt sich da auch eine Erweiterung für Zend_Tool entwickeln.
Im ersten Moment würde ich es nicht unbedingt als unpassend empfinden wenn ich in Controller/View Verzeichnis eine Übersetzung Datei in deinem Format habe, diese für ein Release aber zu einer .pot/.po(und letztendlich zu .mo) kombinieren kann.
btw. wie wäre’s mit XmlTranslationSource, kurz xts.
Die Transformation von einem Format in das andere sollte nicht sooo schwierig sein. Allerdings wär das für mich nichts: So wirds ja noch komplizierter, eigentlich wollte ich es einfacher
Und ums Kompilieren kommt man bei Gettext nicht vorbei.
Intern speichert Translate alle Übersetzungen sowieso im selben Format. Mit ‘$translate->getMessages(‘all’)’ kommt man dann da ran. Nun muss man sich nur was ausdenken, was das in Dateien schreibt. Das sollte theoretisch mit beliebigen Ausgabeformaten funktionieren, nicht nur mit Gettext.
[...] schon angedeutet habe ich beschlossen einen eigenen Adapter für Zend_Translate zu schreiben. Den Namen habe ich [...]