Sprachen Management (Language Handling)

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Sprachen Management (Language Handling)

#1

Beitrag von thowe »

Moin, euch Allen :-)

Aus einer Notwendigkeit aus einem Projekt heraus und in Erinnerung das heb bereits schon einmal eine "Language Handling" hier in einem Thread gelöst hat, möchte ich euch - als Anstoß - kurze Snippets zum Thema Sprachen Management / Language Handling vorstellen.

WICHTIG!

Der Aufruf mit VBA Application.LanguageSettings.LanguageID(msoLanguageIDUI) gibt die eingestellte Sprache (als Long (Dec)) der Office Applikation zurück.
Nicht berücksichtigt wird die Windows System Display Language, die für viele "Anzeigen" wie auch beispielsweise MsgBopx() verwendet wird.

Ergänzend habe ich euch auch eine Liste der Windows Language Code Identifier (LCID) hochgeladen.
MSLanguage Code Identifier.xlsx
(17.08 KiB) Noch nie heruntergeladen
Hilfreiche Links können sein:
https://bettersolutions.com/vba/macros/ ... nguage.htm
https://learn.microsoft.com/en-us/offic ... ernational

Code: Alles auswählen

Function SYSTEM_GetLanguageApplication() As String

    Dim lngLanguageCode As Long
    lngLanguageCode = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
    
    Select Case lngLanguageCode
        Case 1031, 3079, 5127, 4103
            SYSTEM_GetLanguageApplication = "Deutsch: de-DE"
    End Select
    
End Function

Function SYSTEM_GetLanguageSystem()
    
    Dim lngLanguageCode As Long
    
    lngLanguageCode = Application.International(XlApplicationInternational.xlCountryCode)
    Select Case lngLanguageCode
        Case 1:
            SYSTEM_GetLanguageSystem = "English"
        Case 33:
            SYSTEM_GetLanguageSystem = "Francaise"
        Case 49:
            SYSTEM_GetLanguageSystem = "Deutsch"
    End Select

End Function


Function SYSTEM_GetWindowsDisplayLanguage()
    
    Dim lngLanguageCode As Long
    
    lngLanguageCode = GetUserDefaultUILanguage()
    
    Select Case lngLanguageCode
    
        Case 1031, 3079, 5127, 4103
            SYSTEM_GetWindowsDisplayLanguage = "Deutsch: de-DE"
            
    End Select
End Function
Viel Spaß beim weiter VBAsteln, damit

LG thowe
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Sprachen Management (Language Handling)

#2

Beitrag von d'r Bastler »

Moin thowe,

wie kann man in Dein Konstrukt Wörter, die nicht als Systemvariable existieren integrieren?

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Sprachen Management (Language Handling)

#3

Beitrag von thowe »

Moin heb....,
wie kann man in Dein Konstrukt Wörter, die nicht als Systemvariable existieren integrieren
... -> was meinst du damit - beispielhaft - genau?

lg thowe
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Sprachen Management (Language Handling)

#4

Beitrag von d'r Bastler »

Moin,
Ich meine individuelle Benennungen z.B. in Tabellen (Spaltenüberschriften) oder Captions von USF-Controls. %USERNAME oder %PARENTPATH sind System-immanent.
lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Sprachen Management (Language Handling)

#5

Beitrag von thowe »

Aah, okay heb,

ja daran habe ich gedacht.
Es gibt mehrere Möglichkeiten.
Ich möchte als erster Vorschlag die Sprachenhandhabung wie folgt designen:

eine Klasse clsLanguage
eine Dictionary p_dicLanguage

Unter Dictionary, mehrere Werte zu einem Schlüssel habe ich dargestellt, wie man einem Schlüssel mehrere Werte zuweisen kann.

Damit könnte man zum Beispiel - jetzt 'mal ungeprüft - einem Zelleninhalt eine Übersetzung in einer oder - gleichzeitig - mehrerere Sprachen zuordnen. In etwa:

Code: Alles auswählen

	With ActiveSheet
		.Cells(Header, 1).Value = GetTranslation("Espagna")
	End with
und GetTranslation könnte wie folgt aussehen:

Code: Alles auswählen

Function GetTranslation(strKey As String)

   'check if not Dictionary is NULL (Nothing)
    If p_dicLanguage Is Nothing Then Call SetTranslation
    If p_dicLanguage.Exists(strKey) Then GetTranslation = p_dicLanguage(strKey)
    
End Function
-> wie oben geschrieben, ungeprüft, schnell aus der Hüfte geschossen...

Habe ich deine Frage richtig verstanden und wie denkst du über diese vorgeschlagene Umsetzung?
Gerne können wir gemeinsam VBAsteln.....

LG
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Sprachen Management (Language Handling)

#6

Beitrag von d'r Bastler »

Danke thowe,
Du hast ...
lass mich mit Deinem Code erst einmal ein bisschen spielen ;-)
lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Ergänzung Sprachen Management (Language Handling)

#7

Beitrag von thowe »

Hallo,

ich hab ehier in #1 unter anderem folgende Function zur Verfügung gestellt.
Function SYSTEM_GetWindowsDisplayLanguage()

Damit das läuft muss folgendes in den Modulkopf (also ganz oben ins Modul), gleich nach Option Explicit

Code: Alles auswählen

If #VBA7 then
    Private Declare PtrSafe Function GetUserDefaultUILanguage Lib "kernel32.dll" () As Long
Else
    Private Declare Function GetUserDefaultUILanguage Lib "kernel32.dll" () As Long
End if
Das hatte ich bei copy & paste übersehen

lg thowe
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste