Globale Übersetzungen?

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
bodil
Beiträge: 232
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Globale Übersetzungen?

Beitrag von bodil » Do 7. Mär 2019, 12:31

Hallo!
Ich habe gerade mehrere Module, die alle dasselbe Vokabular benutzen. Da wäre es natürlich schön, ich müsste die Übersetzungen nur an einer Stelle anpassen und nicht in jedem Modul neu.
Deshalb suche ich gerade nach einer Möglichkeit die es mir ermöglicht
• Übersetzungen im Backend zu pflegen (also nicht im Dateisystem)
• und die Übersetzungen auch außerhalb von Modulen zur Verfügung stellt (z. B. in eigen Klassen).
Weiß jemand, ob dafür was vorgesehen ist? Sonst benutze ich die Mandanteneinstellungen.
Lieben Dank!
Bodil

xmurrix
Beiträge: 2982
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Globale Übersetzungen?

Beitrag von xmurrix » Do 7. Mär 2019, 20:56

Hallo Bodil,

leider gibt es das, was du willst nicht.

Das Backend und Plugins verwenden für Übersetzungen gettext-Dateien. Die wären global verfügbar, die Übersetzungen kann man aber nicht über das Backend editieren. Das geht z. B. mit Poedit, einem Editor für gettext-Dateien.

Module haben ihren eigenen Übersetzungen, die kann man im Backend editieren, sind aber nicht global verfügbar.
Man könnte aber globale Modulübersetzungen realisieren, wenn man den Core von CONTENIDO erweitert, genauer die Funktion mi18n(). Diese Funktion bekommt den zu übersetzenden Schlüssel und liest den Wert aus der Übersetzung des aktuellen Moduls. Wenn man nun die Funktion um einen zweiten Parameter erweitert, also die ID des Moduls, von der es die Übersetzung lesen soll, so kann man ein Modul für globale Übersetzungen anlegen, diese im Backend editieren und von verschiedenen Stellen aus, auf die Übersetzungen zugreifen.

Sowohl gettext, als auch Modulübersetzungen arbeiten mit Dateien, was du aber nicht willst. Alternativ kannst du da was mit der Datenbank machen, allerdings ist mir dafür kein fertige Lösung bekannt, kann mir aber vorstellen, dass manche das schon gemacht haben.

Gruß
xmurrix
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

Faar
Beiträge: 1720
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Globale Übersetzungen?

Beitrag von Faar » Fr 8. Mär 2019, 09:44

Ich halte das für einen Irrweg, weil es hier bei mi18n() nicht nur um reine Sprachübersetzung geht.
Warum?
Das sieht man deutlich bei den Modulen ab Version 4.9, wo inzwischen z.B. LABEL_TEXT in mi18n() steht, statt z.B. HTML-Textmodul 1.
Gerade auch bei Modulen gibt es oft eine Interpretation dessen, was als Text dann erscheinen soll.

Würde man also alles was im Programm mit LABEL_TEXT bezeichnet wird, zusammenfassend übersetzen, gäbe es für jedes Modul das diesen Text im Programmcode benützt, auch die gleiche Übersetzung.
Das führt insbesondere auch in verschiedensten Sprachen ins Abseits, weil man manche Dinge nicht gleich übersetzen kann. Oft gibt es auch Umschreibungen.
Beispiel: Jeder kennt sicher das Siemens Fachbuch für technisches Englisch. Das ist ein dicker Wälzer, der extra dafür gemacht wurde, um die Technik korrekt ins Englische zu übersetzen.
Als ich noch für Siemens arbeitete, kam die Frage auf, wie man ein Untergestell für einen PC nennt, der dann in eine große Maschine eingebaut wird?
Also, der Computer steht also auf dem Gestell aus Blechbiegeteil im Maschinengehäuse.
Wie nennt man das so, dass Nichtdeutsche verstehen was es ist?

Und plötzlich stellt man fest, es gäbe vielleicht 100 Wörter oder Begriffe, die aus deutscher Sicht auch irgendwie passen würden.
Fragt man dann einen irisch-stämmigen Kollegen, gibts nur Schulterzucken, weil man in der Umgangssprache selten mit Gestellen für Minitower-PC innerhalb einer Maschine zu tun hat.
Aha...

Und nun zurück zur Idee, man könnte Übersetzungen Global machen.
Nehmt mal Chinesisch oder Thailändisch und übersetzt in die Sprachen, ohne zu wissen, um was es geht.
Ich kann euch sagen, selbst in Litauisch geht es oft schon nicht mehr, ohne den Zusammenhang.
Denn Worte ergeben oft keinen Sinn, ohne zu wissen, worum es sich handelt.

