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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 209 fois - Téléchargée 29 fois

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

Ajouter un commentaire Commentaires
Messages postés
278
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
22 décembre 2008

Peut-être :)
Après tout, comme j'ai que 14 ans, je suis pas un pro :)
Et si j'ai l'ai fait pour rien, je me suis amusé tout de même.

Fremy
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Salut,

Je pense que tu t'es amusé a trouver cette API pour rien.
Car les paramétres régionaux sont disponibles avec les methodes
Thread.CurrentThread.CurrentCulture sous dotnet

Et pour obtenir le separateur numerique ou le changer
il faut passer par
Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator

cf
http://www.vbfrance.com/codes/MODIFICATION-SEPARATEUR-DECIMAL-SANS-API-JSUTE-AVEC-FRAMEWORK_26570.aspx

Tu peux obentir et modifier les autres paramètres comme le séparateur de milliers le format de date, ... et tout cela pour le thread courant sans modifier les parametres de la machine.
Et sans utiliser les API.

Merci quand même pour l'API, ca peut aider.

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.