Connaitre le langage de base du système [Résolu]

Signaler
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018
-
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-
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

Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

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...
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
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.
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
recherche "localisation" dans l'aide l'ideal est de creer des dll de resources correspondant aux differents langages.
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
et ajoute "bonjour" "merci" on est pas des chiens.
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
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 !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
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 !
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
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
Messages postés
3815
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
4 août 2020
35
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="" />
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

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é....
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
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 !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
"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 !
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
"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.