none
Registry et culture RRS feed

  • Question

  • Bonjour,

     

    Dans mon application VB.NET, développée sous VS 2005 pour MS Framework.NET 2.0, je veux pouvoir changer de langue dynamiquement. J'ai utilisé les propriétés CurrentThread.CurrentCulture et CurrentThread.CurrentUICulture.

     

    J’ai utilisé la registry pour stocker des valeurs numériques décimales sous forme de string (0,786 par exemple).

     

    Lorsque la culture courante est le Français, une virgule est inscrite dans la registry comme séparateur décimal.

     

    Si je change la culture de mon application (CurrentThread.CurrentCulture) et que je passe celle-ci en Anglais, la registry, bien sur, reste inchangée et la lecture des valeurs numériques devient erronée. Le 0,786 de l'exemple se retrouve converti en 786.0 lors de la lecture !

     

    Comment résoudre ce problème ? Existe t'il des fonctions du Framework qui gèrent la traduction ? Comment enregistrer des valeurs numériques réelles dans la registry si ce n'est en string  ?

     

    Merci de votre aide.

     

    jeudi 31 janvier 2008 15:47

Réponses

  • Bonjour,

    Si vous voulez écrire un decimal par exemple, vous pouvez utiliser le code suivant pour forcer l'écriture en utilisant le format invariant et ce sans changer la culture courante :

     

    Code Snippet

    decimal monDecimal = 5.78;

    string str = monDecimal.ToString(NumberFormatInfo.InvariantInfo);

     

     

    Pour le lire vous ferez :

     

    Code Snippet

    decimal monDecimalLu = 0;

    if (!decimal.TryParse(str, NumberStyle.Number, NumberFormatInfo.InvariantInfo, out monDecimalLu))

    {

    // erreur: la chaine ne correspond pas à un décimal

    }

     

     

     

    Vous pouvez bien sur spécifier n'importe quel NumberFormatInfo si vous ne voulez pas utiliser le format invariant.

     

    Guillaume

    dimanche 3 février 2008 18:36

Toutes les réponses

  • Bonjour,

    Il n'existe pas de fonction de traduction dans le Framework. Par contre ce que vous pouvez faire c'est forcer l'écriture et le lecture en registry dans une culture particulière (par exemple Culture.InvariantCulture).

     

    Guillaume

    vendredi 1 février 2008 13:44
  • Merci Guillaume pour votre réponse.

     

    Finalement j'ai pris le parti de réécrire les valeurs décimales dans le regsitre APRES le changement de culture, donc dans la culture choisie par l'utilisateur.

    Mais au fait, comment peut-on forcer l'écriture du registre dans une culture spécifique sans changer la culture de l'appli ? Est-ce possible ?

     

    vendredi 1 février 2008 21:29
  • Bonjour,

    Si vous voulez écrire un decimal par exemple, vous pouvez utiliser le code suivant pour forcer l'écriture en utilisant le format invariant et ce sans changer la culture courante :

     

    Code Snippet

    decimal monDecimal = 5.78;

    string str = monDecimal.ToString(NumberFormatInfo.InvariantInfo);

     

     

    Pour le lire vous ferez :

     

    Code Snippet

    decimal monDecimalLu = 0;

    if (!decimal.TryParse(str, NumberStyle.Number, NumberFormatInfo.InvariantInfo, out monDecimalLu))

    {

    // erreur: la chaine ne correspond pas à un décimal

    }

     

     

     

    Vous pouvez bien sur spécifier n'importe quel NumberFormatInfo si vous ne voulez pas utiliser le format invariant.

     

    Guillaume

    dimanche 3 février 2008 18:36
  • Merci beaucoup pour vos réponses.

    Très utiles, je ne connaissais pas le "NumberFormatInfo" !

    lundi 4 février 2008 09:02
  • Bonjour,

    Je suppose que vous avez vu mais vous avez aussi DateTimeFormatInfo pour les dates.

     

    Guillaume

    lundi 4 février 2008 10:01
  • Oui, merci beaucoup.

    Je me pose maintenant la question du test sur des systèmes d'exploitation de cultures différentes. J'ai ouvert une nouvelle question a ce sujet.

     

    Alain

    lundi 4 février 2008 10:47