Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB 5/6 0055: LCID in RFC1766-Zeichenfolge umwandeln

 von 

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Sonstiges
  • System

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
LCID, LocaleID, RFC1766, Ländercode, Sprachcode

Damit er übernommen werden kann, müssen noch Änderungen daran vorgenommen werden. Sofern Sie der Autor sind, können Sie sich anmelden, um die Liste einzusehen.

Der Vorschlag wurde erstellt am: 25.02.2008 15:25.
Die letzte Aktualisierung erfolgte am 20.01.2011 23:40.

Zurück zur Übersicht

Beschreibung  

Die LCID oder auch LocaleID ist ein Länder- bzw Sprachencode der durch eine Integer-Zahl dargestellt wird. Diese Zahl setzt sich zusammen aus einem Anteil für die Sprache und einem Anteil für das jeweilige Land. Dabei ist jeder Kombination aus Land und Sprache eine andere Zahl zugeordnet. Für Deutschland ist das &H400, für Österreich &HC00. (Für andere Sprachen kann &H400 und &HC00 allerdings auch für andere Länder stehen) Für die Sprache deutsch, die beiden Ländern gemeinsam ist, ist das &H7 (die Zahl für die Sprache ist einmalig). In Kombination ergibt sich hieraus für deutsch in Deutschland &H407 und für deutsch in Österreich &HC07. Gebraucht werden kann so eine LocaleID im Zusammenhang mit länderspezifischen Einstellungen, wie Datumsformat, Währungsformat, etc. Da eine Zahl für Nichteingeweihte nicht sehr aussagekräftig ist, gibt es zu jeder LocaleID auch einen String-Schlüssel. Die beiden Funktionen wandeln eine LocaleID in einen aussagekräftigeren String um. Das gleiche Ergebnis könnte übrigens erreicht werden, wenn man in der Registry aus dem Schlüssel: "HKLM\SOFTWARE\Classes\MIME\Database\Rfc1766" alle (ca. 120) Einträge ausliest. (siehe auch Tipp: "Alle Sprachen auflisten")
Im .NET-Framework bietet die Klasse CultureInfo im Namespace System.Globalization die entsprechende Funktionalität. Über ihre Konstruktoren kann sie entweder mit einer LCID oder der RFC1766-Zeichenfolge initalisiert werden. Die Eigenschaft "Name" der Klasse liefert die RFC1766-Zeichenfolge, die Eigenschaft LCID die LCID als Integer zurück.
Die in diesem Tipp vorgestellten Funktionen machen dem Sinn nach dasselbe wie folgender Code in VB.NET:
MsgBox(New Globalization.CultureInfo("de-AT").LCID.ToString)
MsgBox(New Globalization.CultureInfo(&HC07).Name)

Schwierigkeitsgrad

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

LcidToRfc1766A, Rfc1766ToLcidA

Download:

Download des Beispielprojektes [1,59 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' ------------- Anfang Projektdatei Projekt1.vbp -------------

' --------- Anfang Formular "Form1" alias Form1.frm  ---------

' Steuerelement: Schaltfläche "Command1"

Option Explicit

Private Sub Command1_Click()

    MsgBox ConvertLCIDToRfc1766(&H407) ' de
    MsgBox ConvertLCIDToRfc1766(1031)  ' de
    MsgBox ConvertLCIDToRfc1766(&HC07) ' de-AT
    MsgBox ConvertLCIDToRfc1766(&H7)   ' de-DE
    MsgBox ConvertLCIDToRfc1766(2077)  ' sv-FI
    MsgBox ConvertLCIDToRfc1766(&H1D)  ' sv-SE
    MsgBox ConvertLCIDToRfc1766(&H81D) ' sv-FI

    MsgBox Hex$(ConvertRfc1766ToLCID("de"))
    MsgBox Hex$(ConvertRfc1766ToLCID("de-de"))
    MsgBox Hex$(ConvertRfc1766ToLCID("de-at"))
    MsgBox Hex$(ConvertRfc1766ToLCID("de-AT"))
    MsgBox Hex$(ConvertRfc1766ToLCID("sv-fi"))
    MsgBox CStr(ConvertRfc1766ToLCID("sv-fi"))
    MsgBox CStr(ConvertRfc1766ToLCID("sv-SE"))

End Sub

' ---------- Ende Formular "Form1" alias Form1.frm  ----------

' -------- Anfang Modul "ModMlang" alias ModMLang.bas --------

Option Explicit

' MLang.dll
Public Declare Function LcidToRfc1766A Lib "mlang" ( _
                        ByVal Locale As Long, _
                        ByVal pszRfc1766 As String, _
                        ByVal nChar As Long) As Long

' Public Declare Function LcidToRfc1766W Lib "mlang" ( _
'    ByVal Locale As Long, _
'    ByVal pszRfc1766 As Long, _
'    ByVal nChar As Long) As Long

Public Declare Function Rfc1766ToLcidA Lib "mlang" ( _
                        ByRef pLocale As Long, _
                        ByVal pszRfc1766 As String) As Long

' Public Declare Function Rfc1766ToLcidW Lib "mlang" ( _
'    ByRef pLocale As Long, _
'    ByVal pszRfc1766 As Long) As Long

Public Function ConvertLCIDToRfc1766(aLCID As Long) As String

    Dim hr As Long
    Dim i As Long

    ConvertLCIDToRfc1766 = String$(6, vbNullChar)
    hr = LcidToRfc1766A(aLCID, ConvertLCIDToRfc1766, 6)

    If hr = 0 Then

        For i = 0 To 1

            If Len(ConvertLCIDToRfc1766) > 3 + i Then
                Mid$(ConvertLCIDToRfc1766, 4 + i, 1) = UCase$(Mid$(ConvertLCIDToRfc1766, 4 + i, 1))
            End If

        Next

    Else

        ' Msgbox "Fehler"
    End If

End Function

Public Function ConvertRfc1766ToLCID(aStrrfc1766 As String) As Long

    Dim hr As Long

    hr = Rfc1766ToLcidA(ConvertRfc1766ToLCID, aStrrfc1766)

End Function

' --------- Ende Modul "ModMlang" alias ModMLang.bas ---------

' -------------- Ende Projektdatei Projekt1.vbp --------------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.