2009-07-29 9 views
0

je tente de changer la construction dans la culture .Net fr-CA, en utilisant la méthode suivante:L'utilisation CultureAndRegionInfoBuilder mise à jour intégrée dans la culture .Net

CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder("fr-CA", CultureAndRegionModifiers.Replacement); 

    try 
    { 
     Console.WriteLine("Updating " + cib.CultureName); 

     cib.NumberFormat.CurrencyGroupSeparator = ","; 
     cib.NumberFormat.CurrencyDecimalSeparator = "."; 
     cib.NumberFormat.NumberGroupSeparator = ","; 
     cib.NumberFormat.NumberDecimalSeparator = "."; 

     cib.Register(); 

     Console.WriteLine("Culture updated."); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e); 
     Console.ReadKey(); 
    } 

Cependant, l'appel Register() échoue avec "System.InvalidOperationException: la méthode 'Register' a échoué car la culture personnalisée 'fr-CA' existe déjà."

Est-il possible de mettre à jour la culture intégrée? Selon les docs (http://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder.cultureandregioninfobuilder.aspx), il me semble que je peux juste le mettre à jour, même si je peux me tromper.

+0

Votre processus lancé en tant qu'administrateur ? Vista ou XP? – Guillaume

+0

Oui, lancé en tant qu'administrateur (j'ai reçu une erreur d'accès refusé si je ne l'ai pas fait) - cela est en cours d'exécution sur Server 2008 SP1. – ericvg

+1

Vous pouvez essayer le même code sur un autre système d'exploitation ou un autre ordinateur, juste pour vérifier. Ce n'est peut-être pas une bonne idée d'éditer des cultures existantes. – Guillaume

Répondre

5

Je viens d'avoir à ajouter:

CultureAndRegionInfoBuilder.UnRegister("fr-CA"); 

avant Register().

1

Il est préférable de créer une copie d'une culture existante et de l'enregistrer sous un nouveau nom tel que "fr-CACustom".

[Notez qu'une culture personnalisée peut être enregistré sur un ordinateur que par un utilisateur disposant de droits d'administrateur sur cet ordinateur.]

try 
{ 
    CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder("fr-CACustom", CultureAndRegionModifiers.None); 
    cib.LoadDataFromCultureInfo(new CultureInfo("fr-CA")); 
    Console.WriteLine("Creating" + cib.CultureName); 

    cib.NumberFormat.CurrencyGroupSeparator = ","; 
    cib.NumberFormat.CurrencyDecimalSeparator = "."; 
    cib.NumberFormat.NumberGroupSeparator = ","; 
    cib.NumberFormat.NumberDecimalSeparator = "."; 

    // add some region info also 
    cib.LoadDataFromRegionInfo(new RegionInfo("CA")); 
    cib.RegionEnglishName = "RegionInfo derived from French-speaking Canada"; 

    cib.Register(); 

    Console.WriteLine("New culture created."); 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e); 
    Console.ReadKey(); 
} 

Ce code enregistre la culture personnalisée identifiée par le nom de la culture dans le% WINDIR% \ répertoire du système de globalisation, où% WINDIR% est le répertoire du système d'exploitation Windows. Cela rendra la culture personnalisée disponible pour d'autres applications.

CultureInfo test = new CultureInfo("fr-CACustom"); 

[Note: pour avoir accès à la classe CultureAndRegionInfoBuilder vous avez besoin d'une référence à l'ensemble sysglobl qui est pas référence par défaut dans la plupart des modèles de projet Visual Studio.]

Questions connexes