Connaitre le langage de base du système

Résolu
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018 - 18 avril 2009 à 12:12
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 20 avril 2009 à 22:55
Je distribue gratuitement une application qui se trouve occasionnellement hors de France. Je voudrais identifier la lange de base de l'ordinateur pour commuter cette appli en anglais si ce n'est pas le Français.
comment accède-t-on à la langue du système avec Delphi?

12 réponses

cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
20 avril 2009 à 06:50
Bonjour et merci!
Finalement j'ai utilisé LANG_SYSTEM_DEFAULT

if LANG_SYSTEM_DEFAULT = 2048 then GoFrench else GoEnglish;

J'aurais pu utiliser LANG_USER_DEFAULT et le code était différent (1024). Je n'ai pas compris pourquoi. mais cela peut peut-être expliquer pourquoi le système et moi on ne se comprend pas trop des fois...
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
20 avril 2009 à 12:15
j'aimerai bien que tu me dise si t'arrive a avoir de l'english.
Je pense meme que, si tu n'appelle GoEnglish uniquement a cet endroit, cette fonction (goEnglish) ne doit meme pas etre compilé.
LANG_SYSTEM_DEFAULT est une constante et vaudra toujours 2048. c'est un flag special utilisé lors de demandes concernant la langue.
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
18 avril 2009 à 15:02
recherche "localisation" dans l'aide l'ideal est de creer des dll de resources correspondant aux differents langages.
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
18 avril 2009 à 16:46
et ajoute "bonjour" "merci" on est pas des chiens.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
18 avril 2009 à 18:46
Ben tu dis la "langue" alors, pas le "langage" qui fait référence, dans le contexte omniprésent sur la page internet, au langage de programmation.
N'existe-t-il pas une API pour récupérer la langue du système ?
Tu as déjà VerLanguageName je crois pour récupérer la chaîne correspondante à l'indentificateur ('French (Standard)', 'English (United States)', etc ...), et tu as également GetSystemDefaultLangID pour récupérer la langue du système je crois (il renvoie l'identificateur que tu convertis avec VerLanguageName).

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 avril 2009 à 13:38
Il y a une liste des identificateurs LANGID et les langues associées (variantes de français, variantes d'anglais, etc ...). Par exemple, une plage d'identificateurs située entre l'id A et B seront peut-être les identificateurs français ... Tester un identificateur ne suffit pas.

Cordialement, Bacterius !
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
20 avril 2009 à 14:06
extrait de windows.pas

(*
 *  A language ID is a 16 bit value which is the combination of a
 *  primary language ID and a secondary language ID.  The bits are
 *  allocated as follows:
 *
 *       +-----------------------+-------------------------+
 *       |     Sublanguage ID    |   Primary Language ID   |
 *       +-----------------------+-------------------------+
 *        15                   10 9                       0   bit
 *
 *
 *
 *  A locale ID is a 32 bit value which is the combination of a
 *  language ID, a sort ID, and a reserved area.  The bits are
 *  allocated as follows:
 *
 *       +-------------+---------+-------------------------+
 *       |   Reserved  | Sort ID |      Language ID        |
 *       +-------------+---------+-------------------------+
 *        31         20 19     16 15                      0   bit
 *
 *)

(*
 *  Language IDs.
 *
 *  The following two combinations of primary language ID and
 *  sublanguage ID have special semantics:
 *
 *    Primary Language ID   Sublanguage ID      Result
 *    -------------------   ---------------     ------------------------
 *    LANG_NEUTRAL          SUBLANG_NEUTRAL     Language neutral
 *    LANG_NEUTRAL          SUBLANG_DEFAULT     User default language
 *    LANG_NEUTRAL          SUBLANG_SYS_DEFAULT System default language
 *)

je reviens sur ce que j'ai dit dans mon premier post : l'ideal serait d'avoir des dll de resources. Elles seront automatiquement chargé selon la langue de l'environnement d'execution
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 avril 2009 à 14:31
un TButton
un TListBox:
 {$WARNINGS OFF}
procedure TForm1.Button1Click(Sender: TObject);
var I : Integer;
begin
  with TLanguages.Create do
  try
    ListBox1.Items.BeginUpdate;
    ListBox1.Clear;
    for I := 0 to Count -1 do
      ListBox1.Items.Add ('['+ID[i]+'] ('+IntToStr(LocaleID[i])+') - ('+
        Ext[i]+') - '+Name[i]);
      ListBox1.Sorted := True;
  finally
    ListBox1.Items.EndUpdate;
    Free;
  end;
end;
 {$WARNINGS ON}

j'ai mis la propriété "Name" à la fin pour des raisons évidentes de lisibilité !!!
si vous voulez les classer par ordre alphabétique il suffit de mettre "Name" en premier

 
@+
Cirec

<hr siz="" />
0
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
20 avril 2009 à 19:18
Donc si je vous comprends, cela vous plairait mieux...


  szlang:=stralloc(100);
  VerLanguageName(LANG_SYSTEM_DEFAULT,szLang,100);
  If pos('français', szLang) > 0 then GoFrench else GoEnglish;
  dispose(szLang);

Merci!

Et Guillemouze avait bien raison, ce n'était même pas compilé....
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
20 avril 2009 à 22:00
essaye GetUserDefaultLangID (ou GetSystemDefaultLangID)
ensuite, tu peux comparer le HiByte, et le comparer à LANG_FRENCH, LANG_ENGLISH, ...
Le LoByte est le sublanguage (par exemple, tu as francais-france, francais-suisse, ...), donc dans ton cas tu t'en fout.

PS: j'ai peut etre inverse le 'Hi' et le 'Lo'. a verifier.

PS2: "If pos('français', szLang)": Evite les comparaisons de chaines pour ce genre d'operations quand tu peux le faire sur du numerique !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 avril 2009 à 22:10
"GetSystemDefaultLangID" c'est bizarre il me semble l'avoir dit dans une des premières réponses ... il faut croire que mon texte est écrit en blanc lol.

Cordialement, Bacterius !
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
20 avril 2009 à 22:55
"il faut croire que mon texte est écrit en blanc"

Nan c'est juste que je lis pas tes posts bacterius, parce que ton avatar me donne la gerbe .... hahaha je rigole, j'avais oublié entre ce matin et ce soir.
Mais je campe sur ma position en disant qu'utiliser des dll de ressources me semble rester la meilleure solution.
0
Rejoignez-nous