Closed innosmith closed 1 year ago
Aufwandschätzung:
Aufwandschätzung: 2 - 3 PT, hauptsächlich wegen Anbindung eines bisher noch unbekannten Drittsystems.
Achtung: Es kann pro decidim-Instanz nur ein Übersetzungs-Service konfiguriert werden, der dann pro Tenant ein- oder ausgeschaltet werden kann. Also wenn meinquartier.zuerich Deepl einbauen will, dann kann mitwirken.stadt-zuerich.ch nur dieselbe Deepl-Anbindung nutzen oder gar keine. Für unterschiedliche API-Keys (für separate Abrechnung der Kosten bei Deepl) oder gar unterschiedliche Übersetzungs-Services müssten wir extra Aufwand betreiben. Ich berechne hier mal nur den Aufwand für separate API-Keys pro Tenant mit ein.
Anmerkung: Die bestehenden Texte auf der Plattform werden mit dieser Anbindung nicht automatisch im Hintergrund übersetzt. Nur beim Speichern eines Inhalts wird der Übersetzungs-Mechanismus angekickt. Gemäss Anthony könnte man auch von Hand durchgehen und alle Inhalte einmal speichern. Es könnte aber sein dass einzelne Inhalte (z.B. Vorschläge in einer Vorschlags-Komponente) nicht einfach so editierbar / neu speicherbar sind.
Zur Info: Die verlinkte Dokuseite ist nicht mehr verfügbar, und ich finde sie auch nicht in der Navigation... der Text kann hier nachgelesen werden, aber sind wir sicher dass das nicht demnächst aus Decidim ausgelagert wird?
Die machine translation wurde in https://github.com/decidim/decidim/pull/6127 zu Decidim hinzugefügt.
Tech spec:
Danke für die Aufwandschätzung! Bitte mit diesem starten, nachdem #246 durchgeführt wurde.
Okay, dann haben wir leider kein 1:1 Beispiel mehr wie man das umsetzen kann. Es könnte dadurch um bis zu 1PT aufwändiger werden. Ich hoffe nicht, aber es kommt halt mehr Unsicherheit dazu, wobei ja schon in der ursprünglichen Aufwandschätzung eine gewisse Unsicherheit drin war. Ausserdem gilt, wie oben beschrieben, die Wahl des Übersetzungs-Services für alle Tenants auf einer Plattform. Das heisst MeinQuartier und die Mitwirken-Plattform müssen sich geschlossen für Microsoft Translator entscheiden, sonst gibts nochmals mehr Aufwand das tenantspezifisch umzusetzen.
Ich schaue noch, ob ich ein 1:1 Beispiel finde. Für uns ist es ok, dass beide Tenants denselben Dienst verwenden.
To-Do Lars: API Keys generieren/organisieren
Keys wurden an Carlo übergeben.
Aktueller Stand: Ich habe den Code in erster Version soweit ready. Zuerst wollte ich mit https://github.com/ikayzo/microsoft_translator arbeiten, aber das verwendet wies aussieht eine veraltete API. Stattdessen machen wirs jetzt mit direkten HTTP Requests, ähnlich wie bei ASPSMS. Ein von Hand gemachter curl-Request mit dem secret key 1 und der Container-Domain war erfolgreich. Was ich noch nicht hingekriegt habe, ist dass Decidim eigentlich im System Dashboard pro Tenant die Option anbieten müsste, Machine Translations zu aktivieren. Ich habe eine entsprechende Einstellung im Code gemacht, aber irgendwie werden bei mir die zusätzlichen Settings im Systems Dashboard nicht angezeigt. So oder so müssen wir das aber erst mal auf die Testumgebung deployen, um es zu testen, weil die Machine Translations stark auf Hintergrundjobs basieren, und ich bei mir lokal im Setup zur Zeit keine Hintergrundjobs laufen lassen kann (hatte noch nie Zeit das zu debuggen).
Ich würde vorschlagen dass @Kagemaru mal den Stand vom Branch ms-translator auf die Testumgebung einspielt und dann schauen wir von da aus weiter. Vielleicht funktioniert dann auch die Tenant-Einstellung, falls irgendwas an meinem lokalen Setup falsch ist. Die Keys und den API Endpoint welche als neue Env Variabeln eingerichtet werden müssen habe ich im Cryptopus abgelegt.
@carlobeltrame super, danke! Mit diesem API gehts nicht, das ist wohl das aktuelle: https://github.com/MicrosoftTranslator/Text-Translation-API-V3-Ruby
Dann assigne ich jetzt @Kagemaru
Beim Deployen ist die WAF in ein Problem gelaufen, das ich nicht lösen kann, nur @Kagemaru.
Dafür bin ich beim Einschalten des Features noch weitergekommen: Es ist nicht im System Dashboard sondern im normalen Admin Dashboard bei den Einstellungen wo man einen Haken setzen können sollte. Sobald die WAF wieder läuft müsste das auf INT testbar sein.
Ok, cool! Im Moment sehe ich die Änderungen im Backend und den Hinweis im Frontend, aber es wird noch nichts übersetzt.
Ah, my bad, ich hatte noch vergessen die Credentials komplett bis in den Hintergrundjob durchzureichen. Kannst du es jetzt nochmals probieren? Ich weiss leider selber nicht, wie das Feature aus User-Sicht funktioniert.
Könnte ich, aber die INT ist gerade offline :)
Hmm @carlobeltrame ich habe jetzt versucht, etwas user-generated content zu erzeugen, konnte aber noch keine Übersetzung irgendwo bewirken. Irgendwas scheint da noch nicht zu laufen.
Merci, ich schaue dann nochmals inunser Fehlerprotokoll rein. Sorry, wie gesagt kann ich das nicht wirklich auf meinem Computer testen, weil die Hintergrundjobs dort nicht funktionieren.
Kein Problem! Ich habe noch in die Microsoft-Account Settings geblickt. Es wurden noch keine Begriffe durch den translator übersetzt, d.h. der Fehler liegt bereits irgendwo davor.
Gibt es etwas, wobei ich dich unterstützen könnte?
So, ich habe nochmals ein paar Dinge ausgemerzt. Kannst du nochmals testen?
Das scheint zu klappen (Beispiel hier: Original auf DE, Übersetzung auf EN), juhui danke! Ich teste dann morgen noch ausführlicher. Was mir noch auffällt: Der Banner, dass Inhalte automatisch übersetzt werden, erscheint immer, auch dann, wenn nichts übersetzt wurde (z.B. in der Ursprungssprache). Könnten wir es so haben, dass dieses Banner nur dann angezeigt wird, wenn auf der Seite etwas automatisch übersetzt wurde?
Dazu ist nichts dokumentiert, und ich bin auch nicht sicher ob Decidim sich das überhaupt irgendwie merkt... Kann aber mal im Code graben wenn du das möchtest.
Ich habe auf INT MeinQuartier ein paar Tests gemacht, bislang aber noch keine Texte übersetzt bekommen. In den Einstellungen ist die entsprechende Option "Enable machine translations" aktiviert. Any ideas?
@larsUE ich habe glaube ich eine Lösung gefunden, und schalte diese mal auf Integration auf. Das Banner müsste dann nur noch angezeigt werden, wenn für ein Feld des angezeigten Objekts (z.B. das Feld "Titel" eines Vorschlags-Objekts) in der Datenbank irgendwelche Machine Translations vorhanden sind. Es wird aber aktuell noch nicht berücksichtigt, ob etwas in die aktuelle Sprache übersetzt wurde. Wenn der Originaltext deutsch ist und auf englisch übersetzt wurde, wird das Banner momentan also noch angezeigt, egal ob ich die Seite auf englisch oder deutsch betrachte. Wir können das noch verfeinern wenn ihr wollt, aber ich wollte mal den ersten Stand aufschalten und ausprobieren. EDIT: Das funktioniert noch nicht korrekt, jetzt wird das Banner gar nicht mehr angezeigt. Ich rolle das mal zurück.
@innosmith es werden keine Inhalte rückwirkend übersetzt. Siehe meine Anmerkung in obigem Kommentar:
Anmerkung: Die bestehenden Texte auf der Plattform werden mit dieser Anbindung nicht automatisch im Hintergrund übersetzt. Nur beim Speichern eines Inhalts wird der Übersetzungs-Mechanismus angekickt. Gemäss Anthony könnte man auch von Hand durchgehen und alle Inhalte einmal speichern. Es könnte aber sein dass einzelne Inhalte (z.B. Vorschläge in einer Vorschlags-Komponente) nicht einfach so editierbar / neu speicherbar sind.
Ich habe aber einen neuen Vorschlag erstellt, und dieser wurde übersetzt: https://test.meinquartier.zuerich/assemblies/testmqz/f/281/proposals/280?&locale=en&toggle_translations=true
Nach einigem Herumprobieren habe ich herausgefunden, was nicht funktioniert: Während Decidim das Banner anzeigt, hat es selber keinen Überblick, welche Proposals und anderen Dinge auf der Seite angezeigt werden. Um zu entscheiden, ob das Banner angezeigt werden soll, habe ich nur die Einstellung auf dem Tenant zu Verfügung. Der Tenant heisst an dieser Stelle verwirrenderweise model
, was normalerweise ein allgemeiner Begriff für sämtliche Objekte in der Datenbank ist. In diesem Fall ist model
aber immer der Tenant. Somit kann ich nicht einfach anhand des aktuell angezeigten Objekts entscheiden, ob gerade Machine Translations auf der Seite erscheinen oder nicht.
Es ist auch nicht immer nur ein Objekt relevant für diese Entscheidung: Auf Listen von Proposals z.B. können einige der Proposals Machine Translations haben, andere nicht. Eine verallgemeinerte Möglichkeit, alle angezeigten Datenbankobjekte auf der aktuellen Seite aufzulisten, gibt es meines Wissens nicht. Und ich kann daher nicht einmal entscheiden ob keine Objekte mit Machine Translations auf der Seite sind. Das erklärt auch, warum Decidim das nicht schon von Haus aus besser macht.
Ich sehe also leider keine Möglichkeit mehr, das Banner je nach Inhalt anzuzeigen oder nicht. Jedenfalls keine Möglichkeit, welche wenig von Decidim überschreiben müsste und bei Decidim-Updates nicht jedes Mal von Grund auf neu durchdacht werden müsste.
Wie wäre es, nicht mit einem Banner zu arbeiten, sondern im Text selber beim Übersetzen einen textuellen Hinweis (z.B. "automatically translated") am Ende des Textes zu speichern/anzuzeigen?
Das wäre möglich, aber es würde dann auch in kürzeren übersetzten Texten wie Vorschlagstiteln etc. greifen, nicht nur einmal pro Seite.
Danke für die Abklärung @carlobeltrame . @bsantschi das wäre möglich für städtische Texte, wenn auch etwas aufwändig. Für User-generated content wäre das aber wohl nicht umsetzbar (z.B. bei Kommentaren)
Wäre es möglich, das Banner allgemein auf dem deutschen Sprachfile auszublenden (z.B. per CSS, obwohl ich keine sprachabhängige Klassen habe)? Dann wäre es immer da auf Englisch (aber die Chance ist sehr hoch, dass auch etwas automatisch übersetzt wurde, und immer weg auf Deutsch, wo es die user wohl eher verwirren würde.
So wie ich den Vorschlag von Bruno verstehe, würden wir diesen Hinweis automatisch hinzufügen. Der Translation Code den wir kontrollieren muss als Output ja die übersetzte Variante ausgeben. Der Vorschlag wäre, dass wir an dieser Stelle noch einen Hinweis àla " - dieser Text wurde automatisch übersetzt und könnte nicht zu 100% korrekt sein" an den maschinell übersetzten Text anhängen. Das wäre kein manueller Prozess durch euch oder die User.
Das Banner immer auszublenden wenn die ausgewählte UI-Sprache deutsch ist, geht aber auch, ja.
Ach so, das wäre natürlich cool! Mit Blick aufs Budget: was würden die beiden Varianten aufwandsmässig bedeuten?
Automatisch Hinweis anhängen, den ihr via Term Customizer anpassen könnt: 3h Bei UI-Sprache das Banner immer verstecken: 3h
Darin eingerechnet sind jetzt aber nur diese beschriebene Iteration des Features. Wenn ihr später z.B. herausfindet, dass es einen separaten automatischen Hinweis für kürzere oder einzeilige Texte braucht (z.B. für die Vorschlagstitel will man nur "automatisch übersetzt" anhängen, statt dem längeren Satz "dieser Text wurde automatisch übersetzt und könnte nicht zu 100% korrekt sein" der dafür bei Vorschlags-Beschreibungen mehr Kontext geben könnte), kommt das dann vom Aufwand her noch dazu.
Ich habe das implementiert und auf Integration ausgerollt. Translation Key ist decidim_zuerich.translator.notice
. Standard-Übersetzungen sind - automatically translated
bzw. - automatisch übersetzt
. Ein Leerzeichen plus dieser Text wird jetzt an alle maschinell übersetzten Texte angehängt.
Hoi Carlo. Irgendwie klappt das noch nicht. Ich habe neue Textfelder generiert, die auch richtig übersetzt werden. Der Hinweis sehe ich jedoch noch nicht. Beispiel: https://mitwirken.integ.stadt-zuerich.ch/processes/testlars
Doch doch, hat alles geklappt. Der deutsche Originaltext wurde nicht durch den Translator angefasst. Aber die maschinelle englische Übersetzung hat den Anhang "- automatically translated" bekommen: https://mitwirken.integ.stadt-zuerich.ch/processes/testlars?locale=en
Was noch nicht so schön ist, ist dass du (oder irgendwas automatisches) offenbar eine leere Zeile am Schluss angehängt hast, wodurch das "- automatically translated" relativ weit nach unten rutscht. Ich habe im Code bereits versucht, vorige Leerzeichen und Zeilenumbrüche zwischen Text und Hinweis zu entfernen, aber in diesem spezifischen Textfeld wird HTML gespeichert, und die Leerzeile besteht darum nicht aus Whitespace, sondern aus <p><br></p>
, was ich nicht einfach so mit Bordmitteln wegkürzen kann.
Hmm ja, das ist tatsächlich nicht so schön. Ich habe keinen Zeilenabstand eingefügt, das wird wohl an der Stelle zu Decidim dazugehören -> ev. kann ich das per CSS ansteuern :). Merkwürdig ist, dass das übersetzte Label im Stil des Folgetexts erscheint und nicht dem des eigentlichen Abschnitts. Zusätzlich ist mir noch aufgefallen, dass der Hinweis in der Sprache erscheint, in der ich als Admin die Plattform eingestellt habe, wenn ich den Text abschicke. Eigentlich müsste es sich doch an der Sprache der Übersetzung orientieren? Beispiel im Link oben: Der Text wurde auf Englisch übersetzt, die Hinweise erscheinen nun aber auf Deutsch
Merkwürdig ist, dass das übersetzte Label im Stil des Folgetexts erscheint und nicht dem des eigentlichen Abschnitts.
Das übersetzte Label ist einfach als einziger Teil des Textes nicht in <p>
Tags eingefasst, und das CSS-Styling des Textes bezieht sich nur auf <p>
Texte. Das könnte man aber mit CSS sicher hinkriegen.
Zusätzlich ist mir noch aufgefallen, dass der Hinweis in der Sprache erscheint, in der ich als Admin die Plattform eingestellt habe, wenn ich den Text abschicke. Eigentlich müsste es sich doch an der Sprache der Übersetzung orientieren? Beispiel im Link oben: Der Text wurde auf Englisch übersetzt, die Hinweise erscheinen nun aber auf Deutsch
Oh, guter Hinweis, danke. Ich habe das jetzt gefixt. Neue Texte müssten den Hinweis in der korrekten Sprache bekommen.
Das scheint noch nicht zu funktionieren. Vielleicht hat da das Update dazwischengefunkt? Siehe: https://mitwirken.integ.stadt-zuerich.ch/processes/testlars/f/393/surveys/93?locale=en
Wir haben nun das OK, die automatischen Übersetzungen in Betrieb zu nehmen. Die Hürden sind viel tiefer als erwartet und wir müssen auch nicht speziell auf automatisch übersetzte Beiträge hinweisen. Deshalb für die finale Umsetzung folgendes machen:
Ist auf Integration so umgesetzt.
Wunderbar, danke! Ist getestet und kann bei Gelegenheit auf die Prod.
Ist auf Produktion ausgerollt.
Wir hätten gerne eine Aufwandsschätzung, um für die beiden Zürcher Tenants Texteingaben automatisch nach DE/EN übersetzen zu lassen. Ev. zukünftig weitere Sprachen, wenn sich dieses Erweiterung bewährt.
Automatische Übersetzungen mittels API • https://docs.decidim.org/en/develop/machine_translations • https://meta.decidim.org/processes/roadmap/f/122/proposals/12306
Wichtiges • Bedingt vordefinierte Sprachen pro Tenant (DE/EN), welche dann zur Laufzeit übersetzt werden • Kann pro Org im Backend als Admin konfiguriert werden • Texte werden übersetzt, sobald kreiert (Google Translate im Browser übersetzt erst nach Aufruf einer Seite) • Deepl API als Bsp. https://www.deepl.com/de/pro-api?cta=header-pro-api/
Kostenpunkt (Annahmen) • Wenige Tage Entwicklung inkl. Testing basierend auf bestehender Implementation von jemand anderem, bspw. OpenSourcePolitics • Allenfalls laufende Kosten zur Nutzung des Übersetzungs-Service (siehe Bsp. Deepl)
Beispiele • https://futureu.europa.eu/ • https://www.participate.nyc.gov/ • https://meta.decidim.org/processes/roadmap/f/122/proposals/16402
Technische Links • https://github.com/OpenSourcePolitics/decidim-nyc (New York City) • https://github.com/search?q=org%3AOpenSourcePolitics+TranslatableResource&type=code
@larsUE bei Bedarf bitte ergänzen, ist so mit Werner abgesprochen. Vermutlich dann über die Mitwirkungsplattform umsetzen.