Localization de mon application

Signaler
Messages postés
13
Date d'inscription
vendredi 18 février 2005
Statut
Membre
Dernière intervention
7 juin 2006
-
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
-
Bonjour,


Je développe une application en VB6, et mon windows est configuré dans les paramètres régionaux à l'anglaise. C'est à dire que pour séparer les décimales de la partie entière il y a un point. Mais le problème c'est que mon application est destinée à des gens qui peuvent avoir leur Windows configuré comme le mien ou avec comme séparateur des décimales la virgule.
Et mon application plante lorsque l'ordinateur est dans le second cas.


Quelqu'un sait il comment dire au compilateur ou à l'application que l'on veut travailler à la manière anglaise ?

Merci

12 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
solution que j'utilise :

au debut du programme, je détecte sous quelle version je fonctionne (point ou virgule) : mid(cstr(1/2),2,1)

Ensuite si je suis en version virgule, dans toutes les chaines de caractères que je dois convertir en nombre, je remplace systématiquement un éventuel point par la virgule : replace(machaine,".",",")

Elle n'est pas trop top, ma methode, mais elle permet de pas trop se prendre la tete.

<hr /># Le partage est notre force #
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
J'ai oublier de préciser que je dois cette méthode à une collègue, car dans la plupart des cas moi je peux définitivement reconfigurer les PC avec le point comme séparateur, donc plus de souci ensuite.

<hr /># Le partage est notre force #
Messages postés
13
Date d'inscription
vendredi 18 février 2005
Statut
Membre
Dernière intervention
7 juin 2006

Pas mal ta méthode mais je pensais prendre le problème dans l'autre sens en faisant comprendre à la machine que je voualis travailler avec des points.
J'ai trouvé ceci dans setlocalinfo: LOCALE_SDECIMAL


Mais je ne sais pas comment ça marche. Ca peut forcer la machine utilisatrice à travailler avec des points et non des virgules ?


Je débute en VB :(
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Et je rajouterai qu'il est plus facile d'afficher le "." plutôt que la ","
Sur tes textbox, quand tu saisies un nombre décimal, avec le pavé numérique (à droite), c'est le "." qui s'affiche.

L'idéal c'est effectivement d'avoir le point dans les paramètres régionaux.
Si tu fais du VBA, tu en verras l'utilité car si tu fais des calculs, par exemple : sboub = TextBox1.Value + cells(1, 1).Value
dans textbox : 12.5 et dans cells(1, 1) : 3,25
ben là tu auras une erreur, à savoir un nombre avec un séparateur de milliers.

(donc si tu peux le changer sur les PC de destination, conseil, fait le)

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
Messages postés
13
Date d'inscription
vendredi 18 février 2005
Statut
Membre
Dernière intervention
7 juin 2006

Je ne peux pas changer directement le paramètre du PC utilisateur, je ne connais pas tous les utilisateurs de mon applications.
Je recherche quelque chose qui dit à VB: "pour ce programme tu marche avec des points".
Messages postés
13
Date d'inscription
vendredi 18 février 2005
Statut
Membre
Dernière intervention
7 juin 2006

Je ne peux pas changer directement le paramètre du PC utilisateur, je ne connais pas tous les utilisateurs de mon applications.
Je recherche quelque chose qui dit à VB: "pour ce programme tu marche avec des points".
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Bon j'ai fais quelques essais.

SetLocalInfo permet de changer le paramètre mais soit au niveau systeme, soit au niveau utilisateur.
Dans le premier cas, c'est l'ensemble du système Windows qui est affecté, dans le second, c'est la configuration de ton compte utilisateur.

Mais dans tous les cas, c'est l'ensemble des applications qui sont affectées et pas uniquement ton logiciel.
Je n'ai pas fait l'essais, mais il est fort probable que les changements effectuées perdurent après le redémarrage de la machine.

C'est donc une fonction à manipuler avec prudence.

<hr /># Le partage est notre force #
Messages postés
13
Date d'inscription
vendredi 18 février 2005
Statut
Membre
Dernière intervention
7 juin 2006

Je compte stocker la configuration initiale de l'utilisateur puis la restorer une fois le programme fini
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
74
Halte !


c'est pas nouveau, mon point de vue est toujours le même su ce sujet :

c'est à TOI de t'adapter....


si l'utilisateur a certains parametres regionnaux, respectes les...


VB est dejà batit sur cette approche.


il faut utiliser les bonne fonctionnalités :

FormatNumber et FormatDate, par exemple


ensuite, y'a deux moments ou ca peut intervenir...


- lors de la saisie de nombres. Il vaut mieux remplacer au cours de la
saisie le caractère résultant de la pression de la touche '.' du pavé
numérique par le séparateur du poste.


- lors de l'enregistrement/lecture dans des fichiers de Config, etc :

   quelques règles simples :

      - enregistrer les boolean sous forme de 1 et 0

      - enregistrer les dates dans un format
reconnu par tout les postes, quels que soient les parametres, pour ne
pas etre embetté en cas d'echange de fichiers  (yyyy-mm-dd
hh:mm:ss  )
       -
enregistrer les valeurs numériques avec un point comme séparateur
décimal, et sans séparateur des milliers

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
615
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
4 juillet 2012

Personnellement en début d'application je vais chercher dans la base de registre locale du PC le caractère de séparation décimal, celui de séparation des milliers, ainsi que le format de date court de façon à adapter mon application selon les critères du poste qui toune l'application c'est aussi ce que fais Access et ainsi lorsque mon application fonctionne en relation avec une DB je n'ai plus de problème de format quelconque. Voici en example le code utilisé


'On reprend le séparateur décimal et celui des milliers selon la configuration du système
Sep_Dec = mRegistry_QueryValueKeyString(&H80000001, "Control Panel\International", "sDecimal")
Sep_Mil = mRegistry_QueryValueKeyString(&H80000001, "Control Panel\International", "sThousand")
'On reprend également le format de date en cours
Date_Format = mRegistry_QueryValueKeyString(&H80000001, "Control Panel\International", "sShortDate")


'-------------------------------------------------------------------------
' lit une chaine de caractères dans la registry
'-------------------------------------------------------------------------
Public Function mRegistry_QueryValueKeyString(Key As Long, SubKey As String, _
Name As String) As String

Dim lRetVal As Long
Dim hKey As Long
Dim sRetTxt As String
Dim lRetTxt As Long

If Trim(Right(SubKey, 1)) <> "" Then
SubKey = SubKey & ""
End If
lRetVal = RegOpenKeyEx(Key, SubKey, 0&, KEY_READ, hKey)
sRetTxt = String(4096, 32)
lRetTxt = Len(sRetTxt)
lRetVal = RegQueryValueExString(hKey, Name, 0&, REG_SZ, sRetTxt, lRetTxt)
lRetVal = RegCloseKey(hKey)
mRegistry_QueryValueKeyString = Trim(Left(sRetTxt, lRetTxt - 1))

End Function
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
74
pas besoin de récupérer le format de date...
d'ailleurs, attention a lui ^^ il est lui aussi localisé (jj/mm/aaaa)

l'utilisation de Format ( maDate, "Short Date") ou FormaDate suffisent

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
74
au temps pour moi, dans la registry, ce n'est pas localisé (ca l'est, via APIs)

Renfield
Admin CodeS-SourceS- MVP Visual Basic