APP mehrsprachig

Direkt zum Seiteninhalt

APP mehrsprachig

Tiggi
Veröffentlicht von Martin Küttel in VBA Code · 3 Oktober 2022
Tags: VBACode
Die erste Hürde: Die Einstellung des PC.
Ausschnitt wie die Sprachen im PC eingestellt werden.

Wie kann man erkennen welche Sprache bei einem PC eingestellt ist.
Die Konstanten msoLanguageIDxxxxxxx legen die gewählte Sprache fest.
Hier ein kleiner Auszug wie diese definiert sind.

Allein im Englischen Sprachbereich gibt es 14 Ideome. Kaum weniger sind es beim Spanischen und beim Französischen. Total hat Windows 217 msoLanguageID... definiert.
Will man nun wissen welche Sprache am genutzen PC eingestellt ist, muss man diese Konstante suchen und lesen.
Der folgende Code zeigt dies.
Der Speicherort  ist z.B. die Tabelle Val.
Sheets("Val").Range("OfficeSpracheID") = objLangSet.LanguageID(msoLanguageIDInstall) ' Id der Sprache
Will man nun mehrsprachige APP's erstellen muss man die Codes entsprechend anpassen.
In diesem Beispiel beschränke ich mich auf die Sprachen;
Englisch (teilweise), Französisch (teilweise), Italienisch. Spanisch(teilweise). Teilweise heisst, dass Europa und Nordamerika berücksichtigt sind.

So entstand der folgende Code;
   Select Case intOfficeSpracheID
       Case Is = 1031, 2055, 3079, 4103 ' Deutsch
strSprache = "De"
           Kal_WS_De   'Kalender zeichnen
       Case Is = 1033, 2057, 4105, 6153, 3081 ' Englisch
strSprache = "En"
          Kal_WS_En   'Kalender zeichnen
       Case Is = 1036, 2060, 3084, 4108, 6156 ' Französisch
strSprache = "Fr"
           Kal_WS_Fr   'Kalender zeichnen
       Case Is = 1040, 2036 ' Italienisch
strSprache = "It"
           Kal_WS_It   'Kalender zeichnen
       Case Is = 1034, 3082, 11274, 16394, 13322, 9226, 6154, 8202 ' Spanisch
strSprache = "Es"
           Kal_WS_Es   'Kalender zeichnen
       Case Else
           Kal_WS_De   'Kalender zeichnen wenn Sprachennicht erkannt dann Deutsch
   End Select

Die zweite Hürde: Tage und Monate
Betrachten wir ... was ein Übersetzter macht (z.B. Gooble-Translator).

Zwei Probleme sind offensichtlich!
Gross- und Kleinschreibung ist unterschiedlich und beim Französichen wird sogar falsch übersetzt!.
D.h. man muss entsprechende Korekkturen in der APP programmieren.

Gross-Kleinschreibung kann man wie folgt lösen;
strWoTag ist eine Variable (string)
Es soll ein Kalender in eine Tabelle gezeichnet werden, wie folgendes Bild zeigt;



strWoTag = Format(KalStart, "dddd") 'Wochentag ausgeschrieben (z.B Montag, Dienstag ...)
Sicherstellen dass Wochentag immer mit Grossbuchstaben beginnt
strFistChar = UCase(Left(strWoTag, 1)) 'Erster Buchstaben Gross setzten
lngTextLänge = Len(strWoTag) - 1    'Textlänge -1 bestimmen
strWoTag = strF & Right(strWoTag, lngTextLänge) 'Anfangsbuchstaben und Resttext zusammenfügen

Mit UCase wird der erste Buchstaben des Tages immer auf Gross gestellt.
Damit man auch die PC Einstellungen berücksichtigen kann, müssen die Tagesnamen wir folgt angepasst werden.

Wochentag der Sprache anpassen, Ausgangssprache ist Englisch / Zweitsprache  Spanisch
           Select Case strSprache
               Case Is = "En"
                   .Cells(lngI, 2).Value = strWoTag 'Ausgangssprache braucht keine Anpassung
               Case Is = "Es"
                   If strWoTag = "Monday" Then .Cells(lngI, 2).Value = "Lunes"
                   If strWoTag = "Tuesday" Then .Cells(lngI, 2).Value = "Martes"
                   If strWoTag = "Wednesday" Then .Cells(lngI, 2).Value = "Mercoledì"
                   If strWoTag = "Thursday" Then .Cells(lngI, 2).Value = "Jueves"
                   If strWoTag = "Friday" Then .Cells(lngI, 2).Value = "Viernes"
                   If strWoTag = "Saterday" Then .Cells(lngI, 2).Value = "Sábato"
                   If strWoTag = "Sonnday" Then .Cells(lngI, 2).Value = "Domingo"
           End Select
