Récupérer des informations locales et systeme (langue, région, séparateur décimal, séparateur liste, ...)

Contenu du snippet

Voici une petite methode qui permet la récupération d'un tas d'infos sur la langue, la région, etc du système.

PS : Pour une bonne utilisation, un passage par la MSDN est tout de même recommandé...

Source / Exemple :


NameSpace LocaleInfo

Public Module _MyLocaleInformationsFunctions
    ' Déclaration de fonction externe, dans une API de Windows.
    Private Declare Function GetLocaleInfoA Lib "kernel32" Alias "GetLocaleInfoA" (ByVal intLocale As Integer, ByVal intType As Integer, ByVal strRetour As String, ByVal intLongueurRetour As Integer) As Integer

    ''' <summary>
    ''' Retourne une information locale (255 Caractères)
    ''' </summary>
    ''' <param name="Flag">Nom du paramètre</param>
    Public Function GetLocaleInfo(ByVal Flag As GetLocaleInfoFlags) As String
        Dim Result As String
        Result = Space(255) 'Créer une chaîne de longueur 255
        GetLocaleInfoA(0, Flag, Result, Len(Result))
        Return Result
    End Function

    ''' <summary>
    ''' Cette fonction renvoie True si Windows est français.
    ''' </summary>
    Public Function IsFrench() As Boolean
        Dim Result As String
        Result = Space(5) 'Créer une chaîne de longueur 5
        GetLocaleInfoA(0, GetLocaleInfoFlags.LOCALE_ILANGUAGE, Result, Len(Result))

        ' Si les caractères 3 et 4 de Retour valent "0c", Windows est français.
        ' Les 2 premiers caractères indiquent la variante linguistique.
        Result = Left(Result, 4)
        Select Case Microsoft.VisualBasic.Strings.Right(Result, 2)
            Case "0c"
                Return True
            Case Else
                Return False
        End Select
    End Function

    ''' <summary>
    ''' Cette fonction renvoie True si Windows est anglais.
    ''' </summary>
    <Obsolete("Cette fonction n'a pas été testée !")> _
    Public Function IsEnglish() As Boolean
        Dim Result As String
        Result = Space(5) 'Créer une chaîne de longueur 5
        GetLocaleInfoA(0, GetLocaleInfoFlags.LOCALE_ILANGUAGE, Result, Len(Result))

        ' Si les caractères 3 et 4 de Retour valent "0c", Windows est français.
        ' Les 2 premiers caractères indiquent la variante linguistique.
        Result = Left(Result, 4)
        Select Case Microsoft.VisualBasic.Strings.Right(Result, 2)
            Case "09"
                Return True
            Case Else
                Return False
        End Select
    End Function

    ''' <summary>
    ''' Retourne la langue du systeme (Nom Complet En Anglais (US); ISO Standard 639) ("Unkown" si non trouvé)
    ''' </summary>
    Public Function GetLanguage() As String
        On Error GoTo MyErr
        Dim Result As String
        Result = Space(255) 'Créer une chaîne de longueur 255
        Dim length As Integer = GetLocaleInfoA(0, GetLocaleInfoFlags.LOCALE_SLANGUAGE, Result, Len(Result))
        Return Left(Result, length - 1)
MyErr:  Return "Unkown"
    End Function

    ''' <summary>
    ''' Retourne le nom du language ayant pour ID LcID ("Unkown" si non trouvé)
    ''' </summary>
    ''' <param name="LcID">ID de la langue</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function GetLanguageOfLcid(ByVal LcID As Long) As String
        On Error GoTo MyErr
        Dim Result As New String(vbNullChar(0), 255)
        Dim length As Integer = GetLocaleInfoA(LcID, GetLocaleInfoFlags.LOCALE_SLANGUAGE, Result, Len(Result))
        Return Left(Result, length - 1)
MyErr:  Return "Unkown"
    End Function

    ''' <summary>
    ''' Retourne le systeme métrique employé par le systeme. (-1 si non trouvé)
    ''' </summary>
    Public Function GetMeasureSystem() As MeasureSystem
        On Error Resume Next
        Return Int(Val(GetLocaleInfo(GetLocaleInfoFlags.LOCALE_IMEASURE)))
        Return -1
    End Function
End Module

