Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Nouveau Membre du Club
    Inscrit en
    janvier 2003
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : janvier 2003
    Messages : 180
    Points : 30
    Points
    30

    Par défaut Forcer la localisation (langue) de mon application

    Bonjour,

    Tout d'abord bonne année à tous ceux qui me liront

    J'ai une application en c++ sur RAD studio XE.
    Mon appli n'a qu'un seule langue : l'anglais (chouette pas besoin de gérer du multi langue !)
    Par contre du coup j'ai un problème : j'utilise des dialogs du type TPrintDialog, TFindDialog, TSaveDialog et si mon PC est en français, ces dialogs s'affichent en français...
    Et je voudrais donc forcer la langue des dialogues pour être en anglais quelque soit la localisation du PC. Et je trouve pas comment faire... Suis sûre que c'est tout bête en plus !!!
    Merci pour votre aide !
    Pascale38

  2. #2
    Expert Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 003
    Points : 12 789
    Points
    12 789

    Par défaut

    Les Boites de Dialogues de Windows comme le TOpenDialog est, me semble-t-il, géré par le système, j'ignore comment forcer Windows a utiliser une langue au lieu d'une autre !
    Peut-être SetThreadLocale qui forcerait la langue en anglais, n'ayant jamais essayé, c'est purement théorique comme info !

    En général, l'OS de l'utilisateur est déjà de la langue souhaité, j'ai travaillé sur une application en français, anglais, portugais (brésil) et néerlandais (belge), l'OS était toujours dans la langue naturelle de l'utilisateur, les rares cas était un utilisateur sur OS anglais affichant du portugais

    Le reste était Français sur OS Français !
    Je n'ai jamais eu ton cas mais il est connu dans de nombreux freeware comme CDex ou même des Shareware comme UltraEdit, tout les deux sont tout en anglais, sauf les SelectDirectory\OpenDialog comme par hasard !

    Les Message d'Erreur ou Message de la VCL sont dans les fichiers consts comme RTLConsts
    Ce sont des resourcestring, regarde l'ETL et la création de DLL de ressources multi-langue : Présentation de la localisation des applications avec le gestionnaire de traductions
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

    Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !

  3. #3
    Nouveau Membre du Club
    Inscrit en
    janvier 2003
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : janvier 2003
    Messages : 180
    Points : 30
    Points
    30

    Par défaut

    Merci pour ta réponse !

    J'ai essayé ça :
    WORD langID = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);
    BOOL bRetval = SetThreadLocale(MAKELCID(langID, SORT_DEFAULT));

    malheureusement mes dialogs sont toujours en français
    Pourtant j'ai bien bRetval qui vaut 1...

    Je cherche un peu sur le net, à priori suis pas la seule à dire que ça marche pas... Je continue à investiguer mais pour l'instant c'est pas très concluant...
    Si jamais je trouve, je posterai la réponse !

    merci en tout cas !
    Pascale38

  4. #4
    Membre confirmé
    Profil pro Laurent
    Inscrit en
    janvier 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Nom : Laurent
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : janvier 2003
    Messages : 280
    Points : 277
    Points
    277

    Par défaut

    [...]

  5. #5
    Membre confirmé
    Profil pro Laurent
    Inscrit en
    janvier 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Nom : Laurent
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : janvier 2003
    Messages : 280
    Points : 277
    Points
    277

    Par défaut

    - d'une part le MSDN dit que ce n'est pas la bonne fonction: " Do not use SetThreadLocale to select a user interface language. To select the resource that is defined in the .rc file with a LANGUAGE statement, the application must use the FindResourceEx function." Mais je ne suis pas certain que Delphi se serve des resources de la même façon que les applis dévelopées avec les outils Microsoft (la langue des composants est stockées dans les DFM pas dans un RC donc FindResourceEx c'est plutot bof).
    - d'autre part pour forcer la langue d'une application il faut surement aussi rafraichir cette application ou forcer la langue avant le 1er affichage. C'est un peu comme si tu initialise une variable après t'en être servie. Bon, pour les boites de dialogue système c'est moins sur.

    Quelques autres suggestions: SetThreadUILanguage, SetThreadPreferedUILanguage, et l'article sur le UI Language management http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    Le MSDN est très riche en informations et explique bien comment se servir des fonctions, ce qu'on peut faire avec et ce qu'il ne faut pas faire. Les remarques et notes en base de page sont souvent intéressantes.

    J'espère que tu trouveras une solution.
    Mais je me pose également une question: les ressources anglaises sont-elles systématiquement livrées avec Windows ?

  6. #6
    Nouveau Membre du Club
    Inscrit en
    janvier 2003
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : janvier 2003
    Messages : 180
    Points : 30
    Points
    30

    Par défaut

    merci Yarp,

    oui mais la MSDN dit aussi :
    "SetThreadLocale affects the selection of resources with a LANGUAGE statement. The statement affects such Win32 functions as CreateDialog, DialogBox, LoadMenu, LoadString, and FindResource. It sets the code page implied by CP_THREAD_ACP, but does not affect FindResourceEx."

    Voilà, voilà...
    Bon je vais regarder les pistes que tu m'as donné...

    Pascale38

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •