Automatische Übersetzung von SharePoint-Seiten mit SYSTRAN
Einleitung
Alle international agierenden Unternehmen haben dieselbe Herausforderung, was die interne Kommunikation betrifft: sie muss mehrsprachig stattfinden, damit alle Mitarbeitenden bestmöglich erreicht werden. Viele international agierenden Unternehmen verwenden SharePoint Online als Plattform für das Intranet und damit für die interne Kommunikation. Alles kein Problem, denn SharePoint unterstützt Mehrsprachigkeit [1]. Die Herausforderung besteht darin, die Originalinhalte, die häufig in Englischer Sprache vorliegen, in die anderen, benötigten Sprachen zu übersetzen.
In diesem Blogpost beschreibe ich, wie ich dieses Problem in einem aktuellen Kundenprojekt angegangen bin und eine ziemlich elegante Lösung mit Hilfe von SYSTRAN translate Server [2] implementiert habe.
Warum reine maschinelle Übersetzungen nicht ausreichen
Im von Microsoft für mehrsprachige SharePoint-Seiten vorgesehenen Prozess werden ausgewählte oder alle verfügbaren Seitenübersetzungen angelegt, mit dem Inhalt der Originalseite befüllt und ggf. zuvor hinterlegte Kontakte für die jeweilige Sprache über die neu erstellten Seitenübersetzungen benachrichtigt. Die so informierten Übersetzer können die Seite dann quasi Satz für Satz oder Abschnitt für Abschnitt in die jeweilige Sprache übersetzen. Je nach individueller Übereinkunft veröffentlicht dann der Hauptverantwortliche für die Originalseite alle Inhalte oder der jeweilige Übersetzer veröffentlicht seinen zuvor übersetzten Inhalt. Der Prozess ist also nicht vollständig in SharePoint implementiert und wartet mit diversen Schwächen auf. So ist es beispielsweise gar nicht so einfach, wirklich alle Inhalte einer SharePoint-Seite zu übersetzen, ohne die Originalvorlage zu verlieren. Unter Umständen muss man zwischen zwei Browserfenstern hin- und her wechseln, um Original und Übersetzung zu vergleichen. Außerdem benötigt der Übersetzer neben seinen fachlichen Kenntnissen und Kenntnisse über die „Sprache des Unternehmens“ auch noch detaillierte technische Kenntnisse über SharePoint, um wirklich alle Webparts mit allen Details zu übersetzen.
Anforderungen des Kunden an automatische Seitenübersetzungen in SharePoint
Der Kunde hat bereits jahrelange Erfahrung mit mehrsprachiger, interner Kommunikation auf diversen Plattformen. Im Laufe der Jahre hat sich der Kunde ein eigenes spezialisiertes Vokabular angelegt. Außerdem wird im Unternehmen natürlich eine eigene, interne Terminologie verwendet. Beides soll eine automatische Seitenübersetzung für die jeweilige Sprache berücksichtigen. Darüber hinaus bestanden weitere fachliche Anforderungen, z. B. die informelle Anrede bei Übersetzungen in die Deutsche Sprache (also „Wie geht es dir?“ anstatt „Wie geht es Ihnen?“).
Die technischen Anforderungen bestanden in der Verwendung der schon vorhandenen On-Promise Lösung SYSTRAN translate Server, der vollständig automatischen Erstellung von SharePoint Seitenübersetzungen inkl. Hinweis auf automatisch übersetzte Inhalte mit Link zum Original. Selbstverständlich sollte der automatisierte Übersetzungsprozess alle verfügbaren Webparts übersetzen können, inklusive aller Optionen (Bildunterschriften, alternative Bildbeschreibungen, Labels, usw.). Weitere technische Aspekte sind das automatische Teilen mit zuvor hinterlegten Revisoren, so dass diese den mit ihnen geteilten Inhalt überprüfen und ggf. korrigieren können. Außerdem sollte es die Möglichkeit geben, alle automatisch erstellten Seitenübersetzungen mit 1 Klick zu veröffentlichen.
Lösungsansatz: Azure Function und PowerShell Module für die REST API
Die vorhandene Implementierung als Azure Function [3] wurde beibehalten und entsprechend den Anforderungen erweitert. Die bestehende Integration von Azure Translator in Foundry Tools [4] inklusive aller Helfer-Methoden wurde zugunsten der REST API des SYSTRAN translate Servers ersetzt. Die Anbindung wurde als PowerShell Modul implementiert, so dass die Lösung bequem bereitgestellt werden kann.
PowerShell Modul für SYSTRAN translate Server
Das PowerShell Modul systran bildet die API des Language Servers nach und verfügt damit über die Funktionen:
- Add-SystranProfile,
- Get-SystranProfileId,
- Remove-SystranProfile,
- Add-SystranDictionary,
- Get-SystranDictionaryId,
- Remove-SystranDictionary,
- Add-SystranDictionaryEntry,
- Update-SystranDictionaryEntry,
- Get-SystranDictionaryEntries,
- Remove-SystranDictionaryEntry,
- Add-SystranTranslationMemory,
- Get-SystranTranslationMemoryId,
- Remove-SystranTranslationMemory,
- Add-SystranTranslationMemoryEntry,
- Update-SystranTranslationMemoryEntry,
- Get-SystranTranslationMemoryEntries,
- Remove-SystranTranslationMemoryEntry,
- Get-SystranTranslation
Zusätzlich verfügt das Modul über interne Funktionen, die Probleme mit den Endpunkten des Language Servers behandeln. So gibt es z. B. die Funktion Test-IsJsonContentType, mit deren Hilfe sich überprüfen lässt, ob der Endpunkt tatsächlich wie angefordert Daten im Format JSON zurück geliefert hat. Meiner Beobachtung zufolge tendieren manche Endpunkte dazu, im Fehlerfall mit HTML zu antworten.
Eine weitere Helfer-Funktion ist Invoke-SystranRequestWithRetry, die sich um Netzwerk-Aussetzer bzw. Drosselung kümmert. Meine Beobachtungen haben nämlich ergeben, dass es – zumindest im aktuellen Szenario beim Kunden – häufig zu Aussetzern kommt (socket hang up). Die Funktion begegnet diesen Blockaden durch eine intelligente Strategie, um dem Language Server doch noch Daten zu entlocken.
Übersetzungs-Ressourcen und Profile
Der SYSTRAN translate Server verwaltet Dictionaries und Translation Memories (sog. Corpora) intern als Übersetzungs-Ressourcen. Solche Ressourcen werden Profilen zugewiesen. Damit lassen sich beispielsweise zwei Profile für die Übersetzung vom Englischen ins Deutsche erzeugen. Das erste Profil verwendet ein generisches Dictionary. Das zweite Profil dient für spezialisierte Übersetzungen und verwendet neben dem generischen Dictionary zusätzlich ein Dictionary mit Fachbegriffen. Für meinen Anwendungsfall wurden 8 Haupt-Sprachen definiert, für die ich entsprechende Profile (jeweils mit Dictionaries und Translation Memories) angelegt habe. SYSTRAN translate Server selbst hat weitere Profile, also auch für andere Sprachen als die zuvor erwähnten Haupt-Sprachen.
Azure Function synchronisiert Dictionaries und Translation Memories
Wie oben beschrieben verfügt der Kunde bereits über ein umfangreiches Vokabular, das die 8 Haupt-Sprachen abdeckt. Dieses liegt bereits in Form einer mehrspaltigen SharePoint Liste vor. Mit Hilfe der neuen Azure Function syncterms werden die Begriffe der Liste in die entsprechenden Dictionaries und Translation Memories des Language Servers überführt.
Beispiel
|
en-us |
de-de |
Part of Speech |
|
Colleagues |
Kolleginnen und Kollegen |
Noun |
Die Funktion syncterms ermittelt anhand der Quell- und Ziel-Sprache das zugehörige Dictionary mit der Funktion Get-SystranDictionaryId des PowerShell Moduls systran.psm1. Danach fügt sie den Begriff mit der Funktion Add-SystranDictionaryEntry zum Dictionary hinzu oder aktualisiert ihn mit der Funktion Update-SystranDictionaryEntry.
{
"confidence": "17",
"pos": " noun",
"status": "ok",
"type": "translation",
"sourceId": "xxx",
"targetId": "xxx",
"targetPos": " noun",
"source": "Colleagues",
"target": " Kolleginnen und Kollegen"
}
Übersetzung von SharePoint-Seiten mittels HTML
Die REST-Schnittstelle des SYSTRAN translate Servers als On-Premise Lösung akzeptiert eine enorm große Payload im Vergleich zum Azure Translator. Dort musste der Inhalt einer SharePoint-Seite zuerst in kleine „Häppchen“ aufgeteilt werden und konnte dann erst zur Übersetzung geschickt werden. Das vorherige Aufteilen und das anschließende Wiederzusammensetzen ist eine komplexe Aufgabe, die mit der Einführung des SYSTRAN translate Servers glücklicherweise entfällt. Die Funktion Get-SystranTranslation des PowerShell Moduls systran.psm1 erwartet HTML-Inhalt als Eingangsparameter für die Übrsetzung. Auch wenn es vielleicht nicht Microsofts Empfehlung entspricht, ich nehme dafür CanvasContent1 [5], also das interne Feld (Spalte) der Site Pages-Bibliothek, das den eigentlichen Inhalt einer modernen SharePoint-Seite speichert. Bevor der Inhalt zum Translate Server geschickt werden kann, muss der JSON-Anteil bearbeitet und geschützt werden. Ich habe in meiner Lösung entsprechende Funktionen implementiert, die das JSON extrahieren, relevante Inhalte übersetzen (z. B. ‚properties.title‘, ‚properties.overlayText‘, ‚properties.kicker‘, ‚serverProcessedContent.searchablePlainTexts‘, ‚properties.content‘, ‚properties.description‘, ‚properties.htmlTitle’) und anschließend die kodierte JSON-Payload davor schützen, übersetzt zu werden. Die gerade erwähnte Übersetzungsfunktion erwartet eine Liste an HTML-Inhalten als Eingangsparameter. Das bedeutet, bei einem Übersetzungsvorgang wird nicht nur der komplette sichtbare Seiteninhalt übersetzt, sondern zusätzlich auch der Seitentitel, die Seitenbeschreibung und weitere auf der Seite befindliche Begriffe. Der Vorteil dabei, die Übersetzung der einzelnen Elemente findet immer im selben Kontext statt. Das sorgt für ein einheitliches und dadurch besseres Übersetzungsergebnis.
Bei jeder automatisch übersetzten Seite wird am oberen Seitenrand ein Text-Webpart mit einem Disclaimer-Text in der jeweiligen Sprache hinzugefügt. Darin erfährt der Leser, dass die Seite automatisch übersetzt wurde. Ein zusätzlicher Link führt zur Originalseite.
1-Klick Veröffentlichung mehrerer SharePoint-Seiten
Als letzten Punkt meiner ToDo-Liste habe ich eine weitere Azure Function implementiert, mit deren Hilfe mehrere SharePoint-Seiten, genauer gesagt, alle Entwürfe, die zu einer Originalseite gehören, mit einem Klick veröffentlicht werden können. Wie bei der oben vorgestellten Übersetzungsfunktion wird auch bei der Veröffentlichungsfunktion immer beim Original gestartet. Wird die Funktion angeklickt, ermittelt sie die ID der Seite. Mit dieser ID werden alle weiteren, unveröffentlichten Seitenentwürfe ermittelt (identische SPTranslationSourceItemId) und veröffentlicht.
Fazit der automatischen Übersetzung mit SYSTRAN translate Server
Durch die Integration des SYSTRAN translate Servers konnte ich eine Lösung entwickeln, die weit über eine reine Maschinenübersetzung hinausgeht. Dictionaries, Translation Memories und sprachspezifische Profile sorgen dafür, dass bestehendes Wissen des Unternehmens aktiv in den Übersetzungsprozess einfließt. Dadurch entstehen konsistentere Ergebnisse und gleichzeitig reduziert sich der Aufwand für die fachliche Nachbearbeitung erheblich.
Die technische Umsetzung mit der Retry-Funktion sorgt dafür, dass die Erstellung von Übersetzungen hin und wieder länger dauert, aber dafür zuverlässig stattfindet.
Ein Vergleich der Seitenaufrufe von Seiten, die nicht übersetzt wurden, mit Seiten die automatisch übersetzt wurden, zeigt eine gewisse Zunahme der Seitenaufrufe. Das bestätigt die Vermutung des Kunden, dass Sprache der Schlüssel ist, um Mitarbeitende zu erreichen.
Wie können automatisch übersetzte SharePoint-Seiten noch besser werden?
Auf der Wunschliste stehen noch zwei große Themen, um automatisch erstellte Übersetzungen von SharePoint-Seiten wirklich annähend perfekt zu machen:
- Übersetzung von eingebetteten oder verlinkten Dateien
- „Übersetzung“ von Bildern
Das Übersetzen von Dateien bestimmten Formats ist mit dem SYSTRAN translate Server kein Problem. Erste Tests mit den typischen M365 Office-Dateiformaten waren recht erfolgreich. Es kommen dieselben Übersetzungs-Ressourcen zum Einsatz, die auch bei der Übersetzung von SharePoint-Seiten verwendet werden. Eine kleine Herausforderung bleibt die Verwaltung der übersetzten Dateien, also das Hochladen an die richtige Stelle, und das Austauschen des Links in der SharePoint-Seite.
Obwohl es nicht den Empfehlungen entspricht, werden häufig Informationen in Bilder gepackt, beispielsweise ein Zitat einer Person samt Profilbild der Person. Bei einer automatisch erstellten Übersetzung bleibt das Zitat-Bild unübersetzt. SYSTRAN translate Server verfügt über eine OCR-Funktion und kann den Text im Bild erkennen (und dann natürlich auch übersetzen), aber es kann das Bild mit dem übersetzten Text nicht neu generieren. Meine ersten Überlegungen gehen in Richtung KI-Generierung eines neuen Bilds auf Basis des Originalbilds. Das wäre dann eine Funktion außerhalb des SYSTRAN translate Servers.