IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Langue de l'utilisateur


Sujet :

Windows

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut Langue de l'utilisateur
    Bonjour,

    Je précise d'emblée que je suis linuxien et que je me perds dans la doc de msdn. N'ayant pas trouvé une solution qui doit pourtant être simple, je souhaite une aide de votre part.

    Je désire simplement connaître la langue de l'OS telle que l'utilisateur l'a définie. [Edit] Par exemple : fr_FR [/Edit]

    Sachant que :
    - l'OS peut être XP, Vista, 7 (j'ai vu depuis la doc msdn des fonctions différentes selon les versions de Windows)
    - la solution proposée doit être si possible en C standard
    - la solution doit être impérativement compilable avec MingW32 sous C::B (Code Blocks)

    J'ai tenté ces différentes choses sans succès (erreur de compilation, constantes non définies, pb de linkage ou autres)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define BUFFER_SIZE 85 /* LOCALE_NAME_MAX_LENGTH n'est pas définie */
    GetUserDefaultLocaleName (wcBuffer, BUFFER_SIZE);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GetLocaleInfoEx (pStr, LOCALE_USER_DEFAULT, wcBuffer, BUFFER_SIZE);
    /* ou via  GetLocaleInfo avec un prototype différent pour XP */
    j'ai tenté aussi depuis cet exemple :
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    Ce ne doit pas être si compliqué à faire quand même !!
    Merci pour votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    #include <locale.h>
    
    int main(void)
    {
      printf("%s\n", setlocale(LC_ALL, ""));
      return 0;
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    hmm merci. J'y avais pensé à cette solution toute simple et standard mais elle ne fonctionne malheureuseuement pas comme je le souhaiterais sous Windows. Celles-ci me renvoie " French_France.1252 " et non un "fr_FR.xxx" par exemple. Ce qui m'oblige, me semblet-il, à réaliser une conversion manuelle (et ça fait beaucoup de cas).

    Dans la même veine, existe t-il une variable d'environnement qui définit le langage, telle que "LANG" ? En tapant set dans une console windows, la plupart des variables d'environnement sont affichées mais aucune pour la langue.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <windows.h>
    #include <stdio.h>
    
    //----------------------------------------------------
    BOOL GetLang(LPCTSTR value, LPTSTR result, LPDWORD len)
    {
      HKEY hKey;
      LONG lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\International", 0, KEY_ALL_ACCESS, &hKey );
    
      if(lRet == ERROR_SUCCESS) {
         lRet = RegQueryValueEx(hKey, value, 0, 0, (LPBYTE)result, len);
         RegCloseKey(hKey);
      }
    
      return (lRet == ERROR_SUCCESS);
    }
    
    //----------------------------------------------------
    int main(void)
    {
      char szLang[MAX_PATH];
      DWORD dwLen = MAX_PATH;
    
      if(GetLang("sCountry", szLang, &dwLen))
        puts(szLang);
    
      if(GetLang("LocaleName", szLang, &dwLen))
        puts(szLang);
    
      if(GetLang("sLanguage", szLang, &dwLen))
        puts(szLang);
    
      return 0;
    }


    Résultat:
    France
    fr-FR
    FRA

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    C'est pas beau d'aller taper directement dans la base de registres. Il vaut mieux utiliser l'API dédiée pour cela : National Language Support
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    @magma² : merci, le résultat est bon.
    La méthode est-elle stable (pour toutes les versions de Windows) ?

    @ram-0000 : c'est cette API que j'ai épluché et dans laquelle je me suis perdu. C'est pour cette raison que j'ai ouvert ce fil (premier post). Si tu peux m'aiguiller, j'en serai ravi

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <windows.h>
    #include <stdio.h>
    
    //----------------------------------------------------
    int GetLocaleName(char *result, size_t len)
    {
      char szLANGNAME[16], szCTRYNAME[16];
    
      if(GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, szLANGNAME, sizeof szLANGNAME))
        if(GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, szCTRYNAME, sizeof szCTRYNAME))
          return snprintf(result, len, "%s_%s", szLANGNAME, szCTRYNAME);
    
      return 0;
    }
    
    //----------------------------------------------------
    int main(void)
    {
      char szLocaleName[32];
    
      if(GetLocaleName(szLocaleName, sizeof szLocaleName))
        puts(szLocaleName);
    
      return 0;
    }


    Résultat:
    fr_FR

    Compilé avec mingw32 et testé sur XP et Vista

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    @magma², ton code mériterait une entrée dans la
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    Je n'ai pas les compétences pour estimer si ce code est digne de la FAQ mais il a néanmoins deux mérites :
    • il fonctionne dans les conditions que j'avais demandé

    • il m'a permis de comprendre certains points de la doc et, de fait, pourquoi, tout en utilisant la même fonction, je ne parvenais qu'à des erreurs.


    Il me reste cependant une question :
    au-début de la page de la doc, ce genre de note indique que la fonction a vocation à finir dépréciée ou c'est juste une question de contexte d'utilisation ?

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par _iri_ Voir le message
    au-début de la page de la doc, ce genre de note indique que la fonction a vocation à finir dépréciée ou c'est juste une question de contexte d'utilisation ?
    Effectivement, la petite note dit qu'il faut mieux maintenant utiliser GetLocaleInfoEx() que GetLocaleInfo()
    Mais bon, GetLocaleInfo() va encore vivre un peut quand même
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    Merci à vous deux !

    Je passe le fil en "Résolu".

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    GetLocaleInfoEx() sous Windows Vista et supérieur, sinon GetLocaleInfo()

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    Vu, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/06/2008, 13h39
  2. Détecter la langue de l'utilisateur
    Par Orian dans le forum Général Java
    Réponses: 1
    Dernier message: 09/03/2008, 07h50
  3. Configurer la langue d' un utilisateur TS avec 2003MUI
    Par mounap dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 19/02/2008, 18h16
  4. install langue arabe mode utilisateur?
    Par kheldoun ahmed dans le forum Windows XP
    Réponses: 3
    Dernier message: 16/05/2007, 00h46
  5. Réponses: 2
    Dernier message: 30/11/2006, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo