2010-07-05 5 views
2

J'ai un problème obtenir les entrées du fichier de ressources correctes et ont besoin d'aide ... voici mon scénarioResourceManager pas ramasser fichier resx correct

J'ai une série de projets qui font partie d'un grand rapport solution qui suivent ce format

Plugin. **** Signaler

  • Référence (dossier)
  • DataAccessLayer (dossier)
  • DataSets (dossier)
  • DataWrappers (dossier)
  • Localisation (dossier)

    * .cs

Où * est le nom du rapport que je vais générer

Le fichier * .cs a une déclaration d'export pour que je puisse le récupérer en utilisant MEF (je ne sais pas si c'est pertinent, mais je pense qu'il vaut la peine de le mentionner). L'espace de noms dans * .cs est CompanyName.DataShaper.Plugin. * Report. En raison du nom du projet, et l'emplacement des fichiers, j'ai changé l'espace de noms par défaut pour chaque projet à CompanyName.DataShaper.Plugin. * Rapport (c'était juste Plugin. * Rapport avant mon changement).

Maintenant pour le problème .. à l'intérieur de * .cs J'instancie un ResourceManager. Cela ressemble à ça ...

_resourceManager = 
       new ResourceManager("CompanyName.DataShaper.Plugin.*Report.Localization.*Report", 
        Assembly.GetExecutingAssembly()); 

dans mon fichier de concepteur resx je suit ...

internal static global::System.Resources.ResourceManager ResourceManager { 
      get { 
       if (object.ReferenceEquals(resourceMan, null)) { 
        global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CompanyName.DataShaper.Plugin.*Report.Localization.*Report", typeof(*Report).Assembly); 
        resourceMan = temp; 
       } 
       return resourceMan; 
      } 

Mon appel au gestionnaire de ressources ressemble à ceci ...

string resourceString = _resourceManager.GetString(resourceKey, _currrentCultureInfo); 

où _currentCultureInfo est un objet CultureInfo correct.

J'ai 4 fichiers resx différents dans mon dossier de localisation pour chaque projet, (**** Report.resx, **** Report.fr-ca.resx, **** Report.en-gb.resx , **** Report.de-de.resx). Lorsque j'appelle le gestionnaire de ressources, je reçois toujours l'entrée du fichier .resx ... jamais aucun des autres fichiers de langue, quel que soit l'objet CultureInfo que je passe dans l'appel. Qu'est-ce que j'ai foiré?

-> Mise à jour rapide à ma question originale, mais cela semble être liée à MEF. J'ai instancié ma classe à l'ancienne façon (new * Report()) et fait l'appel de localisation et ça marche bien

+0

Qu'est-ce que c'est avec le *? Est-ce que vous faites construire les assemblages satellites? –

+0

J'ai environ 20 projets différents, qui suivent tous la même convention de nommage. Le * représente juste un nom de rapport. Par exemple, l'un d'entre eux est TransactionReport.cs .. il y a donc un TransactionReport.res, TransactionReport.en-gb.resx, Plugin.TransactionReport etc. – Chris

Répondre

3

OK, j'ai compris cela ... Je reçois le fichier .resx parce qu'il est vraiment intégré dans le assemblage principal. Les autres fichiers sont construits dans des DLL séparées pour chaque langue, je dois ensuite les copier dans le même dossier que celui dans lequel je construis mon conteneur agrégé, mon gestionnaire de ressources voit alors toutes les langues.

Questions connexes