-1
votes

Traiter avec la langue actuelle: meilleure alternative à ce code?

(Je ne savais pas vraiment comment Titre de ce post)

Avez-vous une meilleure alternative à ce code? J'ai envie de pouvoir accomplir davantage avec un dictionnaire combiné à ma classe jsonséralisée. P>

    public class WillyTC 
    {
        public WillyProperties WillyCustomProperties;

        public WillyTC()
        {
            WillyCustomProperties = new WillyProperties();
        }

        public class WillyProperties
        {
            public readonly string PerimetreExterne_Fr = "Longueur à découper extérieure";
            public readonly string PerimetreExterne_En = "Cutting Length-Outer";
            public readonly string PerimetreInterne_Fr = "Longueur à découper des boucles intérieures";
            public readonly string PerimetreInterne_En = "Cutting Length-Inner";
            public readonly string NbDecoupeInterne_Fr = "Découpes";
            public readonly string NbDecoupeInterne_En = "Cut Outs";
            public readonly string AireBrut_Fr = "Surface du flanc de tôle";
            public readonly string AireBrut_En = "Bounding Box Area";
            public readonly string AirePiece_Fr = "Surface du flanc de tôle brut";
            public readonly string AirePiece_En = "Bounding Box Area-Blank";
            public readonly string Pliages_Fr = "Plis";
            public readonly string Pliages_En = "Bends";
            public readonly string Epaisseur_Fr = "Epaisseur de tôlerie";
            public readonly string Epaisseur_En = "Sheet Metal Thickness";
            public readonly string LongueurRect_Fr = "Longueur du flanc de tôle";
            public readonly string LongueurRect_En = "Bounding Box Length";
            public readonly string LargeurRect_Fr = "Largeur du flanc de tôle";
            public readonly string LargeurRect_En = "Bounding Box Width";
            public readonly string NumeroMateriel = "NumeroMateriel";
            public readonly string RPliage = "RPliage";
            public readonly string VPliage = "VPliage";
        }
}


7 commentaires

" Avez-vous une meilleure alternative à ce code? " Cela ressemble à une question qui serait plus appropriée pour codereview. stackexchange.com . Bien que le terme " meilleur " signifiera différentes choses pour différentes personnes, et en tant que telle est à peu près basée sur des opinions et ouvertes au débat ...


Stackoverflow.com/Questtions/1142802 / ...


Où est la sérialisation du JSON? Comment les données sont venues à jsonconfigfile ?


@ParrishHusband Je ne pense pas que ce soit 100% de ce que je cherche.


@Chayimfriedman J'ai édité la question pour le rendre un peu plus clair.


@ MichaëlCorriveau-Côté pour moi, vous semblez réinventer la localisation des chaînes. Pouvez-vous expliquer où se produit la sérialisation / désérialisation du JSON?


.NET soutient déjà la localisation de votre programme / votre bibliothèque, la filature de votre choix n'est pas une bonne idée. Google "localisant une bibliothèque de classe .net" pour trouver de bons hits.


3 Réponses :


1
votes

Vous pouvez stocker les noms de propriétés dans une recherche dictionnaire ou un dictionnaire de ressources, ou une table SQL, puis essayez d'obtenir cette valeur et de l'utiliser. Il bénéficie également de vous permettre de modifier facilement les langues en dehors de votre code.

Dictionary<string,string> languageConfigLookup = 
    new Dictionary<string,string>() {
        {"french",JSonConfigFile.FrenchPropName},
        {"english",JSonConfigFile.EnglishPropName}
    };

if (languageConfigLookup.TryGetValue(GetCurrentLanguage().ToLower(), out string propertyName))
{
   Value2Get = GetSolidworksProp(propertyName);
}
else 
{ 
   throw new Exception("Not-Handled");
}


2 commentaires

Est-ce que cela fonctionnerait et soyez simple avec 50 propriétés avec tous les noms différents?


Oui, il s'agirait d'ajouter des articles dans le dictionnaire pour toutes les langues que vous souhaitez gérer, comme {"espagnol", jsonconfigfile.spanishpropname}



3
votes

Je pense que la localisation résoudrait cela. Il semble que vous souhaitiez charger des chaînes de langues, et il existe déjà un mécanisme pour cela. Un exemple très rude: xxx

Vous pouvez ensuite instancier la classe avec la culture appropriée: xxx

et vous configurez les fichiers de ressources avec Le texte localisé:

 Entrez la description de l'image ici

 Entrez la description de l'image ici


3 commentaires

Je suis sûr que vous pouvez également utiliser la réflexion en conjonction avec le gestionnaire de ressources pour définir également les propriétés, ce qui permettrait de ne pas les taper à la main.


J'aime les efforts que vous avez mis en expliquant comment la localisation. Je pense que cela pourrait un plan B. Je veux tout regrouper le plus possible dans le même dossier. WillyTC fait partie d'une classe beaucoup plus grande appelée myconfiguration qui est chargée au début de la demande via une jsondesérialization sur un fichier de configuration. C'est pourquoi je voulais inclure une sorte de localisation dans mon fichier de configuration. Mais en même temps, je m'emresse si cette pratique est la meilleure. J'aime la sérialisation car cela fonctionne assez bien avec les classes et la liste spécialement de classes.


L'inconvénient avec chargement d'un configfile uniquement lorsque l'application démarre est que vous devez redémarrer l'application si vous modifiez le configfile afin de charger les nouvelles valeurs. En ce qui concerne ce serait à travers cela, ce serait de charger le fichier, de sauvegarder le "lastmodifieddate" et de recharger le fichier à un point spécifique uniquement si le "lastmodifieddate" a changé.



0
votes

devrais-je juste faire ça?

Classe Willy xxx

en utilisant xxx


0 commentaires