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

C++Builder Discussion :

Programme multi langage : Changement dynamique de langue en cours d'execution


Sujet :

C++Builder

  1. #1
    Membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2007
    Messages : 53
    Points : 52
    Points
    52
    Par défaut Programme multi langage : Changement dynamique de langue en cours d'execution
    Bonjour,

    Je programme actuellement sous Borland C++ en version 2009. Une des nouveautés de cette version est la gestion intégrée de l'internationalisation. J'ai donc décidé de l'utiliser.
    Je parviens sans probleme à générer les fichiers de langue (ex : .ENU pour l'anglais ... ). Si je choisi la langue d'execution avant la compilation, via le menu borland PROJET > LANGUE cela fonctionne.

    Mon problème est que je désire en fait autoriser l'utilisateur à modifier la langue en cours d'execution (avec redémarrage ou non, cela n'a pas d'importance).

    Est ce que quelqu'un sait comment accéder à une propriété ou une méthode permettant de modifier la langue lors de l'"execution ?

    Merci pour tout.

    Anthony.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello

    Regarde dans la base de registre la clé HKEY_CURRENT_USER\Software\CodeGear\Locales, tu devrais trouver une valeur correspondant à ton exe.
    Elle détermine la langue utilisée au lancement de ton programme.

    Pour changer la langue en cours de route, tu peux utiliser une fonction du genre:
    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
    struct TLibModuleX
    {
      TLibModuleX* Next;
      HINSTANCE Instance;
      HINSTANCE CodeInstance;
      HINSTANCE DataInstance;
      HINSTANCE ResInstance;
      HINSTANCE Reserved;
    };
     
    void __fastcall TForm18::ChangerLangue(AnsiString langue)
    {
      TLibModuleX* module = (TLibModuleX*)LibModuleList;
     
      while (module != NULL)
        if (HInstance == module->Instance)
        {
          if ((module->ResInstance != HInstance) && (module->ResInstance != NULL))
            FreeLibrary(module->ResInstance);
     
          AnsiString nomModule = ChangeFileExt(ParamStr(0), "." + langue);
          module->ResInstance = LoadLibrary(nomModule.c_str());
          break;
        }
        else
          module = module->Next;
    }
    Ensuite tu l'utilises comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm18::vBtn1Click(TObject *Sender)
    {
      ChangerLangue("ENU");
     
      TForm18* form = new TForm18(this);
      form->Visible = true;
    }
    Tous les fenêtres que tu vas créer après le ChangerLangue utiliseront la DLL de ressource en .ENU.

    Ça fonctionne sous C++ Builder 2007, sans doute aussi sous 2009 ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Après vérif, c'est plus simple sous 2009:
    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
    void __fastcall TForm18::ChangerLangue(AnsiString langue)
    {
      TLibModule* module = (TLibModule*)LibModuleList;
     
      while (module != NULL)
        if (HInstance == (HINSTANCE)module->instance)
        {
          if (((HINSTANCE)module->resinstance != HInstance) && (module->resinstance != NULL))
            FreeLibrary((HINSTANCE)module->resinstance);
     
          AnsiString nomModule = ChangeFileExt(ParamStr(0), "." + langue);
          module->resinstance = (long)LoadLibrary(nomModule.c_str());
          break;
        }
        else
          module = module->next;
    }

Discussions similaires

  1. Comprendre un programme multi-langues (Python, C++, matlab)
    Par AnthoB dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/02/2013, 08h35
  2. Réponses: 3
    Dernier message: 09/10/2011, 18h17
  3. Changement dynamique de DLL de langue
    Par TheGzD dans le forum Visual C++
    Réponses: 5
    Dernier message: 03/05/2011, 09h56
  4. Réponses: 4
    Dernier message: 28/05/2009, 10h11
  5. changement dynamique du langage d'une interface swing
    Par jeanfeu dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 06/05/2008, 11h30

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