APP mehrsprachig
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 zeichnenCase 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 zeichnenCase Is = 1040, 2036 ' Italienisch
strSprache = "It"
Kal_WS_It 'Kalender zeichnenCase Is = 1034, 3082, 11274, 16394, 13322, 9226, 6154, 8202 ' Spanisch
strSprache = "Es"
Kal_WS_Es 'Kalender zeichnenCase ElseKal_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 ...).
findet man im Internet https://www.laenderdaten.info/laendercodes.php.
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