{"id":55000347,"date":"2023-02-01T00:00:00","date_gmt":"2023-03-02T20:58:40","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=347"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"COMAddIn_zum_Uebersetzen_von_WordDokumenten","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/COMAddIn_zum_Uebersetzen_von_WordDokumenten\/","title":{"rendered":"COM-Add-In zum &Uuml;bersetzen von Word-Dokumenten"},"content":{"rendered":"<p><b>Das Internet bietet f&uuml;r beinahe jeden Zweck einen Service. Auch f&uuml;r das &Uuml;bersetzen von Texten. Ein Anbieter hei&szlig;t DeepL. Er bietet nicht nur eine Benutzeroberfl&auml;che, in die man Texte eingeben kann, die direkt &uuml;bersetzt werden, sondern auch noch eine API. Dieser k&ouml;nnen wir programmgesteuert Texte &uuml;bergeben und die &Uuml;bersetzung entgegennehmen. Das ist sehr praktisch f&uuml;r diejenigen Bereiche der Programmierung, wo man Texte in einer anderen oder in mehreren Sprachen braucht. In diesem Artikel wollen wir uns jedoch ansehen, wie wir aus den Techniken, die wir in weiteren Artikeln vorgestellt haben, ein COM-Add-In bauen, das sich nahtlos in die Word-Benutzeroberfl&auml;che eingliedert und auf Knopfdruck komplette Dokumente oder auch nur markierte Bereiche in die gew&uuml;nschte Sprache &uuml;bersetzt.<\/b><\/p>\n<h2>&Uuml;bersetzen mit DeepL<\/h2>\n<p>Die Artikel, in denen wir auf die Grundlagen zu DeepL eingehen, findest Du unter  <b>Excel: &Uuml;bersetzungen mit DeepL <\/b>(<b>www.vbentwickler.de\/325<\/b>), <b>Texte &uuml;bersetzen mit DeepL <\/b>(<b>www.vbentwickler.de\/322<\/b>) und <b>&Uuml;bersetzen mit Word und DeepL <\/b>(<b>www.vbentwickler.de\/346<\/b>).<\/p>\n<p>Da DeepL seine API f&uuml;r bis zu 500.000 Zeichen pro Monat kostenlos anbietet, nutzen wir es gern als Beispiel f&uuml;r den Zugriff auf eine REST API. Wenn Du mehr als diese Anzahl Zeichen &uuml;bersetzen m&ouml;chtest, kannst Du den kostenpflichten Pro-Account nutzen. Beide schlie&szlig;t Du unter folgendem Link ab:<\/p>\n<pre>https:\/\/www.deepl.com\/de\/pro#developer<\/pre>\n<h2>twinBASIC<\/h2>\n<p>Auch das Tool, das wir zum Erstellen des COM-Add-Ins nutzen, ist zumindest in der Variante, die das Erstellen von 32-Bit-Dateien erlaubt, kostenlos. Du findest weitere Informationen dazu zum Beispiel in <b>twinBASIC: Visual Basic f&uuml;r die Zukunft <\/b>(<b>www.vbentwickler.de\/310<\/b>), <b>COM-Add-Ins mit twinBASIC <\/b>(<b>www.vbentwickler.de\/311<\/b>) und <b>Ribbon-Signaturen f&uuml;r VBA, VB6 und twinBASIC <\/b>(<b>www.vbentwickler.de\/314<\/b>).<\/p>\n<h2>Ziel des Artikels<\/h2>\n<p>Bevor wir in die Programmierung einsteigen, schauen wir uns den Plan an. Das Ziel ist es, dass wir per Mausklick auf einen Ribbon-Eintrag einen &Uuml;bersetzungsvorgang starten k&ouml;nnen. Dieser Vorgang soll entweder den aktuell markierten Text &uuml;bersetzen oder, wenn keine Markierung vorhanden ist, den Absatz &uuml;bersetzen, in dem sich aktuell die Einf&uuml;gemarke befindet.<\/p>\n<p>Neben dem Button f&uuml;r das eigentliche &Uuml;bersetzen ben&ouml;tigen wir nat&uuml;rlich noch eine M&ouml;glichkeit, die Original- und die Zielsprache festzulegen. Dies wollen wir ebenfalls im Ribbon erm&ouml;glichen, indem wir die verf&uuml;gbaren Sprachen dort zur Auswahl anbieten.<\/p>\n<h2>Anlegen eines twinBASIC-Projekts<\/h2>\n<p>F&uuml;r das COM-Add-In ben&ouml;tigen wir ein twinBASIC-Projekt, welches wir nach dem &Ouml;ffnen von twinBASIC auf Basis des Beispielprojekts <b>Sample 5. MyCOMAddIn <\/b>erstellen (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_347_001.png\" alt=\"Auswahl einer Vorlage\" width=\"424,6267\" height=\"413,212\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Auswahl einer Vorlage<\/span><\/b><\/p>\n<p>Wir schauen uns nicht im Detail an, welche &Auml;nderungen wir an dem bestehenden Code vornehmen, sondern beschreiben im Anschluss den neuen Code des COM-Add-Ins.<\/p>\n<h2>Hinzuf&uuml;gen ben&ouml;tigter Verweise<\/h2>\n<p>Wir wollen das Add-In nutzen, um auf das Objektmodell von Word zuzugreifen und die darin markierten Elemente auslesen, um diese zu &uuml;bersetzen.<\/p>\n<p>Damit wir dabei nicht mit Late Binding arbeiten m&uuml;ssen, f&uuml;gen wir einen Verweis auf die Bibliothek <b>Microsoft Word 16.0 Object Library <\/b>hinzu. Au&szlig;erdem brauchen wir noch einen Verweis auf die Bibliothek <b>Microsoft XML, v6.0<\/b>.<\/p>\n<p>Dieser liefert das Objekt <b>ServerXMLHTTP60<\/b>, das wir f&uuml;r den Zugriff auf die <b>DeepL<\/b>-REST-API ben&ouml;tigen.<\/p>\n<p>Diese Verweise f&uuml;gen wir in twinBASIC im Bereich <b>Settings <\/b>hinzu. Hier scrollen wir ein wenig nach unten und finden dort den Bereich <b>COM Type Library \/ ActiveX References<\/b>. In der unteren Liste namens <b>ALL AVAILABLE COM REFERENCES <\/b>k&ouml;nnen wir nach den Namen dieser beiden Bibliotheken suchen und sie durch Setzen eines Hakens zum Projekt hinzuf&uuml;gen (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_347_002.png\" alt=\"Hinzuf&uuml;gen von Verweisen\" width=\"474,6267\" height=\"466,3435\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Hinzuf&uuml;gen von Verweisen<\/span><\/b><\/p>\n<h2>Weitere Projekteinstellungen anpassen<\/h2>\n<p>Bevor wir die &Auml;nderungen nach dem Hinzuf&uuml;gen der Verweise speichern, was vor dem Kompilieren unbedingt notwendig ist, stellen wir gleich noch ein paar weitere Eigenschaften ein. Dabei handelt es sich um den Projektnamen, die Projektbeschreibung und den Anwendungstitel. Alle drei stellen wir im oberen Bereich unter Settings ein (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_347_003.png\" alt=\"&Auml;ndern weiterer Projekteigenschaften\" width=\"649,627\" height=\"326,3347\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: &Auml;ndern weiterer Projekteigenschaften<\/span><\/b><\/p>\n<p>Danach speichern wir das Projekt und geben als Namen beispielsweise <b>amvWordTranslator.twinproj<\/b> an.<\/p>\n<h2>Modul mit DeepL-Funktionen einf&uuml;gen<\/h2>\n<p>Bevor wir uns um die eigentliche Funktionalit&auml;t k&uuml;mmern, f&uuml;gen wir noch ein neues Modul hinzu. Dazu klicken wir mit der rechten Maustaste auf den Eintrag <b>Sources <\/b>im Projekt-Explorer und w&auml;hlen dort den Eintrag <b>Add|Add Module <\/b>aus (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_347_004.png\" alt=\"Hinzuf&uuml;gen eines neuen Moduls\" width=\"499,6267\" height=\"608,3175\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Hinzuf&uuml;gen eines neuen Moduls<\/span><\/b><\/p>\n<p>Das noch leere Modul nennen wir <b>mdlDeepL <\/b>und f&uuml;gen diesem den Code hinzu, den wir im Artikel <b>Texte &uuml;bersetzen mit DeepL <\/b>(<b>www.vbentwickler.de\/322<\/b>) entworfen haben.<\/p>\n<h2>Code zum Registrieren und De-Registrieren anpassen<\/h2>\n<p>Das Beispielprojekt enth&auml;lt normalerweise den Code, um das COM-Add-In f&uuml;r den Gebrauch in Excel und Access zu registrieren. Diesen m&uuml;ssen wir anpassen, denn wir wollen unser COM-Add-In in Word anzeigen. Dazu &ouml;ffnen wir das Modul <b>DLLRegistration<\/b>. Dieses passen wir nun an beziehungsweise gestalten es neu. Das Ergebnis kannst Du Listing 1 entnehmen.<\/p>\n<pre>Module DllRegistration\r\n     Const AddinProjectName<span style=\"color:blue;\"> As String<\/span> = VBA.Compilation.CurrentProjectName\r\n     Const AddinClassName<span style=\"color:blue;\"> As String<\/span> = \"amvWordTranslator\"\r\n     Const AddinQualifiedClassName<span style=\"color:blue;\"> As String<\/span> = AddinProjectName & \".\" & AddinClassName\r\n     Const RootRegistryFolder_WORD<span style=\"color:blue;\"> As String<\/span> = \"HKCU\\SOFTWARE\\Microsoft\\Office\\Word\\Addins\\\" & AddinQualifiedClassName & \"\\\"\r\n     \r\n     <span style=\"color:blue;\">Public <\/span>Function DllRegisterServer()<span style=\"color:blue;\"> As Boolean<\/span>\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> RegError\r\n         <span style=\"color:blue;\">Dim <\/span>wscript<span style=\"color:blue;\"> As Object<\/span> = CreateObject(\"wscript.shell\")\r\n         wscript.RegWrite RootRegistryFolder_WORD & \"FriendlyName\", AddinProjectName, \"REG_SZ\"\r\n         wscript.RegWrite RootRegistryFolder_WORD & \"Description\", AddinProjectName, \"REG_SZ\"\r\n         wscript.RegWrite RootRegistryFolder_WORD & \"LoadBehavior\", 3, \"REG_DWORD\"\r\n         Return <span style=\"color:blue;\">True<\/span>\r\n     RegError:\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"DllRegisterServer -- An error occured trying to write to the system registry:\" & <span style=\"color:blue;\">vbCrLf<\/span> & _\r\n                 Err.Description & \" (\" & Hex(Err.Number) & \")\"\r\n         Return <span style=\"color:blue;\">False<\/span>\r\n     End Function\r\n  \r\n     <span style=\"color:blue;\">Public <\/span>Function DllUnregisterServer()<span style=\"color:blue;\"> As Boolean<\/span>\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> RegError\r\n         <span style=\"color:blue;\">Dim <\/span>wscript<span style=\"color:blue;\"> As Object<\/span> = CreateObject(\"wscript.shell\")\r\n         wscript.RegDelete RootRegistryFolder_WORD & \"FriendlyName\"\r\n         wscript.RegDelete RootRegistryFolder_WORD & \"Description\"\r\n         wscript.RegDelete RootRegistryFolder_WORD & \"LoadBehavior\"\r\n         wscript.RegDelete RootRegistryFolder_WORD\r\n         Return <span style=\"color:blue;\">True<\/span>\r\n     RegError:\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"DllUnregisterServer -- An error occured trying to delete from the system registry:\" & <span style=\"color:blue;\">vbCrLf<\/span> & _\r\n                 Err.Description & \" (\" & Hex(Err.Number) & \")\"\r\n         Return <span style=\"color:blue;\">False<\/span>\r\n     End Function\r\nEnd Module<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Das Modul mit dem Code zum Registrieren und De-Registrieren des COM-Add-Ins<\/span><\/b><\/p>\n<p>Hier definieren wir zun&auml;chst einige Konstanten. Die erste enth&auml;lt den Projektnamen. Diesen lesen wir aus <b>VBA.Compilation.CurrentProjectName <\/b>aus, den wir zuvor in den Einstellungen des Projekts festgelegt haben.<\/p>\n<p>Den Klassennamen stellen wir auf amvWordTranslator ein. Diese Bezeichnung sollten wir gleich beim Gestalten des Hauptmoduls als Bezeichnung des Moduls als auch als Name der darin enthaltenen Klasse verwenden.<\/p>\n<p>Schlie&szlig;lich stellen wir in <b>AddinQualifiedClassName <\/b>noch die Kombination aus <b>AddinProjectName <\/b>und <b>AddinClassName <\/b>zusammen &#8211; getrennt durch einen Punkt. Diese Bezeichnung verwenden wir f&uuml;r den Eintrag in der Registry.<\/p>\n<p>Um die Eintr&auml;ge in der Registry an der richtigen Stelle anzulegen, erstellen wir in der Konstanten <b>RootRegistryFolder_WORD <\/b>den Pfad f&uuml;r den anzulegenden Basispfad.<\/p>\n<p>Dieser lautet in unserem Fall:<\/p>\n<pre>HKCU\\SOFTWARE\\Microsoft\\Office\\Word\\Addins\\amvWordTranslator.amvWordTranslator\\<\/pre>\n<p>Die folgende Prozedur <b>DllRegisterServer <\/b>f&uuml;hrt mithilfe des <b>Shell<\/b>-Objekts die notwendigen Eintragungen in der Registry durch. Dazu erstellt sie zuerst ein Objekt des Typs <b>wscript.shell <\/b>und ruft dann mehrfach dessen Methode <b>RegWrite <\/b>auf. Dieser &uuml;bergibt sie den Pfad, den Namen des Eintrags und den gew&uuml;nschten Wert sowie den Datentyp. Ist dies erfolgreich, liefert die Funktion den Wert <b>True <\/b>zur&uuml;ck, anderenfalls erscheint eine entsprechende Fehlermeldung.<\/p>\n<p>Der durch diese Funktion erstellte Eintrag in der Registry sieht beispielsweise wie in Bild 5  aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_347_005.png\" alt=\"Registry-Eintr&auml;ge f&uuml;r das COM-Add-In\" width=\"699,627\" height=\"413,3775\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Registry-Eintr&auml;ge f&uuml;r das COM-Add-In<\/span><\/b><\/p>\n<p>Die zweite Funktion namens <b>DllUnregisterServer <\/b>enth&auml;lt die Anweisungen, um die soeben vorgenommenen Eintr&auml;ge in die Registry wieder  zu entfernen. Sie nutzt das gleiche Objekt, aber diesmal die Methode <b>RegDelete<\/b>. Hier muss nur noch die Pfad zu den zu l&ouml;schenden Registry-Eintr&auml;gen angegeben werden.<\/p>\n<p>Diese beiden Funktionen kann man &uuml;brigens auch direkt von twinBASIC aus aufrufen &#8211; wenn also einmal nur ein Registry-Eintrag nicht korrekt ist, braucht man das Projekt nicht neu zu erstellen.<\/p>\n<p>Allerdings geht auch das Erstellen sehr schnell, sodass sich das separate Aufrufen der Funktionen in diesem Fall nicht lohnt. Lohnenswert ist dies allerdings, wenn man einmal das Schreiben oder L&ouml;schen der Registry-Werte debuggen m&ouml;chte.<\/p>\n<h2>Die Klasse amvWordTranslator<\/h2>\n<p>Damit kommen wir zur der Hauptklasse der Anwendung, welche die eigentliche Funktionalit&auml;t enth&auml;lt. Das beginnt mit den Ereignissen, die beim &Ouml;ffnen von Word ausgel&ouml;st werden und die dazu f&uuml;hren, dass das Add-In gestartet und das Ribbon der Anwendung in Word integriert wird. Au&szlig;erdem enth&auml;lt die Klasse die Methoden, die durch das Bet&auml;tigen der Ribbonelemente des COM-Add-Ins ausgel&ouml;st werden. Die Klasse enth&auml;lt wie alle COM-Add-Ins einen eindeutigen Bezeichner, der in eckigen Klammern im Kopf des Klassenmoduls angegeben wird:<\/p>\n<pre>[ ClassId (\"F333F038-C5F7-4AA3-8684-09A024EC892C\") ]<\/pre>\n<p>Direkt danach beginnt die Definition der Klasse und ihrer Elemente. Hier haben wir das <b>Class<\/b>-Schl&uuml;sselwort und zun&auml;chst zwei <b>Implements<\/b>-Anweisungen. Damit geben wir an, dass wir die Schnittstellen <b>IDExtensibility2 <\/b>und <b>IRibbonExtensibility <\/b>in dieser Klasse implementieren:<\/p>\n<pre><span style=\"color:blue;\">Class<\/span> amvWordTranslator\r\n     Implements IDTExtensibility2\r\n     [ WithDispatchForwarding ]\r\n     Implements IRibbonExtensibility<\/pre>\n<p>Das bedeutet f&uuml;r die aufrufende Anwendung, in diesem Fall <b>Word<\/b>, dass sie in dieser Klasse die Implementierungen der Methoden der angegebenen Schnittstellen findet und diese aufrufen soll. Im Falle von <b>IDTExtensibility <\/b>hei&szlig;t das beispielsweise, dass beim Start von Word die Methode <b>OnConnection <\/b>aufgerufen werden soll &#8211; mehr dazu gleich im Anschluss.<\/p>\n<p>Vorher sehen wir uns noch die drei Variablen an, die wir hier ben&ouml;tigen. Die erste ist eine Objektvariable zum Speichern des Verweises auf die Word-Instanz, welche das COM-Add-In initialisiert hat.<\/p>\n<p>Diese Variable k&ouml;nnen wir, nachdem wir sie gleich zugewiesen haben, nutzen, um vom COM-Add-In auf die Word-Instanz und das darin enthaltene Dokument zuzugreifen:<\/p>\n<pre>     <span style=\"color:blue;\">Private <\/span>objWord<span style=\"color:blue;\"> As <\/span>Word.Application<\/pre>\n<p>Au&szlig;erdem legen wir noch zwei Variablen fest f&uuml;r die Originalsprache sowie die Zielsprache der &Uuml;bersetzung. Diese erhalten als Datentyp die Enumerationen der beiden Auflistungen aus dem Modul <b>mdlDeepL<\/b>:<\/p>\n<pre>     <span style=\"color:blue;\">Public <\/span>intSourceLanguage<span style=\"color:blue;\"> As <\/span>SourceLanguage\r\n     <span style=\"color:blue;\">Public <\/span>intTargetLanguage<span style=\"color:blue;\"> As <\/span>TargetLanguage\r\n...\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000347\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000347?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000347\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"b3cc5bc9f1\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Internet bietet f&uuml;r beinahe jeden Zweck einen Service. Auch f&uuml;r das &Uuml;bersetzen von Texten. Ein Anbieter hei&szlig;t DeepL. Er bietet nicht nur eine Benutzeroberfl&auml;che, in die man Texte eingeben kann, die direkt &uuml;bersetzt werden, sondern auch noch eine API. Dieser k&ouml;nnen wir programmgesteuert Texte &uuml;bergeben und die &Uuml;bersetzung entgegennehmen. Das ist sehr praktisch f&uuml;r diejenigen Bereiche der Programmierung, wo man Texte in einer anderen oder in mehreren Sprachen braucht. In diesem Artikel wollen wir uns jedoch ansehen, wie wir aus den Techniken, die wir in weiteren Artikeln vorgestellt haben, ein COM-Add-In bauen, das sich nahtlos in die Word-Benutzeroberfl&auml;che eingliedert und auf Knopfdruck komplette Dokumente oder auch nur markierte Bereiche in die gew&uuml;nschte Sprache &uuml;bersetzt.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012023,662023,44000004],"tags":[],"yst_prominent_words":[],"class_list":["post-55000347","post","type-post","status-publish","format-standard","hentry","category-66012023","category-662023","category-Loesungen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000347"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000347\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000347"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}