Malcolm Beck`s: Internationlaisierung, UI Translation, wohin mit den Daten und in welcher Form?

Beitrag lesen

Wenn Du Code generierst, ist es im Prinzip egal wieviele Klassen Du hast. Du instanziierst sie ja hoffentlich nicht zu Fuß, sondern über eine Factory - und wenn Du der sowas sagst wie

   interface MessageProvider {
      public function provideStrings($topic);
   }

Ich habe soetwas ähnliches schon quasi „OnBoard“, wobei dein Vorschlag besser klingt. Da es mir schwer fällt, das Tool zu erklären, habe ich mal eine Demofunktion hinzugefügt. Im Grunde ist die Aufgabe das Tools, aus den Daten in der DB verschachtelte Arrays zu erzeugen. Was ich davor oder dahinter schreibe, ist variabel. Auf der Startseite ist ein Array zu sehen. Diese Daten kommen direkt aus der DB, es ist aber dieselbe Funktion, mit der ich auch die finalen Klassen generiere.

Dann kann es Dir im Code total wurscht sein, ob die MessageFactory einen DatabaseMessageProvider erzeugt (der eine Table liest), einen XmlFileMessageProvider (der XML importiert) oder einen DeMessageProvider (der die Texte konstant enthält). All das sind valide Implementierungen, und je nach Implementierung stellst Du deine Strings anders bereit.

An sich 'ne gute Idee, aber ich wollte von XML eigentlich ganz weg, da ich in XML keine Vorteile mehr sehe. Da ist JSON doch um ein vielfaches praktischer. Aber mal sehen, drüber schlafen werde ich auf jedenfall.

Wichtig finde ich nur, dass deine provideStrings-Methode einen Parameter hat, mit dem Du Ressourcen zu einem bestimmten Oberbegriff abrufen kannst.

Ich wusste die ganze Zeit, das da was fehlt. Ja, kommt ins nächste Update 😀

Es wäre sicherlich Zeitverschwendung, immer alle deutschen Texte für alle HTML Seiten deines Projekts zu laden. Und du kapselst damit die technische Abbildung deiner Ressourcen.

Eigentlich ist die Idee dahinter genau die gewesen. Also jeweils die Sprachdatei laden, die gerade benötigt wird und alles bereithalten. Aber den optionalen Parameter werde ich bei nächster Gelegenheit einbauen, der fehlt wirklich.

da könntest Du Dir einmal das ArrayAccess Interface anschauen, um die Ressourcen-Arrays hinter einem Objekt zu verstecken.

Das kenne ich noch nicht, sieht interessant aus.

Eine DB-gestützte Ressourcenhaltung ist - finde ich - als Entwicklungsplattform gar nicht verkehrt

Es ist seit Jahren schon eine Plage, weil es da irgendwie nichts brauchbares für gibt. Oder nichts, was dem nahe kommt, wie ich es gerne hätte.

Verkehrt wäre nur, wenn Live-System und Entwicklungsungebung auf die gleiche Datenbasis zugreifen, da muss auf jeden Fall ein Deployment-Schritt dazwischen sein. Dieser Deployment-Schritt konvertiert dann auch nach Bedarf das Datenformat der Entwicklungsumgebung für die Produktivumgebung.

Ich hatte da eigentlich genau andersherum gedacht. Also Lokal nutze ich die Daten aus der DB, damit ich nicht für jeden neu hinzugefügten String neue Dateien erzeugen muss. Nur Online werden die Klassen genutzt. Aber der Zugriff über die Schlüssel ist immer der gleiche. Aber ich verstehe auch deinen Ansatz hier nicht wirklich. Wie kann ich mir das vorstellen?

Die heißt dann messages.de oder bestellform_messages.de oder messages/de/bestellform.res, da kannst Du Dich austoben.

Ich hab's derzeit schon so, das man verschiedene Datenbanken verwalten kann und für jede Datenbank eigene Settings haben kann. Also das ist mit etwas Fantasie und Kreativität machbar 😀 Nur nicht mit Namespace, bzw. schon, aber sehr, sehr umständlich. Namespace fliegt auf jedenfall raus.

Du kannst es auch so machen, dass Du in der Entwicklungsumgebung mit einem DatabaseMessageProvider arbeitest, der direkt auf die Texttabellen deines Ressourcenpflegesystems zugreift, und im Produktivsystem nutzt Du einen anderen MessageProvider, der auf die Produktionsversion der Ressourcen zugreift - in welchem Format auch immer.

Leider verstehe ich diesen Punkt nicht, oder denke zu kompliziert. Auf der Demoseite kannst du sehen, was der aktuelle Stand ist. Auch mit ein paar Beispielen, leider in Englisch. Hoffe, das ist kein Problem, vor allem mein Englisch 😂 Eventuell könntest du mir anhand des Online-Beispiels erklären, was ich wie machen könnte, oder was dir da Spontan einfällt oder gar auffällt.

Nun ja. Das war jetzt ein rolf.brain.dump(). Vielleicht ist was für Dich dabei :)

Und ein wohlgeformter dazu. Ja, war auf jedenfall einiges dabei, Danke.

--
Hosen sind Blau