Verbesserung
Top-Thema
Wichtig
Kleinigkeit
Wichtig
Es soll ein Service entstehen, der für einen String in einer Sprache den entsprechenden String in einer andere Sprache liefert, sofern die dafür genutzte externe Übersetzungs-API die Sprachen unterstützt:
- Es soll eine Implementierung für die Einbindung von DeepL geben.
- Da pro übersetztem Zeichen Kosten anfallen:
- werden sie vom Service gezählt und beschränkt,
- wird der API-Schlüssel nicht mitgeliefert,
- ist der Service standardmäßig ausgeschaltet.
Zusätzlich zum Service entstehen:
- (eine) Debug Configuration zum Übersetzen einer gegebenen *.properties-Datei
- (ein) Ant-Task zum Übersetzen aller *.properties-Dateien (vorerst, im Ordner src/META-INF)
Im Falle eines Abbruchs mitten in der Datei, sichern beide Mechanismen die bereits übersetzten Zeilen.
Konfiguration
Einschalten des Service in der *.config.xml der Anwendung: {{{#!xml <config service-class="com.top_logic.basic.module.ModuleSystem"> <instance>
<modules>
<module key="com.top_logic.basic.translation.TranslationService$Module" value="true" />
</modules>
</instance> </config> }}}
Konfiguration der Anbindung (hier im Beispiel von DeepL): {{{#!xml <config service-class="com.top_logic.basic.translation.TranslationService"> <instance class="com.top_logic.basic.translation.DeepLTranslationService"
api-host="https://api.deepl.com/v2/translate"
api-key="%TRANSLATION_API_KEY%"
max-accumulated-translation-size="2500"
max-request-size="30k"
split-sentences="nonewlines"
tag-handling="xml"
/> </config> }}} Siehe auch tl:DeepLTranslationService
Man beachte zu den einzelnen Parametern folgendes:
- api-key: Intern hat die Konfiguration Zugriff auf den Alias %TRANSLATION_API_KEY%, sodass man nichts ändern muss. Für die Anwendung muss ein API-Schlüssel von DeepL beschafft und *verschlüsselt* in dem Alias in der Anwendungskonfiguration hinterlegt werden:
{{{#!xml <alias> <entry name="%TRANSLATION_API_KEY%" value="..." /> </alias> }}}
- max-accumulated-translation-size ist die obere Schranke an übersetzbaren Zeichen. Der Zähler wird beim Anwendungsstart auf 0 gesetzt und wird ab dann jede Nacht zurückgesetzt.
API
Man rufe eine der translate-Methoden auf {{{#!java TranslationService.getInstance().translate(...); }}} Vgl. tl:TranslationService
Test
Der Testfall TestDeepLTranslationService überprüft die internen Funktionen des Services, die für das Parsen der von der API zurückgegebenen JSON-Strings zuständig sind. Von Tests der Übersetzung selbst wurde abgesehen, um nicht bei jedem Testdurchlauf Kosten zu verursachen.