10
votes

Créer une culture personnalisée dans ASP.NET

Je souhaite créer un fichier de ressources pour singapourien anglais (EN-SG) nommé "shopping.en-sg.resx" dans l'app_globalresources dossier.

I Obtenir une erreur pendant la compilation.

Erreur 1 L'espace de noms 'Ressources' contient déjà une définition pour 'shopping' c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ temporaire Asp.net Fichiers \ web \ 2cd6afe9 \ 737b0a13 \ app_globalresources.vomuzavz.1.cs 26

Après avoir fouillé Google, je découvre que "EN-SG" n'est pas une culture par défaut et je dois créer une culture personnalisée pour cela. Je ne connais pas les étapes détaillées de cela.

Que dois-je faire pour créer la culture et supprimer l'erreur de compilation?

i Suivez l'exemple dans MSDN, créez un fichier appelé "shopping.x-fr-u-exemplant.resx" et placez le code suivant dans la fonction de basepage (initialiscules vides de substitution protégé ()): xxx

Toutefois, une erreur de compilation est Il existe toujours.

mis à jour:

Vous pouvez facilement reproduire le problème en créant un site Web vide et deux fichiers "shopping.en-sg. RESX "et" Shopping.RESX "dans le dossier App_globalresources.


0 commentaires

3 Réponses :


1
votes

1 commentaires

Ceci est une réponse uniquement liée. Veuillez inclure les parties les plus importantes du site lié dans votre réponse.



17
votes

Vous pouvez créer une nouvelle culture basée sur une culture existante: xxx

ajouté: Vient de vérifier les références: J'ai: xxx

ajouté (mise à jour, sur la base de commentaires):

avec considère le message d'erreur:

L'erreur que vous voyez est le résultat d'un conflit de dénomination de ressources. Vérifiez les noms de ressources, ceux-ci sont compilés dans les DLL, vous devez vérifier que les noms d'espace de noms ne sont pas un conflit. Vous pouvez vérifier cela à l'aide de l'outil de réflecteur: http://www.red-gate.com/products / réflecteur /


10 commentaires

Ce code doit seulement être exécuté une fois sur la machine où vous avez besoin de la culture supplémentaire. Peut-être que vous obtenez l'erreur parce que cela existe déjà?


Mettre le code dans global.asax? Si je change "EN-SG" à "EN-US", c'est bien ça va. Je veux juste un morceau de code que je peux simplement le mettre quelque part et après cela, je peux utiliser les shopping.en-sg.resx


Vient de mettre à jour la réponse avec quelques informations supplémentaires sur le message d'erreur.


"EN-SG" n'est pas une culture valide par défaut dans ASP.NET.


toujours à la recherche de Google pour l'erreur de compilation, aucune idée de freaking. social.msdn.microsoft. com / forums / en-US / NetFXBCl / ... - "BIZBIZ" a le même problème, mais aucune solution n'est fournie.


Essayez de supprimer les DLL de ressources relatives à EN-SG, si cela fonctionne, il suggérera un conflit de nommage, puis ajoutez-les une fois pour voir lequel c'est.


Vous pouvez facilement reproduire le problème en créant un site Web vide et des shopping.en-sg.resx dans le dossier App_globalresources. J'ai déjà essayé de supprimer toutes les DLL pour les tests.


Je pense que cela devrait être mentionné que le code ci-dessus nécessite des autorisations administratives système à exécuter. De l'article MSDN: "Une culture personnalisée ne peut être enregistrée sur un ordinateur uniquement par un utilisateur qui dispose de droits d'administration sur cet ordinateur. Par conséquent, les applications ne créent généralement pas et n'installent généralement pas de cultures personnalisées. Au lieu de cela, vous pouvez utiliser la classe CultureAnDregionInfobuilder pour créer un Outil spécialisé qu'un administrateur peut utiliser pour créer, installer et enregistrer une culture personnalisée. "


Donc, il n'ya aucun moyen de créer une instance d'une culture personnalisée, sans l'enregistrer dans l'ensemble du système? Cela ne semble pas bon pour mes oreilles ... MS doit rendre cela plus facile à utiliser.


@ user2173353 Cette réponse a été presque il y a presque 10 ans, veuillez poursuivre vos recherches et voir s'il existe une meilleure option plus moderne, si / lorsque vous en trouvez un, vous pouvez ajouter votre propre réponse à la fourniture de solution mise à jour?



3
votes