Und da sind wir auch schon bei der Idee von 4fb, alles kurz zu fassen und mit LABEL_xxx oder sonstige nichtssagende Begriffe zu beschreiben.
Nein, das ist auch keine gute Idee, auch wenn ich den Gedanken dahinter verstehe.
Aber oft muss ich in den Programmcode schauen, was da gemeint ist, was ich in Deutsch oder Englisch übersetzen muss, um zu wissen, wie der Text im Kontext lauten soll.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 2982
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Globale Übersetzungen?

Beitrag von xmurrix » Fr 8. Mär 2019, 10:14

Hallo faar,

hierbei geht es ja nicht um eine vollständige Internationalisierung von Texten in CONTENIDO, mit allem was dazu gehört, sondern um die Möglichkeit, die Anforderung von bodil, wenn möglich, ohne viel Umbau und ohne Verlust der Abwärtskompatibilität zu realisieren.

Wie haben in CONTENIDO die Funktion i18n(), mit der Übersetzungen global verfügbar sind. Der erste Parameter ist der Übersetzungsstring, der zweite Parameter die Domain (z. B. Plugin). Die Funktion mi18n() ist für Module gedacht und lädt die Übersetzung aus dem aktuellen Modul, in dem es verwendet wird. Wenn wir hier diese Funktion um einen zweiten Parameter erweitern, also um die Id des Moduls oder um den Alias, dann wäre die Funktion in der Lage, eine beliebige Modulübersetzung zu holen. Obendrein wäre sie dann sehr ähnlich wie die Funktion i18n().

Was den Schlüssel der Übersetzungen in Modulen angeht, so gibt es da verschiedene Meinungen. Verwendet man einen technischen Schlüssel „LABEL_XY“, kann man auf anhieb nicht erkennen, was für ein Text sich dahinter verbirgt. Verwendet man z. B. den richtigen Text, z. B. „Ok“, dann weiß man sofort, was das bedeutet. Aber was, wenn der Kunde sagt, ich will, dass Buttons nicht „Ok“ lauten, sondern „Bestätigen“. Soll man dann überall den Schlüssel „Ok“ belassen, was irreführend ist, oder überall suchen und ersetzen?

Es gibt da keine beste Lösung und die Lösung, die wir in CONTENIDO haben reicht für viele Zwecke aus. Man kann auch mit dem, was man hat, einiges erreichen, wenn man weiß wie man das anstellt.

Gruß
xmurrix
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

Faar
Beiträge: 1720
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Globale Übersetzungen?

Beitrag von Faar » Fr 8. Mär 2019, 11:16

xmurrix hat geschrieben:
Fr 8. Mär 2019, 10:14
dass Buttons nicht „Ok“ lauten, sondern „Bestätigen“.
"Ok-Button" ist erklärender für Unsereiner als Label_xyz. Man weiß, was gemeint ist und kann das immer noch in der Übersetzung anders benennen, aber man weiß, was gemeint ist, nämlich der Ok-Button.
Mit Label_xyz wüsste ich nicht, was genau da gemeint ist und müsste erst im Programmcode naschauen, um das richtig benennen zu können.

Nun aber gibt es die Möglichkeit, bei Contenido Nutzerrechte einzurichten, die einem Übersetzer genau nur die Modulübersetzung überlassen, aber nicht den Programmcode des Moduls.
Wie würde dieser Übersetzer nun herausfinden, was Label_xyz zu bedeuten hätte?
Darum meine ich, eine erklärende Betextung auch im Programmcode ist sinnvoll.
Man braucht ja nicht gleich den ausführlichen Text, aber ein Kurztext, der zumindest erklären ist, so wie "Ok-Button".
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

bodil
Beiträge: 232
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Globale Übersetzungen?

Beitrag von bodil » Fr 8. Mär 2019, 12:26

Hallo faar und xmurrix!
Vielen Dank für euer ausführliches Feedback!
Ich dachte, es gäbe vielleicht ein Mechanismus wie für die Funktion getEffectiveSetting(). Quasi: greif auf die Modul-Übersetzung zu, falls es die nicht gibt, greif auf die Übersetzung zurück, die irgendwo global festgelegt wurde.
Hier habe ich das Problem nun tatsächlich mit den Mandanteneinstellungen gelöst:

Code: Alles auswählen

	private function i18n($str) {
		return getEffectiveSetting('i18n', $str, $str);
	}
Meine Übersetzungen trage ich in der passenden Sprache mit dem Typ i18n ein. Eigentlich der falsche Platz, jetzt aber wohl die beste Lösung.
Was ich mir gut vorstellen könnte, ist, dass man unter Content --> Übersetzungen auch solche globalen Übersetzungen pflegen kann, die quasi als Fallback für fehlende Modulübersetzungen dienen können, und auch außerhalb von Modulen über eine Funktion zu erreichen sind.
(Formuliere ich vielleicht mal für die Rubrik Wünsche und Anregungen.)
Vielen Dank und lieben Gruß aus dem hohen Norden!
Bodil

Antworten