{"id":55000661,"date":"2009-04-01T00:00:00","date_gmt":"2020-05-22T22:22:37","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=661"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Mehrsprachige_Anwendungen_Teil_2","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/","title":{"rendered":"Mehrsprachige Anwendungen, Teil 2"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/488535d595a448a39d14e17503101c8e\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Im ersten Teil dieser Beitragsreihe haben wir uns mit der mehrsprachigen Gestaltung von Elementen der Benutzeroberfl&auml;che, wie Formularen und Berichten, besch&auml;ftigt. Das reicht nat&uuml;rlich l&auml;ngst nicht f&uuml;r eine Anwendung, die alle relevanten Texte in mehreren Sprachen anzeigt. In diesem Beitrag geht es weiter: mit der &Uuml;bersetzung von Meldungsfenstern, Men&uuml;s, Ribbons und mehr.<\/b><\/p>\n<p>Im Beitrag <b>Mehrsprachige Anwendungen <\/b>(Shortlink 611) haben wir eine recht bequeme M&ouml;glichkeit vorgestellt, um die Beschriftungen bestehender Formulare und Berichte sowie ihrer Steuerelemente in Tabellen einzulesen, diese zu &uuml;bersetzen und die Beschriftungen bei Bedarf mit dem Text in der gew&uuml;nschten Sprache auszustatten.<\/p>\n<p>Eine Access-Anwendung liefert aber weitaus viel mehr Stellen, deren Texte flexibel angepasst werden m&uuml;ssen. Die schlechte Nachricht ist, dass sich die meisten nicht so einfach einlesen lassen wie Formulare, Berichte und Steuerelemente: hier ist Handarbeit gefragt.<\/p>\n<p>Bevor wir in die &uuml;brigen Elemente von Access einsteigen, die noch nicht im ersten Teil unserer Beitragsreihe erl&auml;utert wurden, noch ein Nachtrag zum ersten Teil.<\/p>\n<p>Das Beispiel f&uuml;r den Einsatz der dort verwendeten Routine <b>SpracheEinstellen <\/b>verwendete ein Kombinationsfeld, mit dem Sie die Sprache ausw&auml;hlen k&ouml;nnen und die nach dem Aktualisieren eine Ereignisprozedur ausl&ouml;st. Diese wiederum stellt die Sprache der Steuerelemente des Formulars entsprechend dem im Kombinationsfeld ausgew&auml;hlten Eintrag ein.<\/p>\n<p>Normalerweise stellen Sie die Sprache nat&uuml;rlich an zentraler Stelle ein, etwa &uuml;ber einen Men&uuml;punkt, und speichern sie in einer globalen Variablen oder noch besser in einer Optionentabelle, damit diese Einstellungen sitzungs&uuml;bergreifend wirken.<\/p>\n<p>Die &Uuml;bersetzung der Eigenschaften von Formularen, Berichten und Steuerelementen erfolgt dann zwar auch durch einen Aufruf der Routine <b>SpracheEinstellen <\/b>&#8211; diese wird jedoch direkt beim &Ouml;ffnen des jeweiligen Objekts aufgerufen, etwa &uuml;ber die Ereignisprozedur <b>Beim Laden <\/b>eines Formulars:<\/p>\n<pre>Private Sub Form_Load()\r\n    SpracheEinstellen Me, cSprache\r\n    End Sub<\/pre>\n<p>In diesem Fall wird die Sprache aus einer Konstanten namens <b>cSprache <\/b>eingelesen, was eine Alternative zum flexiblen Einstellen der Anwendungssprache darstellt: M&ouml;glicherweise m&ouml;chten Sie die Anwendung ja auch einfach in verschiedenen Sprachen ver&ouml;ffentlichen, ohne dass der Benutzer diese selbstst&auml;ndig anpassen kann.<\/p>\n<p><b>Wohin mit der aktuellen Spracheinstellung<\/b><\/p>\n<p>Je nachdem, ob Sie dem Kunden tats&auml;chlich eine mehrsprachige Anwendung pr&auml;sentieren m&ouml;chte, deren Sprache dieser selbst einstellen kann, oder ob Sie einfach nur die M&ouml;glichkeit haben m&ouml;chten, die Anwendung in der einen oder anderen Sprachversion zu vertreiben, w&auml;hlen Sie eine von mehreren Varianten zum Einstellen der Sprache.<\/p>\n<p>Wenn der Kunde selbst die Einstellung vornehmen soll, bieten Sie beispielsweise ein Formular an, das diese und andere Optionen enth&auml;lt, deren Einstellungen in einer Optionentabelle gespeichert werden.<\/p>\n<p>Informationen &uuml;ber das Speichern von Optionen in Tabellen erhalten Sie beispielsweise im Beitrag <b>Anwendungsoptionen in Tabellen speichern <\/b>(Shortlink 617). Dort erfahren Sie auch, wie Sie die gespeicherten Informationen zur Laufzeit wieder verf&uuml;gbar machen.<\/p>\n<p>Wenn Sie die Anwendung zwar f&uuml;r mehrere Sprachen auslegen, jedoch nur in jeweils einer Sprache ausliefern m&ouml;chten, sodass der Benutzer nur die voreingestellte Sprache verwenden kann, speichern Sie die ID der Sprache am einfachsten in einer Konstanten.<\/p>\n<p><b>MsgBox und InputBox<\/b><\/p>\n<p>Meldungsfenster und InputBox-Fenster sind zwei Elemente der Benutzeroberfl&auml;che, die nur per VBA-Code (eigentlich auch per Makros, aber dieses behandeln wir hier nicht) angezeigt werden k&ouml;nnen und deren Aussehen erst zur Laufzeit festgelegt wird.<\/p>\n<p>Wir veranschaulichen die Vorgehensweise zur Internationalisierung der beiden Meldungsfensterarten anhand der <b>MsgBox<\/b>.Die mit der <b>InputBox<\/b>-Anweisung erzeugten Exemplare behandeln Sie analog.<\/p>\n<p>Prinzipiell m&uuml;ssen Sie den &uuml;blicherweise verwendeten Aufruf des Meldungsfensters durch eine Variante ersetzen, welche die aktuelle &Uuml;bersetzung des Texts aus einer Funktion liefert:<\/p>\n<pre>MsgBox HoleUebersetzung&micro;\r\n(&quot;Meldungsfenstertext&quot;), ..., &micro;\r\nHoleUebersetzung&micro;\r\n(&quot;Meldungsfenstertitel&quot;)<\/pre>\n<p>Im Gegensatz zu den Formularen, Berichten und Steuerelementen hat eine <b>MsgBox<\/b>-Anweisung keine eindeutige ID (ein Steuerelement hat beispielsweise ein Host-Objekt wie ein Formular oder einen Bericht und einen Namen), &uuml;ber die man die entsprechenden &Uuml;bersetzungen holen k&ouml;nnte.<\/p>\n<p>Also legt man selbst eine ID fest, die entweder eine Zahl oder ein String ist und als Parameter der oben aufgef&uuml;hrten Funktion <b>HoleUebersetzung <\/b>angegeben wird. Diese Funktion liefert dann beispielsweise aus einer Tabelle die &Uuml;bersetzung des Texts in der aktuellen Anwendungssprache.<\/p>\n<p>Den Text k&ouml;nnen Sie in der bereits vorhandenen Tabelle <b>tblUebersetzungen <\/b>unterbringen. Dort verwenden Sie als <b>BegriffID <\/b>am besten negative Zahlen, damit Sie diese von den &uuml;brigen f&uuml;r Formulare, Berichte und Steuerelemente vorgesehenen &Uuml;bersetzungen unterscheiden k&ouml;nnen (und damit es eine M&ouml;glichkeit gibt, diese beim Neueinlesen der notwendigen Informationen per VBA zu l&ouml;schen, ohne die &Uuml;bersetzungen f&uuml;r Meldungsfenster und Co. zu ber&uuml;hren).<\/p>\n<p>Dies k&ouml;nnte wie in Bild 1 aussehen. Legen Sie einfach die &Uuml;bersetzungen f&uuml;r die in der Tabelle <b>tblSprachen <\/b>gespeicherten Sprachen an und tragen Sie die entsprechenden Bedeutungen ein (mangels allzu umfangreicher Fremdsprachenkenntnisse bel&auml;sst es der Autor bei Platzhaltertexten).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_02\/MehrsprachigeDatenbanken-web-images\/pic002_opt.jpeg\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Die &Uuml;bersetzungen f&uuml;r die Texte in Meldungsfenstern, Men&uuml;leisten und Co. k&ouml;nnen Sie ebenfalls in die Tabelle tblUebersetzungen schreiben.<\/span><\/b><\/p>\n<p>Fehlt nur noch die Funktion <b>HoleUebersetzung<\/b>, die lediglich aus einer einfachen <b>DLookup<\/b>-Anweisung besteht:<\/p>\n<pre>Public Function HoleUebersetzung(lngBegriffID _\r\n    As Long) As String\r\n    HoleUebersetzung = DLookup(&quot;Begriff&quot;, _\r\n    &quot;tblUebersetzungen&quot;, &quot;BegriffID = &quot; _\r\n    &amp; lngBegriffID &amp; &quot; AND SpracheID = &quot; _\r\n    &amp; cSprache)\r\nEnd Function<\/pre>\n<p>Auch hier verwenden wir eine Konstante als Lieferant der ID der Sprache. Wenn Sie die Sprache in einer Optionentabelle oder in einer globalen Variablen vorhalten m&ouml;chten, m&uuml;ssen Sie <b>cSprache <\/b>durch einen entsprechenden Ausdruck oder eine Funktion ersetzen.<\/p>\n<p>Der Aufruf des Meldungsfensters w&uuml;rde nun beispielsweise so aussehen:<\/p>\n<pre>MsgBox HoleUebersetzung(-1), vbOkOnly,\r\nHoleUebersetzung(-2)<\/pre>\n<p><b>Men&uuml;s<\/b><\/p>\n<p>Bei Men&uuml;s gibt es ebenfalls verschiedene Texte, die zum Beispiel in den Eigenschaften <b>Caption <\/b>und <b>ToolTipText <\/b>gespeichert werden.<\/p>\n<p>Men&uuml;s erstellt man typischerweise entweder &uuml;ber die Benutzeroberfl&auml;che, indem man den Anpassen-Dialog &ouml;ffnet und die gew&uuml;nschten Men&uuml;s zusammenstellt, oder man erzeugt diese komplett per VBA.<\/p>\n<p>Bez&uuml;glich der Mehrsprachigkeit ergeben sich ebenfalls mehrere M&ouml;glichkeiten. Da man durchaus per VBA auf die vorhandenen Men&uuml;-, Symbol- und Kontextmen&uuml;s zugreifen kann, w&auml;re es theoretisch kein Problem, deren Texte genau wie bei Formularen, Berichten und Steuerelementen auszulesen und diese zusammen mit den &Uuml;bersetzungen in die bereits vorhandenen Tabellen zu schreiben.<\/p>\n<p>Genauso k&ouml;nnen Sie beim &Ouml;ffnen der Anwendung die Men&uuml;s mit den in den Tabellen gespeicherten Texten f&uuml;r die aktuell verwendete Sprache versehen.<\/p>\n<p>Die zweite Variante f&uuml;r das Erstellen von Men&uuml;s ist VBA: Manch ein Entwickler erstellt alle Men&uuml;s beim Start der Anwendung oder auch zur Laufzeit. In diesem Fall k&ouml;nnte man die jeweiligen &Uuml;bersetzungen direkt beim Erstellen der Men&uuml;s zuweisen. Allerdings braucht man hier eine weitere Routine, welche beim Wechsel der Spracheinstellungen zur Laufzeit auch die Men&uuml;s anpasst &#8211; am einfachsten ist es dann wohl, die Men&uuml;s komplett neu zu erstellen und mit den entsprechenden Texten zu versehen.<\/p>\n<p><!--30percent--><\/p>\n<p><b>Men&uuml;texte einlesen<\/b><\/p>\n<p>Wir gehen im Folgenden davon aus, dass die Men&uuml;s, die mit einer Mehrsprachigkeitsfunktion ausgestattet werden sollen, bereits vorhanden sind, also entweder per <b>Anpassen<\/b>-Dialog oder per VBA erzeugt wurden.<\/p>\n<p>Unser Beispielmen&uuml; sieht wie in Bild 2 aus und enth&auml;lt ein paar verschachtelte Elemente. Nach dem &auml;ndern der Sprache sollen alle Elemente mit neuen Texten ausgestattet sein, wie Bild 3 zeigt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_02\/MehrsprachigeDatenbanken-web-images\/pic003_opt.jpeg\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Men&uuml;s unter Access 2003 und fr&uuml;her mit deutschen &#8230;<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_02\/MehrsprachigeDatenbanken-web-images\/pic004_opt.jpeg\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: &#8230; und mit anderssprachigen Texten<\/span><\/b><\/p>\n<p>Die Vorgehensweise ist prinzipiell genau so wie bei Formularen, Berichten und Steuerelementen. Die Routine <b>TexteEinlesenMenues <\/b>erwartet genau wie <b>TexteEinlesen <\/b>die <b>ID <\/b>der Sprache aus der Tabelle <b>tblSprachen<\/b>, in der die aktuellen Steuerelemente beschriftet sind.<\/p>\n<p>Sie schreibt f&uuml;r jedes Steuerelement einen Eintrag in die Tabelle <b>tblElemente<\/b> (siehe Bild 4), wobei das Feld <b>Objekt <\/b>den Namen des Men&uuml;s und <b>Objektart <\/b>den Wert <b>Menu <\/b>erh&auml;lt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_02\/MehrsprachigeDatenbanken-web-images\/pic005_opt.jpeg\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Die Tabelle tblElemente speichert auch Informationen zu Men&uuml;-Elementen.<\/span><\/b><\/p>\n<p>F&uuml;r das Feld <b>Steuerelement <\/b>wird allerdings nicht wie bei den Steuerelementen von Formularen und Berichten der Steuerelementname eingetragen, sondern ein eindeutiger Zahlenwert &#8211; die Elemente benutzerdefinierter Men&uuml;s besitzen n&auml;mlich normalerweise kein eindeutiges Merkmal.<\/p>\n<p>Daher schreibt die Routine <b>TexteEinlesenMenues <\/b>die eindeutige Nummer, die auch im Feld <b>BegriffID <\/b>der Tabelle <b>tblElemente <\/b>landet, auch noch in die Eigenschaft <b>Tag <\/b>des jeweiligen Men&uuml;elements.<\/p>\n<p>Der Hintergrund ist, dass die sp&auml;ter vorgestellte Routine <b>MenuespracheEinstellen <\/b>eine M&ouml;glichkeit braucht, um jedes der Men&uuml;elemente eindeutig zu identifizieren, um die richtige Beschriftung in der jeweiligen Sprache hinzuzuf&uuml;gen.<\/p>\n<p>Nachdem f&uuml;r ein Men&uuml;element ein Datensatz in der Tabelle <b>tblElemente <\/b>angelegt wurde, kommen je nach Anzahl der in der Tabelle <b>tblSprachen <\/b>festgelegten Sprachen entsprechende Eintr&auml;ge zur Tabelle <b>tblUebersetzungen <\/b>hinzu &#8211; auch das kennen Sie bereits von der Routine <b>TexteEinlesen <\/b>aus dem ersten Teil dieser Beitragsreihe.<\/p>\n<p>Einen gro&szlig;en Unterschied gibt es dennoch zwischen dem Einlesen der Beschriftungen von Steuerelementen in Formularen und Berichten und in Men&uuml;s: Men&uuml;s k&ouml;nnen hierarchisch verschachtelte Elemente enthalten, weshalb die Routine <b>TexteEinlesenMenues <\/b>eine weitere Prozedur namens <b>TexteEinlesenMenuesRek <\/b>aufruft, die sich im weiteren Verlauf entsprechend der Men&uuml;tiefe rekursiv selbst aufrufen kann und die Elemente der verschiedenen Ebenen in den Tabellen <b>tblElemente <\/b>und <b>tblUebersetzungen <\/b>verewigt.<\/p>\n<p>Da die Routinen <b>TexteEinlesenMenues<\/b>, <b>TexteEinlesenMenuesRek <\/b>und <b>MenuespracheEinstellen <\/b>sehr &auml;hnlich wie die bereits im ersten Teil dieser Beitragsreihe vorgestellten Routinen aufgebaut sind, verzichten wir an dieser Stelle auf ihren Abdruck und verweisen auf das Modul <b>mdlMehrsprachigkeit <\/b>der Beispieldatenbank.<\/p>\n<p><b>Andere Sprache im Men&uuml; anwenden<\/b><\/p>\n<p>Wer nun denkt, das Anwenden einer anderen Sprache auf die Men&uuml;s einer Datenbank sei ebenso kompliziert und funktioniere ebenfalls nur mit Rekursion, irrt: Immerhin haben wir gute Vorarbeit geleistet und jedem Steuerelement der eingelesenen Men&uuml;s eine <b>ID <\/b>in die Eigenschaft <b>Tag <\/b>geschrieben, aufgrund derer wir einfach nur noch die Datens&auml;tze der Tabelle <b>tblElemente <\/b>durchlaufen und die Men&uuml;elemente mit dem passenden Tag heraussuchen m&uuml;ssen. Und dabei hilft sogar noch die n&uuml;tzliche Funktion <b>FindControl <\/b>des <b>CommandBar<\/b>-Objekts.<\/p>\n<p>Der Rest ist Formsache: Die Routine schreibt die in der Tabelle <b>tblUebersetzungen<\/b> gespeicherten Texte f&uuml;r die mit <b>lngSpracheID<\/b> angegebene Sprache in die <b>Caption<\/b>-Eigenschaft der betroffenen Men&uuml;elemente und sorgt so f&uuml;r eine einfache automatisierte Mehrsprachigkeit von Men&uuml;s.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Ribbons<\/p>\n<p>Bei den Ribbons unter Access 2007 sieht die Sache wiederum ganz anders aus: Sie basieren auf einer XML-Definition, die variable Elemente in Form sogenannter Callback-Funktionen enthalten kann, die erst vor dem Anzeigen des jeweiligen Ribbons aufgerufen werden. <\/p>\n<p>Jedes Steuerelement kann verschiedene Callback-Funktionen haben, von denen jede einen bestimmten Wert liefert &#8211; eine liefert die zur Laufzeit anzuzeigende Beschriftung, eine andere den Hilfetext und so weiter.<\/p>\n<p>Die Grundlagen f&uuml;r die Verwendung von Callback-Funktionen zur dynamischen Gestaltung von Ribbons erhalten Sie in einem anderen Beitrag namens <b>Ribbons dynamisch gestalten <\/b>(Shortlink 657).<\/p>\n<p>Leider reicht der Platz an dieser Stelle nicht aus, um Begriffe wie Callback-Funktionen ausreichend genau zu erl&auml;utern; wenn Sie also noch keine Grundkenntnisse &uuml;ber Ribbons besitzen, kommen Sie einfach sp&auml;ter zu diesem Abschnitt zur&uuml;ck und lesen nun ab der folgenden Zwischen&uuml;berschrift weiter.<\/p>\n<p>Die theoretische Vorgehensweise erl&auml;utern wir an dieser Stelle in verk&uuml;rzter Form: Wenn Sie einem Ribbon einen Beschriftungstext dynamisch, also &uuml;ber eine Callback-Funktion zuweisen m&ouml;chten, k&ouml;nnen Sie keinen statischen Text etwa in einem XML-Attribut zuweisen &#8211; beides gleichzeitig ist nicht zul&auml;ssig.<\/p>\n<p>Sie k&ouml;nnen also nicht wie bei Formularen, Berichten, Steuerelementen oder Men&uuml;s einen bestehenden Beschriftungstext als Grundlage verwenden und diesen mit den Texten in anderen Sprachen in die Tabellen <b>tblElemente <\/b>und <b>tblUebersetzungen <\/b>schreiben, um diese anschlie&szlig;end entsprechend abzurufen.<\/p>\n<p>Die Situation gestaltet sich also genau so wie bei den Meldungsfenstern: Sie m&uuml;ssen der Callback-Funktion eine Anweisung hinzuf&uuml;gen, die aufgrund einer <b>ID<\/b>, die durchaus dem Attribut <b>id <\/b>des aktuellen Ribbon-Elements entsprechen kann, und der Sprach-ID f&uuml;r die gew&uuml;nschte Sprache die &Uuml;bersetzung aus einer Tabelle wie <b>tblUebersetzungen <\/b>liefert.<\/p>\n<p><b>Sonstige Elemente<\/b><\/p>\n<p>Weitere Elemente, um die man sich k&uuml;mmern muss, sind etwa die in der Statusleiste angezeigten Texte. Diese erhalten Sie auf die gleiche Weise wie etwa die Texte f&uuml;r die Anzeige in Meldungsfenstern &uuml;ber die Funktion <b>HoleUebersetzung<\/b>(). <\/p>\n<p><b>Platzbedarf von Texten<\/b><\/p>\n<p>Wer nur f&uuml;r eine Landessprache entwickelt, braucht sich keine Gedanken um den Platzbedarf verschiedener &Uuml;bersetzungen von Texten zu machen &#8211; er braucht beispielsweise die Bezeichnungsfelder nur so breit zu formatieren, wie es der aktuelle Text erfordert.<\/p>\n<p>Bei mehrsprachigen Anwendungen kann dies schiefgehen, weil ein Ausdruck in einer anderen Sprache nicht nur k&uuml;rzer, sondern auch l&auml;nger sein kann. Also m&uuml;ssen Sie alle Varianten durchtesten und visuell pr&uuml;fen, ob auch alle Texte angezeigt werden &#8230; oder doch nicht<\/p>\n<p>Nein, denn die versteckte und undokumentierte Klasse <b>Wizhook<\/b> der Access-Bibliothek h&auml;lt eine Methode namens <b>TwipsFromFont <\/b>bereit, mit der Sie die Abmessungen von Texten in der angegebenen Schriftart und unter anderen Parametern ermitteln k&ouml;nnen. Das hilft insofern weiter, als dass Sie per Code pr&uuml;fen k&ouml;nnen, welche sprachabh&auml;ngigen Ausdr&uuml;cke in ein Bezeichnungsfeld passen und welche nicht. Abgesehen von der Einschr&auml;nkung, dass keine Bezeichnungsfelder mit mehrzeiligen Texten ber&uuml;cksichtigt werden k&ouml;nnen (die Funktion <b>TwipsFromFont<\/b> wertet immer die Gesamtl&auml;nge aus, auch wenn der Text Zeilenumbr&uuml;che enth&auml;lt), k&ouml;nnen Sie hiermit schnell zu schmale Bezeichnungsfelder ermitteln.<\/p>\n<p>Die Routine <b>BezeichnungsfelderPruefen <\/b>(Listing 1) nimmt Ihnen viel manuelle Arbeit ab. Sie durchl&auml;uft alle Formulare und Berichte, die in der Tabelle <b>tblUebersetzungen <\/b>aufgef&uuml;hrt werden, &ouml;ffnet diese in Abh&auml;ngigkeit von ihrem Typ, durchl&auml;uft alle in der Tabelle <b>tblUebersetzungen <\/b>angegebenen &Uuml;bersetzungen f&uuml;r die Eigenschaft <b>Caption <\/b>der Steuerelemente des Typs <b>100 <\/b>(Bezeichnungsfeld) und liest sowohl die Breite der Texte f&uuml;r die verschiedenen Sprachen als auch die Breite des jeweiligen Steuerelements aus. Wenn der Text breiter als das Steuerelement ist, schreibt die Routine die Differenz in Twips in das Feld <b>Ueberlaenge <\/b>des aktuellen Datensatzes der Tabelle <b>tblUebersetzungen<\/b> (siehe Bild 5).<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Diese Routine vergleicht die Breite von Bezeichnungsfeldern und die m&ouml;glichen Inhalte und schreibt einen entsprechenden Eintrag in die Tabelle tblUebersetzungen, wenn ein Eintrag nicht passt.<\/p>\n<pre>Public Sub BezeichnungsfelderPruefen()\r\nDim db As DAO.Database\r\nDim rstObjekte As DAO.Recordset\r\nDim rstLabel As DAO.Recordset\r\nDim rstUebersetzungen As DAO.Recordset\r\nDim strObjektname As String\r\nDim strObjektart As String\r\nDim lngHoeheText As Long\r\nDim lngBreiteText As Long\r\nDim obj As Object\r\nSet db = CurrentDb\r\ndb.Execute &quot;UPDATE tblUebersetzungen SET Ueberlaenge = 0, Ueberhoehe = 0&quot;, dbFailOnError\r\nSet rstObjekte = db.OpenRecordset(&quot;SELECT DISTINCT Objekt, Objektart FROM tblElemente&quot;, dbOpenDynaset)\r\nDo While Not rstObjekte.EOF\r\n strObjektname = rstObjekte!Objekt\r\n    strObjektart = rstObjekte!Objektart\r\n    If Not Left(strObjektname, 1) = &quot;_&quot; Then\r\n        If strObjektart = &quot;Form&quot; Then\r\n            DoCmd.OpenForm strObjektname, acPreview\r\n            Set obj = Forms(strObjektname)\r\n        Else\r\n            DoCmd.OpenReport strObjektname, acViewPreview\r\n            Set obj = Reports(strObjektname)\r\n        End If\r\n        Set rstLabel = db.OpenRecordset(&quot;SELECT DISTINCT Steuerelement, BegriffID FROM tblElemente &quot; _\r\n        &amp; &quot;WHERE Objekt = &apos;&quot; &amp; strObjektname &amp; &quot;&apos; AND Objektart = &apos;&quot; &amp; strObjektart _\r\n        &amp; &quot;&apos; AND Steuerelementtyp = 100 AND Eigenschaft = &apos;Caption&apos;&quot;, dbOpenDynaset)\r\n        Do While Not rstLabel.EOF\r\n            Set rstUebersetzungen = db.OpenRecordset(&quot;SELECT Begriff, SpracheID, Ueberlaenge, Ueberhoehe &quot; _\r\n            &amp; &quot;FROM tblUebersetzungen WHERE BegriffID = &quot; &amp; rstLabel!BegriffID, dbOpenDynaset)\r\n            Do While Not rstUebersetzungen.EOF\r\n                Textabmessungen rstUebersetzungen!Begriff, obj.Controls(rstLabel!Steuerelement), _\r\n                lngHoeheText, lngBreiteText\r\n                If lngBreiteText &gt; obj.Controls(rstLabel!Steuerelement).Width Then\r\n                    rstUebersetzungen.Edit\r\n                    rstUebersetzungen!Ueberlaenge = lngBreiteText - obj.Controls(rstLabel!Steuerelement).Width\r\n                    rstUebersetzungen.Update\r\n                End If\r\n                If lngHoeheText &gt; obj.Controls(rstLabel!Steuerelement).Height Then\r\n                    rstUebersetzungen.Edit\r\n                    rstUebersetzungen!Ueberhoehe = lngHoeheText - obj.Controls(rstLabel!Steuerelement).Height\r\n                    rstUebersetzungen.Update\r\n                End If\r\n                rstUebersetzungen.MoveNext\r\n            Loop\r\n            rstLabel.MoveNext\r\n        Loop\r\n    End If\r\n    If strObjektart = &quot;Form&quot; Then\r\n        DoCmd.Close acForm, strObjektname\r\n    Else\r\n        DoCmd.Close acReport, strObjektname\r\n    End If\r\n    rstObjekte.MoveNext\r\nLoop\r\nEnd Sub<\/pre>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_02\/MehrsprachigeDatenbanken-web-images\/pic001_opt.jpeg\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Zu lange Texte f&uuml;r Bezeichnungsfelder werden durch einen entsprechenden Zahlenwert im Feld Ueberlaenge der Tabelle tblUebersetzungen markiert.<\/span><\/b><\/p>\n<p>Die Routine <b>BezeichnungsfelderPruefen <\/b>verwendet eine Hilfsfunktion namens <b>Textabmessungen<\/b>, welche die <b>Wizhook<\/b>-Methode <b>TwipsFromFont <\/b>verwendet, um die Breite des zu pr&uuml;fenden Textes zu ermitteln. Diese Routine finden Sie genau wie <b>BezeichnungsfelderPruefen <\/b>im Modul <b>mdlMehrsprachigkeit <\/b>der Beispieldatenbank.<\/p>\n<p><b>Entwicklungsumgebung<\/b><\/p>\n<p>Wer normalerweise nur Datenbankanwendungen f&uuml;r deutschsprachige Kunden entwickelt, wird &uuml;blicherweise auch mit einer deutschen Version von Access arbeiten. Wenn eine Anwendung auch auf anderssprachigen Systemen funktionieren soll, ist es allerdings sinnvoll, mit einer englischen Version von Access zu arbeiten. Es gibt n&auml;mlich einige feine Unterschiede, die auf diese Weise nicht ins Gewicht fallen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">In der deutschen Version enthalten Ereigniseigenschaften den Eintrag <b>[Ereignisprozedur]<\/b>, wenn sie eine Ereignisprozedur ausl&ouml;sen sollen. Das kann auf anderssprachigen Systemen zu Problemen f&uuml;hren, da diese nur mit dem englischen Pendant <b>[Event Procedure] <\/b>etwas anfangen k&ouml;nnen.<\/li>\n<li class=\"aufz-hlung\">Das gilt auch f&uuml;r Schl&uuml;sselw&ouml;rter, die in Eigenschaften von Formularen, Berichten oder Steuerelementen oder auch in Abfrageausdr&uuml;cken automatisch in die deutsche Sprache &uuml;bersetzt werden. Aus <b>Forms <\/b>wird so etwa <b>Formulare<\/b>, was von anderssprachigen Systemen wiederum nicht korrekt erkannt wird.<\/li>\n<li class=\"aufz-hlung\">Auch die Bezeichnung der Berichtsbereiche kann zu Problemen f&uuml;hren, wenn Sie mit einem deutschen System entwickeln und die Anwendung dann auf anderssprachigen Access-Versionen laufen lassen.<\/li>\n<\/ul>\n<p><b>Anpassungen<\/b><\/p>\n<p>Die Beispieldatenbank weist gegen&uuml;ber der aus dem ersten Teil dieser Beitragsreihe eine kleine &auml;nderung auf. Diese betrifft die Tabelle <b>tblElemente<\/b>, der wir ein zus&auml;tzliches Feld namens <b>Objektart <\/b>hinzugef&uuml;gt haben, das entweder den Text <b>Form <\/b>oder <b>Report <\/b>enth&auml;lt. Dementsprechend hat auch der Code der Routine <b>TexteEinlesen <\/b>und der dadurch aufgerufenen Funktionen kleinere &auml;nderungen erfahren. Die Tabelle <b>tblUebersetzungen <\/b>hat zwei neue Felder namens <b>Ueberlaenge <\/b>und <b>Ueberhoehe <\/b>erhalten, die gef&uuml;llt werden, wenn das Zielsteuerelement ein Bezeichnungsfeld ist und der Text in einer bestimmten Sprache nicht in das Bezeichnungsfeld hineinpasst.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Nach der Vorgehensweise bei der mehrsprachigen Gestaltung von Formularen, Berichten und den enthaltenen Steuerelementen im Beitrag <b>Mehrsprachige Anwendungen<\/b> (Shortlink 611) haben Sie in diesem Teil der Beitragsreihe erfahren, wie Sie Meldungsfenster, Men&uuml;s, Ribbons und weitere Elemente, deren Beschriftung mit VBA angepasst wird, mit mehrsprachigen Texten ausstatten.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Mehrsprachigkeit2.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{1EC163C7-5914-40EC-B013-67D3CF9C728F}\/aiu_661.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im ersten Teil dieser Beitragsreihe haben wir uns mit der mehrsprachigen Gestaltung von Elementen der Benutzeroberfl&auml;che, wie Formularen und Berichten, besch&auml;ftigt. Das reicht nat&uuml;rlich l&auml;ngst nicht f&uuml;r eine Anwendung, die alle relevanten Texte in mehreren Sprachen anzeigt. In diesem Beitrag geht es weiter: mit der &Uuml;bersetzung von Meldungsfenstern, Men&uuml;s, Ribbons und mehr.<\/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":[66022009,662009,44000028],"tags":[],"class_list":["post-55000661","post","type-post","status-publish","format-standard","hentry","category-66022009","category-662009","category-Ergonomie_und_Benutzeroberflaeche"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Mehrsprachige Anwendungen, Teil 2 - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mehrsprachige Anwendungen, Teil 2\" \/>\n<meta property=\"og:description\" content=\"Im ersten Teil dieser Beitragsreihe haben wir uns mit der mehrsprachigen Gestaltung von Elementen der Benutzeroberfl&auml;che, wie Formularen und Berichten, besch&auml;ftigt. Das reicht nat&uuml;rlich l&auml;ngst nicht f&uuml;r eine Anwendung, die alle relevanten Texte in mehreren Sprachen anzeigt. In diesem Beitrag geht es weiter: mit der &Uuml;bersetzung von Meldungsfenstern, Men&uuml;s, Ribbons und mehr.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:22:37+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/488535d595a448a39d14e17503101c8e\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Mehrsprachige Anwendungen, Teil 2\",\"datePublished\":\"2020-05-22T22:22:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/\"},\"wordCount\":2779,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/488535d595a448a39d14e17503101c8e\",\"articleSection\":[\"2\\\/2009\",\"2009\",\"Ergonomie und Benutzeroberfl\u00e4che\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/\",\"name\":\"Mehrsprachige Anwendungen, Teil 2 - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/488535d595a448a39d14e17503101c8e\",\"datePublished\":\"2020-05-22T22:22:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/488535d595a448a39d14e17503101c8e\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/488535d595a448a39d14e17503101c8e\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen_Teil_2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mehrsprachige Anwendungen, Teil 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Mehrsprachige Anwendungen, Teil 2 - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/","og_locale":"de_DE","og_type":"article","og_title":"Mehrsprachige Anwendungen, Teil 2","og_description":"Im ersten Teil dieser Beitragsreihe haben wir uns mit der mehrsprachigen Gestaltung von Elementen der Benutzeroberfl&auml;che, wie Formularen und Berichten, besch&auml;ftigt. Das reicht nat&uuml;rlich l&auml;ngst nicht f&uuml;r eine Anwendung, die alle relevanten Texte in mehreren Sprachen anzeigt. In diesem Beitrag geht es weiter: mit der &Uuml;bersetzung von Meldungsfenstern, Men&uuml;s, Ribbons und mehr.","og_url":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:22:37+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/488535d595a448a39d14e17503101c8e","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Mehrsprachige Anwendungen, Teil 2","datePublished":"2020-05-22T22:22:37+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/"},"wordCount":2779,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/488535d595a448a39d14e17503101c8e","articleSection":["2\/2009","2009","Ergonomie und Benutzeroberfl\u00e4che"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/","url":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/","name":"Mehrsprachige Anwendungen, Teil 2 - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/488535d595a448a39d14e17503101c8e","datePublished":"2020-05-22T22:22:37+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/488535d595a448a39d14e17503101c8e","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/488535d595a448a39d14e17503101c8e"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen_Teil_2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Mehrsprachige Anwendungen, Teil 2"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000661","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000661"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000661\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}