2010-08-03 8 views
1

Contexte:Comment puis-je implémenter un fichier d'étiquettes pour les régions qui s'intègrent bien avec la structure d'application MVC?

Je travaille sur un site qui sera disponible dans plusieurs régions. Chaque région peut avoir une langue différente, ou différentes orthographes pour la même langue. Nous prévoyons d'utiliser un fichier d'étiquette XML qui contiendra tout le texte qui sera affiché pour une région donnée.

Ainsi regionA chargera RegionALabels.xml et tout son texte proviendra de cela. RegionB va charger RegionBLabels.xml, et ainsi de suite.

Je pense à implémenter cela en structurant le fichier XML afin qu'il suive la même structure que mon application. Par exemple,

<Base> <!--BaseController--> 
    <Home> <!--HomeController--> 
    <HomePartial1> 
     <lblFirstName>text for label with ID lblFirstName</lblFirstName> 
     <lblLastName>text for label with ID lblLastName</lblLastName> 
    </HomePartial1> 
    <HomePartial2> 
     <!--a bunch of labels--> 
    </HomePartial2> 
    </Home> 
    <Accounts> 
    <AccountsPartial1> 
     <!--a bunch of labels--> 
    </AccountsPartial1> 
    <AccountsPartial2> 
     <!--a bunch of labels--> 
    </AccountsPartial2> 
    </Accounts> 
</Base> 

La raison pour laquelle je veux le faire de cette façon est parce que je veux imploy Convention sur la configuration, il devient implicite où trouver le texte pour une vue partielle donnée.

En utilisant cette structure, je peux utiliser Linq-to-XML pour sélectionner le texte correspondant à la vue partielle que je vais rendre. Par exemple, si je suis rendu la HomePartial1 vue partielle, je peux obtenir les étiquettes associées à cette vue partielle avec quelque chose comme:

 var nodes = from f in 
         (from res in this.XmlConfiguration.Descendants("Base") 
         select res).Descendants("Home") 
        select f; 

     var HomePartial1Labels = nodes.Elements("HomePartial1").ToList(); 

Question:

Donc, ce qui est le cas, au fond ce que Je veux demander est de savoir si quelqu'un peut signaler des trous évidents dans cette approche avant que je tente de mettre en œuvre cela? Quelqu'un qui a déjà traité de cela peut-il suggérer quelque chose de mieux?

également, I ont une requriement spécifique pour rendre une vue partielle avec un certain nombre de pattes, dont chacune a pour afficher le texte & un certain nombre de résultats associés à cet onglet. Par exemple, j'ai 3 onglets:

Fund 
Company 
Group 

Si quelqu'un fait une recherche, les onglets doivent afficher le nombre de résultats Les rendements à long terme de recherche de l'onglet, donc si je recherche « JP Morgan » ils deviennent:

Fund (10) // 10 funds contain the name 'JP Morgan' 
Company (12) // 12 companies contain the name 'JP Morgan' 
Group (15) // 15 groups contain the name 'JP Morgan' 

afin de contenir le texte « Fonds », « Société » et « Groupe » dans le fichier d'étiquette, je vais devoir fournir la « (» et «) » aussi, ce qui signifie que je pense que je vais devoir utiliser un espace réservé et le remplacer par la valeur réelle lorsque je rends le partiel. Ainsi, le XML commence à ressembler à:

<Base> <!--BaseController--> 
    <Home> <!--HomeController--> 
    <Tabs> 
     <lblFundTab>Funds (#value#)</lblFundTab> 
     <lblCompanyTab>Company (#value#)</lblCompanyTab> 
     <lblGroupTab>Group (#value#)</lblGroupTab> 
    </Tabs> 
    </Home> 
</Base> 

mais je pense que cela va commencer à regarder en désordre et un peu hackish. Quelqu'un peut-il suggérer quelque chose de mieux? Merci.

+3

Impossible d'utiliser les fichiers de ressources pour cette opération? –

+0

Fichiers de ressources ou pas ... pourquoi le nombre entre parenthèses ne peut-il pas être fonction de votre sortie, ie 'String.Format (" {0} ({1}) ", Your_localised_string, Count_Of_Results);' – Lazarus

+0

@Srinivas, I Je ne suis pas familier avec les fichiers de ressources. Je vais les regarder. @ Lazarus, bon point - je vais le prendre en considération! Merci – DaveDev

Répondre

1

J'ai récemment eu la même chose dans un projet.

J'ai implémenté un LabelService qui enveloppait un tableau singleton de "LabelFiles" qui étaient chargés en mémoire sur application_start. Mon code est donc similaire mais fonctionne sur des objets mémoire et non sur des fichiers xml évitant ainsi de nombreux problèmes d'E/S (verrous, etc.).

Votre fichier d'étiquette xml est très bien, en supposant qu'il soit édité par une application ou éventuellement un développeur, mais s'il est édité par le client/non-techie, comment doivent-ils savoir ce qu'est la "base"? Ou le contrôleur? Etc etc - Je suis un fan de CoC mais parfois il est préférable de se rapprocher de la terminologie de domaine pour les applications spécifiques au domaine.

+0

quoi de CoC ....? – DaveDev

+0

Convention sur la configuration – diarmo