cs_Gerard
Messages postés121Date d'inscriptionjeudi 10 janvier 2002StatutMembreDernière intervention 7 août 2018
-
18 avril 2009 à 12:12
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 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?
cs_Gerard
Messages postés121Date d'inscriptionjeudi 10 janvier 2002StatutMembreDerniè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...
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 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.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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).
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 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
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 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 !
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 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.