2015-09-09 2 views
1

Description:
Je travaille sur un dictionnaire pour une MultiLingual, MultiOrganizationCMS.Comment puis-je créer une autre colonne dans programatically fichier resx

Actuellement, nous utilisons la solution de base de données (Sql Server), mais en raison du trafic massif de la base de données, nous recherchons une solution alternative et j'ai trouvé des fichiers .resx.

Ici, nous allons créer un fichier .resx par programme et un fichier .resx/Language. Dans chaque fichier .resx, nous voulons ajouter un ID d'organisation.Vous pouvez voir le fichier .resx pour la langue anglaise ci-dessous.

Nous voulons que cette structure .resx

 
Name Value  Comment     OrganizationId 
About About  this file is for english   1 
Login Login  this file is for english   2 

Le scénario est que quand dans mes cms un lang est ajouté i créerai un fichier de ressources avec elle qui contiendra le dictionnaire (clé anglais, cette langue valeur) pour la langue.

Maintenant tout se serait passé comme prévu si un mot aurait une signification mais il y a une exigence que Two organization can one have different meaning pour un seul mot. Par exemple, le mot hello aura la signification abc pour l'organisation1 et aura la signification abc2 pour l'organisation2.

Ma question:
1.How je peux le faire en utilisant le fichier .resx et si ce ne est pas possible en utilisant le fichier .resx alors ce qui est le plus efficace (vitesse, maintainance, flexibilité) de remplacement pour ce scénario.

Mon code:
Actuellement, je suis en train this échantillon:

   // Define a resource file named CarResources.resx. 
      using (ResXResourceWriter resx = new ResXResourceWriter(@"D:\VSProjects\CreateResourceFile\CreateResourceFile\CarResources.resx")) 
      { 

       resx.AddResource(new ResXDataNode("About", "About"){ Comment = "this file is for english" }); 
       resx.AddResource("Login", "Login"); 
       resx.AddResource("News", "News"); 
       resx.AddResource("Headline", "Headline"); 
       resx.AddResource("Information", SystemIcons.Information); 

      } 
+2

La valeur de l'ID d'organisation n'appartient pas à un fichier de ressources. – tdbeckett

+0

@tdbeckett oui, cet organizationId est le problème principal, comment puis-je ajouter cette colonne OrganizationId dans le fichier .resx – Dragon

Répondre

4

resx ont le schéma strict et il ne comprend pas de champ supplémentaire que vous voulez. Ainsi, même si vous parvenez à ajouter le fichier déposé (c'est-à-dire avec une API XML régulière), les méthodes de ressources standard .Net échoueront probablement à traiter de tels fichiers modifiés. En fonction de vos besoins, vous pouvez utiliser un XML entièrement personnalisé (LINQ-to-XML fournit un moyen facile de créer/lire des documents XML) ou si vous voulez vraiment utiliser des fichiers resx - partitionner les fichiers par organisation (en plus de language) like

text.org1.en-us.resx 
text.org2.en-us.resx 
text.org1.fr.rest 
+0

Thnks pour votre réponse rapide et efficace.Btw il y a plus de 150 organisations/sites Web sont en cours d'exécution sur notre CMS, donc je pense que le partitionnement ne sera pas une bonne idée parce que je suppose que créer et maintenir un grand nombre de fichiers de ressources dynamiques est un mal de tête. Comme pour le moment, je suis assez impressionné par l'idée de linq à xml. – Dragon

+0

@Sadaquat Remarque: la réponse suppose que vous avez déjà examiné des solutions plus traditionnelles au trafic DB comme la mise en mémoire cache en mémoire (avec des classes .Net) ou même la mise en cache distribuée (memcached, redis, ...). Passer aux fichiers sur disque ne serait pas mon premier choix ... –

+0

Ce que vous dites sur la création de mon propre lecteur/graveur de ressources. Qui exigera plus d'effort 1.creating un lecteur de ressources/écrivain personnalisé pour les fichiers .resx ou 2.Créer un fichier xml du début à la fin? – Dragon