Wochentag der Sprache anpassen, Ausgangssprache ist Spanisch / Zweitsprache  Englisch
           Select Case strSprache
               Case Is = "En"
                   If strWoTag = "Lunes" Then .Cells(lngI, 2).Value = "Monday"
                   If strWoTag = "Martes" Then .Cells(lngI, 2).Value = "Tuesday"
                   If strWoTag = "Mercoledi" Then .Cells(lngI, 2).Value = "Wednesday"
                   If strWoTag = "Giovedi" Then .Cells(lngI, 2).Value = "Thursday"
                   If strWoTag = "Viernes" Then .Cells(lngI, 2).Value = "Friday"
                   If strWoTag = "Sábato" Then .Cells(lngI, 2).Value = "Saterday"
                   If strWoTag = "Domingo" Then .Cells(lngI, 2).Value = "Sonnday"
               Case Is = "Es"
                   .Cells(lngI, 2).Value = strWoTag 'Ausgangssprache braucht keine Anpassung
           End Selects
Will man mehr als zwei Sprachen muss man analog vorgehen.
Immer die Ausgangsprache des PC ist die Basis. Alle andern Sprachen müssen angepasst werden.
Dasselbe Spiel ist mit den Monatbezeichnungen notwendig, falls diese im Kalender gelistet werden.

Die dritte Hürde: Formulare Texte, Label ...
Die PC-Sprache sorgt dafür, dass die Systemmeldungen, der Toolbar und ähnliches in der gewählten Spache erscheint.
Was aber in der APP programmiert ist, das muss der Programmierer erledigen.

Das folgende Beispiel zeigt einige Aspekte.



Die Anpassung löst man am besten beim Formularaufruf, also in der Routine Private Sub UserForm_Activate()
Die Variable strSprache ist das internationale Sprachkürzel (z.B, De = Deutschland, En= England, Fr=Frankreich ...).

Select Case strSprache
       Case Is = "En"
           UF_EinstellWS_L.Caption = "Settings  [English]"
           lblTitel = "Title"
           lblFirma = "Shop"
           lblNutzer = "User"
           lblStdV = "Hours in the morning"
           lblStdN = "Hours afternoon"
           lblTabAnsicht = "Define table view"
           LblAnl = " Set table view."
           CheckKopfbeschriftung.Caption = "Header lettering"
           CheckBearbeitungszeile.Caption = "Edit line"
           CheckToolbar.Caption = "Toolbar"
       Case Is = "Es"
           UF_EinstellWS_L.Caption = "Ajustes  [Esapñol]"
           lblTitel = "Titulo"
           lblFirma = "Comercio"
           lblNutzer = "Usuario"
           lblStdV = "Horas de la mañana"
           lblStdN = "Horas de la tarde"
           lblTabAnsicht = "Establecer vista de tabla."
           CheckKopfbeschriftung.Caption = "Letras de encabezado"
           CheckBearbeitungszeile.Caption = "Línea de edición"
           CheckToolbar.Caption = "Barra de herramientas"
   End Select

Was ebenfals angepasst werden muss sind Meldungsfenster MsgBox() oder Eingabefenster InputBox() z.B.

Select Case strSprache
Case Is = "De"
           MsgBox "Noch keine Tabelle selektiert!", vbInformation, "Bitte zuerst selektieren."
       Case Is = "En"
           MsgBox "No table selected yet!", vbInformation, "Please select first."
       Case Is = "Fr"
           MsgBox "Aucune table sélectionnée pour le moment !", vbInformation, "Veuillez d'abord sélectionner."
       Case Is = "It"
           MsgBox "Nessuna tabella ancora selezionata!", vbInformation, "Seleziona prima."
       Case Is = "Es"
           MsgBox "Nessuna tabella ancora selezionata!", vbInformation, "Seleziona prima."
   End Select
Dies sei der kleine Einblick in die Problematik.
Meine APP "Einsatzplan" ist auf der Webseite zum Herunterladen bereitgestellt. Dies APP ist 5-sparachig programmiert.
BLOG ENDE


Zurück zum Seiteninhalt