{"id":55000611,"date":"2008-06-01T00:00:00","date_gmt":"2021-02-11T21:21:22","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=611"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Mehrsprachige_Anwendungen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/","title":{"rendered":"Mehrsprachige Anwendungen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/69d16471821c4cd2979a417c3b035ab4\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wer seine Anwendung nicht nur mit einer Sprache ausstatten m&ouml;chte, sondern diese auch in anderen L&auml;ndern verf&uuml;gbar machen will, hat zwei M&ouml;glichkeiten: Entweder er erstellt f&uuml;r jede Sprache eine andere Version oder er bringt einer einzigen Anwendung bei, auf Knopfdruck die Sprache zu wechseln. Erfahren Sie, welche Version sinnvoller ist und wie Sie eine mehrsprachige Anwendung in die Tat umsetzen.<\/b><\/p>\n<p>Vorausgesetzt, Ihre Anwendung ist so ausgereift, dass sie ganz sicher nicht mehr ge&auml;ndert wird, dann k&ouml;nnen Sie diese einfach kopieren und die enthaltenen Texte an eine andere Sprache anpassen. Da aber sp&auml;testens beim Wechsel zu einer anderen Access-Version &auml;nderungen anstehen, sollten Sie vorsichtig damit sein: Diese m&uuml;ssen Sie n&auml;mlich dann in jeder Sprachversion separat durchf&uuml;hren.<\/p>\n<p>Anders sieht es aus, wenn Sie eine Anwendung mit Funktionen versehen, die je nach gew&uuml;nschter Sprache die passenden Texte anzeigen. Der Aufwand, diese Funktionen zu implementieren, ist zwar unumg&auml;nglich, und auch bei Erweiterungen oder &auml;nderungen der Datenbank f&auml;llt ein wenig mehr Arbeit an, aber je mehr Sprachen man unterst&uuml;tzt, desto weniger Aufwand ergibt sich gegen&uuml;ber der erstgenannten L&ouml;sung bei &auml;nderungen.<\/p>\n<p><b>Betroffene Bereiche<\/b><\/p>\n<p>Wichtig ist beim Implementieren von Mehrsprachigkeit, sich zun&auml;chst genau zu &uuml;berlegen, wo sich dieses Feature bemerkbar macht und mit welchem Aufwand die Anpassungen verbunden sind. Die folgende Liste zeigt, was Sie beachten m&uuml;ssen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Dokumentation (PDF, gedruckt), Onlinehilfe<\/li>\n<li class=\"aufz-hlung\">Elemente der Benutzeroberfl&auml;che: Men&uuml;s, Formulare, Berichte, Steuerelemente, Beschriftungen; insbesondere Gr&ouml;&szlig;e der Elemente in Abh&auml;ngigkeit von der L&auml;nge der Texte in den verschiedenen Sprachen<\/li>\n<li class=\"aufz-hlung\">Datenmodell: In welcher Sprache werden Tabellen und Felder benannt<\/li>\n<li class=\"aufz-hlung\">VBA-Code: In welcher Sprache werden Konstanten, Variablen und Routinen sowie Klassen benannt und der Code dokumentiert<\/li>\n<li class=\"aufz-hlung\">Access-Objekte: In welcher Sprache werden Abfragen, Formulare, Berichte und Module benannt<\/li>\n<li class=\"aufz-hlung\">Liegt Access jeweils in der richtigen Sprache vor Dies ist vor allem in Hinblick auf die Verwendung von <b>MsgBox <\/b>und <b>InputBox <\/b>wichtig.<\/li>\n<li class=\"aufz-hlung\">Zahlen-, W&auml;hrungs- und Datumsformate m&uuml;ssen den jeweiligen Gegebenheiten angepasst werden.<\/li>\n<li class=\"aufz-hlung\">Daten: Welche Daten m&uuml;ssen in allen Sprachen vorliegen &#8211; beispielsweise Anreden, W&auml;hrungen, sonstige Texte<\/li>\n<\/ul>\n<p>Dieser Beitrag l&auml;sst die Dokumentation und die Onlinehilfe weg, da diese wohl oder &uuml;bel in jeder Sprache separat erstellt werden m&uuml;ssen. Die internen Elemente einer Datenbank, wie das Datenmodell, die Bezeichnungen der Access-Objekte und die im VBA-Code verwendeten Bezeichnungen, bleiben ebenfalls au&szlig;en vor, weil der Benutzer mit diesen nicht in Ber&uuml;hrung kommt und wir davon ausgehen, dass nur die Benutzer und nicht die Entwickler unterschiedliche Sprachen erwarten. Mit englischen Bezeichnungen f&auml;hrt man aber hier wohl meist gut. Wie Sie alles Weitere realisieren, erfahren Sie auf den n&auml;chsten Seiten.<\/p>\n<p><b>Wohin mit den Informationen<\/b><\/p>\n<p>Eine wichtige Frage ist, wo Sie die verschiedenen &Uuml;bersetzungen der in der Anwendung enthaltenen Texte speichern. Man k&ouml;nnte diese in einer Textdatei speichern oder auch aus Ressourcen-Dateien oder der Registry beziehen. Es w&auml;re aber ung&uuml;nstig, solche Informationen au&szlig;erhalb der Anwendung zu speichern, wenn dies innerhalb geschehen kann &#8211; und zwar in passenden Tabellen, die man auch noch relational miteinander verkn&uuml;pfen kann.<\/p>\n<p><b>Datenmodell<\/b><\/p>\n<p>Ganz klar zu sein scheint, dass es eine Tabelle mit den verschiedenen Sprachen geben muss. Diese enth&auml;lt neben dem Prim&auml;rschl&uuml;sselfeld die Bezeichnung der Sprache und gegebenenfalls ein international g&uuml;ltiges K&uuml;rzel. Auf die Tatsache, dass der Benutzer die Sprache ja gegebenenfalls beim Ausw&auml;hlen derselben in der jeweiligen Landessprache vorfinden m&ouml;chte, gehen wir weiter unten ein. Wer gern spielt, kann nat&uuml;rlich auch passende Landesflaggen zur Auswahl anbieten.<\/p>\n<p>Neben den Sprachen gibt es Begriffe beziehungsweise Texte, die f&uuml;r jede Sprache einmal vorhanden sein m&uuml;ssen. Eine Tabelle, die solche Informationen speichert, enth&auml;lt also mindestens ein Feld mit der jeweiligen &Uuml;bersetzung, eine eindeutige ID f&uuml;r den Text, sowie ein Feld, mit dem ein Eintrag der gerade beschriebenen Sprachentabelle festgelegt wird. Dabei gibt es einen zusammengesetzten eindeutigen Schl&uuml;ssel &uuml;ber die beiden Felder <b>BegriffID<\/b> und <b>SpracheID<\/b>, damit kein Begriff zweimal in derselben Sprache vorkommt.<\/p>\n<p>Schlie&szlig;lich m&uuml;ssen Sie noch daf&uuml;r sorgen, dass Steuerelemente, Formulare, Berichte und die anderen Elemente mit den dort gespeicherten Begriffen ausgestattet werden. Dazu brauchen Sie f&uuml;r die unterschiedlichen Ziele verschiedene Tabellen. Die erste k&uuml;mmert sich um die Formulare, Berichte und Steuerelemente. Sie enth&auml;lt zwei Felder f&uuml;r die Angabe des Formular- beziehungsweise Berichtsnamens und f&uuml;r den Namen des jeweiligen Steuerelements.<\/p>\n<p>Will man die Formular- oder Berichtstitel festlegen, gibt man dort einfach nur den Objektnamen an und l&auml;sst das Steuerelement weg. Ein weiteres Feld enth&auml;lt die Nummer des Texts, der dort unter Ber&uuml;cksichtigung der gew&auml;hlten Sprache eingebaut werden soll. Schauen wir uns nun an, wie dieses Datenmodell funktioniert; die Tabellen f&uuml;r die &uuml;brigen Objekte folgen sp&auml;ter in Zusammenhang mit den jeweiligen Techniken.<\/p>\n<p>Das Datenmodell sieht nun zun&auml;chst wie in Bild 1 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/Mehrsprachigkeit-web-images\/pic001_opt.jpeg\" alt=\"pic001.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Datenmodell f&uuml;r die Ausstattung von Formularen und Berichten mit mehrsprachigen Texten<\/span><\/b><\/p>\n<p><b>Formulare, Berichte und Steuerelemente<\/b><\/p>\n<p>Alle Beschriftungen von Formularen, Berichten und den enthaltenen Steuerelementen sollen f&uuml;r die entsprechende Sprache angepasst werden. Aber reicht das aus Nein, es gibt noch eine Reihe weiterer Informationen, die in die jeweilige Sprache &uuml;bersetzt werden m&uuml;ssen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>ControlTipText<\/b>: Dieser Text wird, soweit vorhanden, beim &Uuml;berfahren mit der Maus angezeigt.<\/li>\n<li class=\"aufz-hlung\"><b>StatusBarText<\/b>: Diesen Text zeigt Access f&uuml;r das jeweils aktuelle Element in der Statusleiste an.<\/li>\n<li class=\"aufz-hlung\"><b>ValidationText<\/b>: Die G&uuml;ltigkeitsmeldung zeigt Access an, wenn der Benutzer einen ung&uuml;ltigen Wert eingibt.<\/li>\n<\/ul>\n<p><b>Von Deutsch nach &#8230;<\/b><\/p>\n<p>Die geplante Vorgehensweise sieht so aus:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie erstellen eine Anwendung, die einmal mehrsprachig werden soll. Am wenigsten Arbeit macht dies bezogen auf Formulare und Berichte wohl, wenn Sie die Anwendung erstmal so weit fertigstellen und dann die Mehrsprachigkeit hinzuf&uuml;gen. <\/li>\n<li class=\"aufz-hlung\">Eine Routine durchl&auml;uft die bestehenden Formulare und Berichte und deren Steuerelemente. Dabei schreibt sie alle Stellen, an denen zu &uuml;bersetzende Texte auftauchen, inklusive der vorhandenen Beschriftungen in die entsprechenden Tabellen.<\/li>\n<li class=\"aufz-hlung\">Im gleichen Zuge legt sie f&uuml;r alle in der Tabelle <b>tblSprachen <\/b>vorhandenen Eintr&auml;ge eine Kopie der zuvor gespeicherten Texte an &#8211; jeweils mit vorangestelltem K&uuml;rzel der Sprache.<\/li>\n<li class=\"aufz-hlung\">Die so vorbereiteten Texte werden dann mithilfe eines speziellen Formulars, das die Texte f&uuml;r zwei Sprachen &#8211; die Originalsprache und die Zielsprache &#8211; enth&auml;lt, nebeneinander angezeigt und k&ouml;nnen dort komfortabel &uuml;bersetzt werden.<\/li>\n<li class=\"aufz-hlung\">Beim &Ouml;ffnen eines Formulars oder Berichts mit zu &uuml;bersetzenden Texten wird eine Routine aufgerufen, die alle Steuerelemente durchl&auml;uft und die in den &Uuml;bersetzungstabellen enthaltenen Texte f&uuml;r die entsprechenden Eigenschaften einf&uuml;gt.<\/li>\n<\/ul>\n<p><b>Einlesen bestehender Texte<\/b><\/p>\n<p>Wenn die Anwendung fertiggestellt ist, rufen Sie einfach die Routine <b>TexteEinlesen <\/b>auf (s. Listing 1) und geben als Parameter die Sprache der Texte an, mit der Formulare, Berichte und Steuerelemente aktuell ausgestattet sind &#8211; zum Beispiel <b>1 <\/b>f&uuml;r <b>Deutsch<\/b> (den entsprechenden Wert entnehmen Sie der Tabelle <b>tblSprachen<\/b>).<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Startroutine zum Einlesen der in Formularen und Berichten bestehenden Texte<\/p>\n<pre>Public Sub TexteEinlesen(lngSpracheID As Long)\r\nDim i As Integer\r\nDim db As DAO.Database\r\nDim strObjekt As String\r\nSet db = CurrentDb\r\ndb.Execute &quot;DELETE FROM tblElemente&quot;\r\ndb.Execute &quot;DELETE FROM tblUebersetzungen&quot;\r\nFor i = 0 To CurrentProject.AllForms.Count - 1\r\n    strObjekt = CurrentProject.AllForms(i).Name\r\n    ObjektEinlesen strObjekt, lngSpracheID, &quot;Formular&quot;\r\nNext i\r\nFor i = 0 To CurrentProject.AllReports.Count - 1\r\n    strObjekt = CurrentProject.AllReports(i).Name\r\n    ObjektEinlesen strObjekt, lngSpracheID, &quot;Bericht&quot;\r\nNext i\r\nEnd Sub<\/pre>\n<p><!--30percent--><\/p>\n<p>Die Routine l&ouml;scht zun&auml;chst alle in den Tabellen <b>tblElemente <\/b>und <b>tblUebersetzungen <\/b>enthaltenen Daten. Anschlie&szlig;end durchl&auml;uft sie erst alle Formulare der Datenbank und dann alle Berichte. F&uuml;r all diese Objekte ruft die Prozedur die Routine <b>ObjektEinlesen <\/b>auf.<\/p>\n<p>Diese wiederum finden Sie in Listing 2. Die Routine erwartet den Namen des Objekts, die ID der Standardsprache der Anwendung sowie den Typ des Objekts als Parameter.<\/p>\n<p class=\"kastentabelleheader\">Listing 2: Diese Routine durchl&auml;uft alle relevanten Eigenschaften von Formularen, Berichten und deren Steuerelementen und ruft f&uuml;r jedes die Routine UebersetzungSchreiben auf, die alle notwendigen Daten in die &Uuml;bersctzungstabellen schreibt.<\/p>\n<pre>Public Sub ObjektEinlesen(strObjekt As String, lngSpracheID As Long, strTyp As String)\r\nDim i As Integer\r\nDim strEigenschaft As String\r\nDim obj As Object\r\nDim ctl As Access.Control\r\nIf strTyp = &quot;Formular&quot; Then\r\n    DoCmd.OpenForm strObjekt, acPreview\r\n    Set obj = Forms(strObjekt)\r\nElse\r\n    DoCmd.OpenReport strObjekt, acPreview\r\n    Set obj = Reports(strObjekt)\r\nEnd If\r\nUebersetzungSchreiben lngSpracheID, obj, ctl, &quot;Caption&quot;\r\nFor Each ctl In obj.Controls\r\n    For i = 1 To 4\r\n        strEigenschaft = Choose(i, &quot;Caption&quot;, &quot;ControlTipText&quot;, &quot;StatusbarText&quot;, _\r\n        &quot;ValidationText&quot;)\r\n        UebersetzungSchreiben lngSpracheID, obj, ctl, strEigenschaft\r\n    Next i\r\nNext ctl\r\nDoCmd.Close acForm, strObjekt\r\nEnd Sub<\/pre>\n<p>Je nachdem, ob der Parameter <b>strTyp <\/b>den Wert <b>Formular <\/b>oder <b>Bericht <\/b>enth&auml;lt, &ouml;ffnet einer der beiden Zweige der ersten <b>If&#8230;Then<\/b>-Bedingung das entsprechende Objekt in der Entwurfsansicht.<\/p>\n<p>Danach ruft die Routine zun&auml;chst eine weitere Prozedur namens <b>UebersetzungSchreiben <\/b>auf, die f&uuml;r das Eintragen der &Uuml;bersetzungen verantwortlich ist. Anschlie&szlig;end durchl&auml;uft die Routine alle Steuerelemente des Formulars beziehungsweise Berichts und ruft f&uuml;r jedes Element viermal die Prozedur <b>UebersetzungSchreiben <\/b>auf: je einmal f&uuml;r die vier Eigenschaften <b>Caption<\/b>, <b>ControlTipText<\/b>, <b>StatusbarText <\/b>und <b>ValidationText<\/b>. Dies sind die vier Eigenschaften herk&ouml;mmlicher Steuerelemente, die f&uuml;r den Benutzer sichtbare Texte enthalten k&ouml;nnen (die Daten, die durch die Steuerelemente angezeigt werden, einmal au&szlig;en vor gelassen).<\/p>\n<p>Danach schlie&szlig;t die Routine das ge&ouml;ffnete Objekt wieder. Die Hauptarbeit &uuml;bernimmt die Prozedur <b>UebersetzungSchreiben<\/b> (s. Listing 3) Sie erwartet vier Parameter:<\/p>\n<p class=\"kastentabelleheader\">Listing 3: Diese Routine erledigt die eigentliche Arbeit, denn sie schreibt nicht nur die Texte, sondern auch noch Platzhalter f&uuml;r die &Uuml;bersetzungen in die &Uuml;bersetzungstabellen.<\/p>\n<pre>Public Sub UebersetzungSchreiben(lngSpracheID As Long, frm As Object, Optional ctl As Control, _\r\nOptional strEigenschaft As String)\r\nDim db As DAO.Database\r\nDim rst As DAO.Recordset\r\nDim strControl As String\r\nDim strBegriff As String\r\nDim lngBegriffID As Long\r\nDim lngSteuerelementtyp As Long\r\nSet db = CurrentDb\r\nSet rst = db.OpenRecordset(&quot;tblSprachen&quot;, dbOpenDynaset)\r\nlngBegriffID = Nz(DMax(&quot;BegriffID&quot;, &quot;tblUebersetzungen&quot;), 0) + 1\r\nDo While Not rst.EOF\r\n    On Error Resume Next\r\n    If Not ctl Is Nothing Then\r\n        strBegriff = ctl.Properties(strEigenschaft)\r\n        strControl = ctl.Name\r\n        lngSteuerelementtyp = ctl.ControlType\r\n    Else\r\n        strBegriff = frm.Properties(strEigenschaft)\r\n        strControl = &quot;&quot;\r\n    End If\r\n    If Err.Number &gt; 0 Then Exit Sub\r\n    On Error GoTo 0\r\n    If Len(strBegriff) &gt; 0 Then\r\n        If rst!SpracheID = lngSpracheID Then\r\n            strBegriff = strBegriff\r\n        Else\r\n            strBegriff = rst!Kuerzel &amp; &quot;_&quot; &amp; strBegriff\r\n        End If\r\n    Else\r\n        strBegriff = &quot;_&quot; &amp; rst!Kuerzel &amp; &quot;_&quot; &amp; strControl &amp; &quot;_&quot; &amp; strEigenschaft\r\n    End If\r\n    db.Execute &quot;INSERT INTO tblUebersetzungen(BegriffID, SpracheID, Begriff) &quot; _\r\n    &amp; &quot;VALUES(&quot; &amp; lngBegriffID &amp; &quot;, &quot; &amp; rst!SpracheID &amp; &quot;, &apos;&quot; &amp; strBegriff &amp; &quot;&apos;)&quot;, _\r\n    dbFailOnError\r\n    On Error Resume Next\r\n    db.Execute &quot;INSERT INTO tblElemente(Objekt, Steuerelement, Steuerelementtyp, &quot; _\r\n    &amp; &quot;BegriffID, Eigenschaft) VALUES(&apos;&quot; &amp; frm.Name &amp; &quot;&apos;, &apos;&quot; &amp; strControl &amp; &quot;&apos;, &apos;&quot; _\r\n    &amp; lngSteuerelementtyp &amp; &quot;&apos;, &quot; &amp; lngBegriffID &amp; &quot;, &apos;&quot; &amp; strEigenschaft &amp; &quot;&apos;)&quot;, _\r\n    dbFailOnError\r\n    On Error GoTo 0\r\n    rst.MoveNext\r\nLoop\r\nEnd Sub<\/pre>\n<ul>\n<li class=\"aufz-hlung\"><b>lngSprachID<\/b>: ID der Ausgangssprache<\/li>\n<li class=\"aufz-hlung\"><b>frm<\/b>: Objektvariable, kann Formular- und Berichts-Objekte aufnehmen<\/li>\n<li class=\"aufz-hlung\"><b>ctl<\/b>: Optionaler Parameter f&uuml;r das Steuerelement<\/li>\n<li class=\"aufz-hlung\"><b>strEigenschaft<\/b>: Name der Eigenschaft, die den anzulegenden Text enth&auml;lt<\/li>\n<\/ul>\n<p>Die Routine &ouml;ffnet zun&auml;chst eine Datensatzgruppe auf Basis der Tabelle <b>tblSprachen<\/b>. Diese durchl&auml;uft sie komplett, denn es soll ja f&uuml;r jede Kombination aus Sprache und Steuerelement beziehungsweise Steuerelementeigenschaft ein Datensatz in der Tabelle <b>tblUebersetzungen <\/b>angelegt werden. Bis dahin sind allerdings noch einige Vorarbeiten zu erledigen: Die erste <b>If&#8230;Then<\/b>-Bedingung pr&uuml;ft, ob das aktuelle Objekt ein Steuerelement oder ein Formular\/Bericht ist. Wenn der &Uuml;bergabeparameter <b>ctl <\/b>nicht leer ist, handelt es sich um ein Steuerelement, sonst um das Formular oder den Bericht selbst. Im Falle eines Steuerelements weist die Routine der Variablen <b>strControl <\/b>den Steuerelementnamen und <b>strBegriff <\/b>den Wert der mit <b>strEigenschaft <\/b>&uuml;bergebenen Eigenschaft zu (wie weiter oben erw&auml;hnt: eine der Eigenschaften <b>Caption<\/b>, <b>ControlTipText<\/b>, <b>StatusbarText <\/b>oder <b>ValidationText<\/b>). Die Variable <b>lngSteuerelementtyp <\/b>wird mit dem Wert der Eigenschaft <b>ControlType <\/b>des Steuerelements gef&uuml;llt.<\/p>\n<p>Falls <b>ctl <\/b>leer ist, soll die Caption eines Formulars oder Steuerelements verarbeitet werden: Dann wird <b>strBegriff <\/b>mit dem Wert der per <b>strEigenschaft <\/b>&uuml;bergebenen Eigenschaft gef&uuml;llt, was immer die <b>Caption <\/b>betrifft.<\/p>\n<p>Im n&auml;chsten Schritt pr&uuml;ft die Routine, ob <b>strBegriff <\/b>einen Wert enth&auml;lt. Das bedeutet im Detail, dass die &uuml;bergebene Eigenschaft des &uuml;bergebenen Steuerelements einen Text enth&auml;lt, der dementsprechend auch &uuml;bersetzt werden sollte.<\/p>\n<p>In diesem Fall vergleicht die Routine die mit dem Parameter <b>lngSpracheID<\/b> &uuml;bergebene Sprach-ID mit der des aktuell durchlaufenen Datensatzes der Tabelle <b>tblSprachen<\/b>.<\/p>\n<p>Wird gerade die mit <b>lngSprachID <\/b>&uuml;bergebene Sprache durchlaufen, handelt es sich um die Sprache, in der die Formulare, Berichte und Steuerelemente aktuell beschriftet sind. Die Beschriftungen werden dann genau so, wie sie sind, in die Tabelle <b>tblUebersetzungen <\/b>geschrieben!<\/p>\n<p>Falls nicht, handelt es sich um eine der Sprachen, in welche die Texte noch &uuml;bersetzt werden m&uuml;ssen. F&uuml;r diese Begriffe werden Dummies in die Tabelle <b>tblUebersetzungen <\/b>geschrieben, die aus dem Sprachk&uuml;rzel (beispielsweise <b>EN <\/b>f&uuml;r englisch) gefolgt von einem weiteren Unterstrich und schlie&szlig;lich dem Text in der Originalsprache bestehen. Der Text <b>Vorname:<\/b> w&uuml;rde also beispielsweise als <b>EN_Vorname: <\/b>gespeichert. Somit k&ouml;nnte der &Uuml;bersetzer die &Uuml;bersetzung allein anhand dieser Ausdr&uuml;cke vornehmen.<\/p>\n<p>Falls der Begriff keinen Wert enth&auml;lt, handelt es sich um ein Steuerelement, das keinen Text f&uuml;r die aktuelle Eigenschaft aufweist. Das hei&szlig;t, dass beispielsweise die Eigenschaft <b>StatusBarText <\/b>leer sein k&ouml;nnte. In dem Fall soll die Routine ebenfalls einen speziellen Eintrag in der Tabelle <b>tblUebersetzungen <\/b>vornehmen: Und zwar einen Unterstrich gefolgt vom Sprachk&uuml;rzel gefolgt von einem weiteren Unterstrich und dem Namen des Steuerelements und der Eigenschaft, also zum Beispiel <b>_DE_Einzelpreis_ControlTipText <\/b>bei einem Steuerelement namens <b>Einzelpreis <\/b>und der Eigenschaft <b>ControlTipText<\/b>.<\/p>\n<p>Schlie&szlig;lich folgen zwei <b>INSERT INTO<\/b>-Anweisungen, die je einen Eintrag in die Tabelle <b>tblUebersetzungen <\/b>und in die Tabelle <b>tblElemente <\/b>vornehmen. Das Ergebnis zeigen Abb. 2 und Abb. 3. Der erste Eintrag der Tabelle <b>tblElemente <\/b>enth&auml;lt beispielsweise einen Wert f&uuml;r Objekt, aber keinen f&uuml;r Steuerelement, was darauf hinweist, dass es sich hierbei um die Caption eines Formulars oder Berichts handelt. Und richtig: Die <b>Eigenschaft <\/b>hei&szlig;t <b>Caption<\/b> und die <b>BegriffID 12<\/b>.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/Mehrsprachigkeit-web-images\/pic003_opt.jpeg\" alt=\"pic003.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Die Tabelle tblElemente mit der Definition der Formulare, Berichte und Steuerelemente, zu denen es &Uuml;bersetzungen der verschiedenen Eigenschaftswerte gibt.<\/span><\/b><\/p>\n<p>Schauen Sie auf die Tabelle <b>tblUebersetzungen <\/b>in Bild 3, erkennen Sie schnell die zu dieser <b>BegriffID <\/b>passenden Eintr&auml;ge, die jeweils f&uuml;r die <b>SpracheID <\/b>Englisch, Deutsch und Franz&ouml;sisch vorliegen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/Mehrsprachigkeit-web-images\/pic004_opt.jpeg\" alt=\"pic004.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Die Tabelle tblUebersetzungen enth&auml;lt die Texte f&uuml;r die Eigenschaftswerte aus der Tabelle tblElemente in den verschiedenen Sprachen.<\/span><\/b><\/p>\n<p>Damit w&auml;re ein wichtiger Teil erledigt &#8211; das Sammeln der Ausdr&uuml;cke, die im Anschluss &uuml;bersetzt werden sollen.<\/p>\n<p><b>Bearbeiten der Texte<\/b><\/p>\n<p>Das Bearbeiten der Texte ist, wenn man bedenkt, dass das Einlesen in wenigen Sekunden erledigt ist, sicher der bei weitem gr&ouml;&szlig;te Aufwand beim Hinzuf&uuml;gen der Mehrsprachigkeit zu einer Anwendung.<\/p>\n<p>Daher sollten Sie dem &Uuml;bersetzer ein einigerma&szlig;en handliches Tool zur Erledigung dieser Aufgabe bereitstellen. In diesem Fall handelt es sich um ein Formular, das im Wesentlichen zwei Unterformulare enth&auml;lt &#8211; eines zur Anzeige der Begriffe in der Ausgangssprache und eines f&uuml;r die Zielsprache. Bild 4 zeigt, wie dieses Formular aussieht.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/Mehrsprachigkeit-web-images\/pic002_opt.jpeg\" alt=\"pic002.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Dieses Formular hilft beim &Uuml;bersetzen der Texte.<\/span><\/b><\/p>\n<p>Die Programmierung des Formulars ist relativ aufw&auml;ndig und wird ausf&uuml;hrlich im Beitrag <b>Unterformulare im Gleichschritt <\/b>(Shortlink 606) erl&auml;utert.<\/p>\n<p>Der Grund daf&uuml;r ist, dass die beiden Unterformulare synchron scrollen sollen, damit Ausgangs- und Zieltext jeweils immer genau nebeneinander angezeigt werden.<\/p>\n<p>Um das Beispielformular aus dem oben erw&auml;hnten Beitrag im hier verwendeten Formular einzusetzen, sind nur wenige Schritte notwendig: Sie m&uuml;ssen lediglich die Objekte <b>frm<\/b>, <b>sfm <\/b>und <b>mdlScrollbar <\/b>in die Zieldatenbank importieren und diese anpassen.<\/p>\n<p>Als Erstes weisen Sie der Datenherkunft des Unterformulars <b>sfm <\/b>die Tabelle <b>tblUebersetzungen <\/b>zu. Entfernen Sie alle Steuerelemente aus dem Entwurf und f&uuml;gen Sie lediglich den Eintrag <b>Begriff <\/b>aus der Feldliste zum Detailbereich hinzu.<\/p>\n<p>&auml;ndern Sie auch die Formularnamen in <b>frmUebersetzungen <\/b>und <b>sfmUebersetzungen<\/b>. Mehr ist im Unterformular nicht zu tun, lediglich dem Hauptformular m&uuml;ssen Sie noch zwei Kombinationsfelder spendieren, damit der Benutzer die jeweilige Sprache ausw&auml;hlen kann. Die Kombinationsfelder hei&szlig;en <b>cboOriginal <\/b>und <b>cboUebersetzung<\/b>. Sie haben beide die Datensatzherkunft <b>tblSprachen<\/b>.<\/p>\n<p>Damit das Formular beim &Ouml;ffnen brauchbare Daten anzeigt, sorgt die folgende Routine f&uuml;r das F&uuml;llen der Kombinationsfelder und das Filtern der Unterformulare:<\/p>\n<pre>Private Sub Form_Current()\r\n    Me!cboOriginal = Me!cboOriginal.ItemData(0)\r\n    Me!cboUebersetzung = _\r\n    Me!cboUebersetzung.ItemData(1)\r\n    Me!sfm1.Form.RecordSource = &quot;SELECT * &quot; _\r\n    &amp; &quot;FROM tblUebersetzungen &quot; _\r\n    &amp; &quot;WHERE SpracheID = &quot; &amp; Me!cboOriginal\r\n    Me!sfm2.Form.RecordSource = &quot;SELECT * &quot; _\r\n    &amp; &quot;FROM tblUebersetzungen &quot; _\r\n    &amp; &quot;WHERE SpracheID = &quot; _\r\n    &amp; Me!cboUebersetzung\r\n    End Sub<\/pre>\n<p>Das Ausw&auml;hlen einer anderen Sprache aus einem der Kombinationsfelder aktualisiert ebenfalls die Datenherkunft des jeweiligen Unterformulars, hier f&uuml;r die Ausgangssprache:<\/p>\n<pre>Private Sub cboOriginal_AfterUpdate()\r\n    Me!sfm1.Form.RecordSource = &quot;SELECT * &quot; _\r\n    &amp; &quot;FROM tblUebersetzungen &quot; _\r\n    &amp; &quot;WHERE SpracheID = &quot; &amp; Me!cboOriginal\r\n    End Sub<\/pre>\n<p>In diesem Formular braucht die mit der &Uuml;bersetzung betraute Person einfach nur alle Elemente zu &uuml;bersetzen, die nicht mit einem Unterstrich beginnen.<\/p>\n<p><b>Wie werden die Beschriftungen angepasst<\/b><\/p>\n<p>Fehlt noch das Anwenden der alternativen Sprachen auf die Formulare und Berichte. Die bisherige Arbeit war keinesfalls umsonst: Sie haben optimale Voraussetzungen geschaffen, um Ihre Formulare und Berichte durch einen einfachen Funktionsaufruf in die gew&uuml;nschte Sprache zu transportieren. Die Funktion hei&szlig;t <b>SpracheEinstellen <\/b>und erwartet zwei Parameter &#8211; einen Verweis auf das Objekt sowie die ID der gew&uuml;nschten Sprache (s. Listing 4).<\/p>\n<p class=\"kastentabelleheader\">Listing 4: Das Einstellen der Texte einer bestimmten Sprache geschieht in dieser Routine.<\/p>\n<pre>Public Sub SpracheEinstellen(obj As Object, lngSpracheID As Long)\r\nDim db As DAO.Database\r\nDim rst As DAO.Recordset\r\nDim strObjekt As String\r\nstrObjekt = obj.Name\r\nSet db = CurrentDb\r\nSet rst = db.OpenRecordset(&quot;SELECT Steuerelement, Eigenschaft, Begriff FROM tblElemente &quot; _\r\n&amp; &quot;INNER JOIN tblUebersetzungen ON tblElemente.BegriffID = tblUebersetzungen.BegriffID &quot; _\r\n&amp; &quot;WHERE Objekt = &apos;&quot; &amp; strObjekt &amp; &quot;&apos; AND SpracheID = &quot; &amp; lngSpracheID, dbOpenDynaset)\r\nDo While Not rst.EOF\r\n    If Not Left(rst!Begriff, 1) = &quot;_&quot; Then\r\n        If Len(rst!Steuerelement) = 0 Then\r\n            obj.Properties(rst!Eigenschaft) = rst!Begriff\r\n        Else\r\n            obj.Controls(rst!Steuerelement).Properties(rst!Eigenschaft) = rst!Begriff\r\n        End If\r\n    End If\r\n    rst.MoveNext\r\nLoop\r\nEnd Sub<\/pre>\n<p>Die Routine &ouml;ffnet zun&auml;chst eine Datensatzgruppe, welche die Tabellen <b>tblElemente <\/b>und <b>tblUebersetzungen <\/b>enth&auml;lt und die drei Felder <b>Steuerelement<\/b>, <b>Eigenschaft <\/b>und <b>Begriff <\/b>zu den Datens&auml;tzen ausgibt, die dem Objekt und der &uuml;bergebenen <b>SpracheID <\/b>entsprechen. Diese Datens&auml;tze durchl&auml;uft die Routine im Anschluss und weist den verschiedenen Eigenschaften von Formularen und Berichten sowie deren Steuerelementen die angegebenen Texte zu.<\/p>\n<p>Am einfachsten k&ouml;nnen Sie dies am Beispielformular <b>frmArtikel<\/b> nachvollziehen, das bereits ein Kombinationsfeld zum Ausw&auml;hlen der Sprache besitzt. Die Ereigniseigenschaft <b>Nach Aktualisierung <\/b>dieses Kombinationsfeldes enth&auml;lt nur eine Anweisung:<\/p>\n<pre>Private Sub cboSprache_AfterUpdate()\r\n    SpracheEinstellen Me, Me!cboSprache\r\n    End Sub<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Der Screenshot des Formulars aus Bild 5 zeigt indes, wo es noch hapert &#8211; beispielsweise an der Gr&ouml;&szlig;e der Steuerelemente, die f&uuml;r Texte, die gr&ouml;&szlig;er als die deutschen Originale sind, nicht ausreichen. Damit besch&auml;ftigen wir uns in einer Fortsetzung zu diesem Beitrag. Es gibt dort noch viel mehr zu tun: Wie sieht es mit Men&uuml;s und Ribbons, mit Meldungsfenstern und Inputfenstern, mit Formaten von Zahlen, W&auml;hrungen und Datumsangaben oder mit Daten aus, die &uuml;bersetzt werden m&uuml;ssen Und wie kann man dem &Uuml;bersetzer die Arbeit erleichtern Bleiben Sie dran!<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/Mehrsprachigkeit-web-images\/pic005_opt.jpeg\" alt=\"pic005.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Ein Formular mit &uuml;bersetzten Texten<\/span><\/b><\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Mehrsprachigkeit.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/2600E49E-4F48-4BE6-A813-8E4F62F37F04\/aiu_611.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer seine Anwendung nicht nur mit einer Sprache ausstatten m&ouml;chte, sondern diese auch in anderen L&auml;ndern verf&uuml;gbar machen will, hat zwei M&ouml;glichkeiten: Entweder er erstellt f&uuml;r jede Sprache eine andere Version oder er bringt einer einzigen Anwendung bei, auf Knopfdruck die Sprache zu wechseln. Erfahren Sie, welche Version sinnvoller ist und wie Sie eine mehrsprachige Anwendung in die Tat umsetzen.<\/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":[662008,66032008,44000040,44000028,44000027],"tags":[],"class_list":["post-55000611","post","type-post","status-publish","format-standard","hentry","category-662008","category-66032008","category-Allgemein","category-Ergonomie_und_Benutzeroberflaeche","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Mehrsprachige Anwendungen - 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\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mehrsprachige Anwendungen\" \/>\n<meta property=\"og:description\" content=\"Wer seine Anwendung nicht nur mit einer Sprache ausstatten m&ouml;chte, sondern diese auch in anderen L&auml;ndern verf&uuml;gbar machen will, hat zwei M&ouml;glichkeiten: Entweder er erstellt f&uuml;r jede Sprache eine andere Version oder er bringt einer einzigen Anwendung bei, auf Knopfdruck die Sprache zu wechseln. Erfahren Sie, welche Version sinnvoller ist und wie Sie eine mehrsprachige Anwendung in die Tat umsetzen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:21:22+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/69d16471821c4cd2979a417c3b035ab4\" \/>\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=\"17\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\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Mehrsprachige Anwendungen\",\"datePublished\":\"2021-02-11T21:21:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/\"},\"wordCount\":2844,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/69d16471821c4cd2979a417c3b035ab4\",\"articleSection\":{\"0\":\"2008\",\"1\":\"3\\\/2008\",\"3\":\"Ergonomie und Benutzeroberfl\u00e4che\",\"4\":\"L\u00f6sungen\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/\",\"name\":\"Mehrsprachige Anwendungen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/69d16471821c4cd2979a417c3b035ab4\",\"datePublished\":\"2021-02-11T21:21:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/69d16471821c4cd2979a417c3b035ab4\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/69d16471821c4cd2979a417c3b035ab4\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mehrsprachige_Anwendungen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mehrsprachige Anwendungen\"}]},{\"@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 - 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\/","og_locale":"de_DE","og_type":"article","og_title":"Mehrsprachige Anwendungen","og_description":"Wer seine Anwendung nicht nur mit einer Sprache ausstatten m&ouml;chte, sondern diese auch in anderen L&auml;ndern verf&uuml;gbar machen will, hat zwei M&ouml;glichkeiten: Entweder er erstellt f&uuml;r jede Sprache eine andere Version oder er bringt einer einzigen Anwendung bei, auf Knopfdruck die Sprache zu wechseln. Erfahren Sie, welche Version sinnvoller ist und wie Sie eine mehrsprachige Anwendung in die Tat umsetzen.","og_url":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:21:22+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/69d16471821c4cd2979a417c3b035ab4","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Mehrsprachige Anwendungen","datePublished":"2021-02-11T21:21:22+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/"},"wordCount":2844,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/69d16471821c4cd2979a417c3b035ab4","articleSection":{"0":"2008","1":"3\/2008","3":"Ergonomie und Benutzeroberfl\u00e4che","4":"L\u00f6sungen"},"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/","url":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/","name":"Mehrsprachige Anwendungen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/69d16471821c4cd2979a417c3b035ab4","datePublished":"2021-02-11T21:21:22+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/69d16471821c4cd2979a417c3b035ab4","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/69d16471821c4cd2979a417c3b035ab4"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Mehrsprachige_Anwendungen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Mehrsprachige Anwendungen"}]},{"@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\/55000611","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=55000611"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000611\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}