''' <summary>
''' Enumération des système de mesure
''' </summary>
''' <remarks></remarks>
Public Enum MeasureSystem
    ''' <summary>
    ''' Indique que le systeme de mesure n'a pas su être récupéré
    ''' </summary>
    ''' <remarks></remarks>
    Unkown = -1
    ''' <summary>
    ''' Systeme de mesure Anglais (Miles, ...)
    ''' </summary>
    IMEASURE_ENGLISH = 1
    ''' <summary>
    ''' Systeme de mesure Européen (Mètres, ...)
    ''' </summary>
    IMAESURE_METRIC = 0
End Enum

''' <summary>
''' Ensemble des flags utilisable pour la fonction GetLocaleInformation
''' </summary>
Public Enum GetLocaleInfoFlags As Integer
    ''' <summary>
    ''' LANGID in hexadecimal digits
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_ILANGUAGE = 1
    ''' <summary>
    ''' Full localized name of the language
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SLANGUAGE = 2         '  
    ''' <summary>
    ''' Full English U.S. name of the language ISO Standard 639
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SENGLANGUAGE = 4097   '  
    ''' <summary>
    ''' Abbreviated name of the language, ISO Standard 639
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVLANGNAME = 3   '  
    ''' <summary>
    ''' Native name of the language
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SNATIVELANGNAME = 4   '  
    ''' <summary>
    ''' Country code, based on international phone codes
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_ICOUNTRY = 5          '  
    ''' <summary>
    ''' The full localized name of the country.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SCOUNTRY = 6          '  
    ''' <summary>
    ''' The full English U.S. name of the country.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SENGCOUNTRY = 4098    '  
    ''' <summary>
    ''' Abbreviated name of the country ISO Standard 3166.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVCTRYNAME = 7   '  
    ''' <summary>
    ''' Native name of the country.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SNATIVECTRYNAME = 8   '  
    ''' <summary>
    ''' LANGID for the principal language spoken in this locale.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_IDEFAULTLANGUAGE = 9  '  
    ''' <summary>
    ''' Country code for the principal country in this locale.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_IDEFAULTCOUNTRY = 10  '  
    ''' <summary>
    ''' OEM code page associated with the country.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_IDEFAULTCODEPAGE = 11 '  
    ''' <summary>
    ''' Characters used to separate list items.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SLIST = 12            '  
    ''' <summary>
    ''' 0 for metric system (S.I.) and 1 for the U.S.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_IMEASURE = 13         '  
    ''' <summary>
    ''' decimal separator
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SDECIMAL = 14         '  
    ''' <summary>
    ''' thousand separator
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_STHOUSAND = 15        '  
    ''' <summary>
    ''' Sizes for each group of digits to the left of the decimal.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SGROUPING = 16        '  
    ''' <summary>
    ''' number of fractional digits
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_IDIGITS = 17          '  
    ''' <summary>
    ''' 0 means use no leading zeros; 1 means use leading zeros.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_ILZERO = 18           '  
    ''' <summary>
    ''' Ten characters equivalent of the ASCII 0-9.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SNATIVEDIGITS = 19    '  
    ''' <summary>
    ''' local monetary symbol
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SCURRENCY = 20        '  
    ''' <summary>
    ''' International monetary symbol ISO 4217.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SINTLSYMBOL = 21      '  
    ''' <summary>
    ''' monetary decimal separator
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONDECIMALSEP = 22   '  
    ''' <summary>
    ''' monetary thousand separator
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHOUSANDSEP = 23  '  
    ''' <summary>
    ''' monetary grouping
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONGROUPING = 24     '  
    ''' <summary>
    ''' # local monetary digits
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_ICURRDIGITS = 25      '  
    ''' <summary>
    ''' # intl monetary digits
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_IINTLCURRDIGITS = 26  '  
    ''' <summary>
    ''' positive currency mode
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_ICURRENCY = 27        '  
    ''' <summary>
    ''' negative currency mode
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_INEGCURR = 28         '  
    ''' <summary>
    ''' date separator
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SDATE = 29            '  
    ''' <summary>
    ''' time separator
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_STIME = 30            '  
    ''' <summary>
    ''' short date format string
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SSHORTDATE = 31       '  
    ''' <summary>
    ''' long date format string
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SLONGDATE = 32        '  
    ''' <summary>
    ''' time format string
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_STIMEFORMAT = 4099    '  
    ''' <summary>
    ''' short date format, 0 M?D?Y,1 D?M?Yr,2 Y?M?D
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_IDATE = 33            '  
    ''' <summary>
    ''' long date format, 0 M?D?Y,1 D?M?Y,2 Y?M?D
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_ILDATE = 34           '  
    ''' <summary>
    ''' time format, 0 AM/PM 12-hr format, 1 24-hr format
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_ITIME = 35            '  
    ''' <summary>
    ''' Use full 4-digit century, 0 Two digit.1 Full century
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_ICENTURY = 36         '  
    ''' <summary>
    ''' leading zeros in time field, 0 No , 1 yes
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_ITLZERO = 37          '  
    ''' <summary>
    ''' leading zeros in day field, 0 No , 1 yes
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_IDAYLZERO = 38        '  
    ''' <summary>
    ''' leading zeros in month field, 0 No , 1 yes
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_IMONLZERO = 39        '  
    ''' <summary>
    ''' AM designator
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_S1159 = 40            '  
    ''' <summary>
    ''' PM designator
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_S2359 = 41            '  
    ''' <summary>
    ''' long name for Monday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SDAYNAME1 = 42        '  
    ''' <summary>
    ''' long name for Tuesday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SDAYNAME2 = 43        '  
    ''' <summary>
    ''' long name for Wednesday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SDAYNAME3 = 44        '  
    ''' <summary>
    ''' long name for Thursday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SDAYNAME4 = 45        '  
    ''' <summary>
    ''' long name for Friday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SDAYNAME5 = 46        '  
    ''' <summary>
    ''' long name for Saturday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SDAYNAME6 = 47        '  
    ''' <summary>
    ''' long name for Sunday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SDAYNAME7 = 48        '  
    ''' <summary>
    ''' abbreviated name for Monday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVDAYNAME1 = 49  '  
    ''' <summary>
    ''' abbreviated name for Tuesday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVDAYNAME2 = 51  '  
    ''' <summary>
    ''' abbreviated name for Wednesday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVDAYNAME3 = 52  '  
    ''' <summary>
    ''' abbreviated name for Thursday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVDAYNAME4 = 53  '  
    ''' <summary>
    ''' abbreviated name for Friday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVDAYNAME5 = 54  '  
    ''' <summary>
    ''' abbreviated name for Saturday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVDAYNAME6 = 55  '  
    ''' <summary>
    ''' abbreviated name for Sunday
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVDAYNAME7 = 56  '  
    ''' <summary>
    ''' long name for January
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME1 = 57      '  
    ''' <summary>
    ''' long name for February
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME2 = 58      '  
    ''' <summary>
    ''' long name for March
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME3 = 59      '  
    ''' <summary>
    ''' long name for April
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME4 = 60      '  
    ''' <summary>
    ''' long name for May
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME5 = 61      '  
    ''' <summary>
    ''' long name for June
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME6 = 62      '  
    ''' <summary>
    ''' long name for July
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME7 = 63      '  
    ''' <summary>
    ''' long name for August
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME8 = 64      '  
    ''' <summary>
    ''' long name for September
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME9 = 65      '  
    ''' <summary>
    ''' long name for October
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME10 = 66     '  
    ''' <summary>
    ''' long name for November
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME11 = 67     '  
    ''' <summary>
    ''' long name for December
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SMONTHNAME12 = 68     '  
    ''' <summary>
    ''' abbreviated name for January
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME1 = 69 '  
    ''' <summary>
    ''' abbreviated name for February
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME2 = 70 '  
    ''' <summary>
    ''' abbreviated name for March
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME3 = 71 '  
    ''' <summary>
    ''' abbreviated name for April
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME4 = 72 '  
    ''' <summary>
    ''' abbreviated name for May
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME5 = 73 '  
    ''' <summary>
    ''' abbreviated name for June
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME6 = 74 '  
    ''' <summary>
    ''' abbreviated name for July
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME7 = 75 '  
    ''' <summary>
    ''' abbreviated name for August
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME8 = 76 '  
    ''' <summary>
    ''' abbreviated name for September
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME9 = 77 '  
    ''' <summary>
    ''' abbreviated name for October
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME10 = 78 '  
    ''' <summary>
    ''' abbreviated name for November
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME11 = 79 '  
    ''' <summary>
    ''' abbreviated name for December
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME12 = 80 '  
    ''' <summary>
    ''' Native abbreviated name for 13th month, if it exists.
    ''' </summary>
    ''' <remarks></remarks>
    LOCALE_SABBREVMONTHNAME13 = 4111 ' 
End Enum

End NameSpace

Conclusion :


Allez, j'espère qu'il n'y a pas de bug dans tout ca.

J'avais aussi qqchose pour récupérer la région, mais l'énumération était très longue et je n'était pas sur que ca marchait bien alors je l'ai pas mise... Sachez en tout cas que c'est censé se baser sur les Phone Codes.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.