Voici les étapes et le code requis pour créer la culture EN-SG.

  1. Créer une application de console. LI>
  2. Ajoutez une référence à SYSGLOBL (C: \ Windows \ Microsoft.net \ Framework \ v2.0.50727 \ sysglobl.dll) li>
  3. Ajoutez le code ci-dessous. LI>
  4. exécutez-le sur le ou les serveurs Web et Dev Machine (s) en tant qu'administrateur. LI> ol>

    Il créera une culture basée sur ce que j'ai trouvé comme son match le plus proche (EN-UA). J'ai alors des noms remplacés, etc. pour le rendre unique. P>

    Vous devez seulement avoir à courir cette fois. Il supprime les personnes existantes avant de la créer juste au cas où vous souhaitez effectuer des modifications après l'exécution. P>

    public static void Main()
        {
            CultureAndRegionInfoBuilder cib = null;
    
            try
            {
                Console.Clear();
                Console.WriteLine("Unregister the \"en-SG\" " + "custom culture if it already exists...");
                CultureAndRegionInfoBuilder.Unregister("en-SG");
                Console.WriteLine("The custom culture was unregistered successfully.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Error while unregistering...");
                Console.WriteLine(e);
            }
    
            try
            {
                cib = new CultureAndRegionInfoBuilder("en-SG", CultureAndRegionModifiers.None);
    
                // Populate the new CultureAndRegionInfoBuilder object with culture information.
                CultureInfo ci = new CultureInfo("en-AU");
                cib.LoadDataFromCultureInfo(ci);
    
                // Populate the new CultureAndRegionInfoBuilder object with region information.
                RegionInfo ri = new RegionInfo("SG");
                cib.LoadDataFromRegionInfo(ri);
    
                cib.CultureEnglishName = "English (Singapore)";
                cib.CultureNativeName = "English (Singapore)";
                cib.IsMetric = true;
    
                // Display some of the properties of the CultureAndRegionInfoBuilder object.
                Console.WriteLine("CultureName:. . . . . . . . . . {0}", cib.CultureName);
                Console.WriteLine("CultureEnglishName: . . . . . . {0}", cib.CultureEnglishName);
                Console.WriteLine("CultureNativeName:. . . . . . . {0}", cib.CultureNativeName);
                Console.WriteLine("GeoId:. . . . . . . . . . . . . {0}", cib.GeoId);
                Console.WriteLine("IsMetric: . . . . . . . . . . . {0}", cib.IsMetric);
                Console.WriteLine("ISOCurrencySymbol:. . . . . . . {0}", cib.ISOCurrencySymbol);
                Console.WriteLine("RegionEnglishName:. . . . . . . {0}", cib.RegionEnglishName);
                Console.WriteLine("RegionName: . . . . . . . . . . {0}", cib.RegionName);
                Console.WriteLine("RegionNativeName: . . . . . . . {0}", cib.RegionNativeName);
                Console.WriteLine("ThreeLetterISOLanguageName: . . {0}", cib.ThreeLetterISOLanguageName);
                Console.WriteLine("ThreeLetterISORegionName: . . . {0}", cib.ThreeLetterISORegionName);
                Console.WriteLine("ThreeLetterWindowsLanguageName: {0}", cib.ThreeLetterWindowsLanguageName);
                Console.WriteLine("ThreeLetterWindowsRegionName: . {0}", cib.ThreeLetterWindowsRegionName);
                Console.WriteLine("TwoLetterISOLanguageName: . . . {0}", cib.TwoLetterISOLanguageName);
                Console.WriteLine("TwoLetterISORegionName: . . . . {0}", cib.TwoLetterISORegionName);
                Console.WriteLine();
    
                // Register the custom culture.
                Console.WriteLine("Register the custom culture...");
                cib.Register();
    
                // Display some of the properties of the custom culture.
                ci = new CultureInfo("en-SG");
    
                Console.WriteLine("Name: . . . . . . . . . . . . . {0}", ci.Name);
                Console.WriteLine("EnglishName:. . . . . . . . . . {0}", ci.EnglishName);
                Console.WriteLine("NativeName: . . . . . . . . . . {0}", ci.NativeName);
                Console.WriteLine("TwoLetterISOLanguageName: . . . {0}", ci.TwoLetterISOLanguageName);
                Console.WriteLine("ThreeLetterISOLanguageName: . . {0}", ci.ThreeLetterISOLanguageName);
                Console.WriteLine("ThreeLetterWindowsLanguageName: {0}", ci.ThreeLetterWindowsLanguageName);
    
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            Console.ReadKey();
        }
    


0 commentaires