2010-07-05 3 views
2

У меня возникли проблемы получения корректные записи файлов ресурсов и нужна помощь ... вот мой сценарийResourceManager не подбирая правильный файл Resx

У меня есть ряд проектов, которые являются частью большой отчетности решение, которое имеет следующий формат

Plugin. **** Сообщить

  • Reference (папка)
  • DataAccessLayer (папка)
  • DataSets (папка)
  • DataWrappers (папка)
  • Локализация (папка)

    * .cs

Где * это название доклада я собираюсь генерировать

* .cs имеет инструкцию экспорта, чтобы я мог ее забрать с помощью MEF (не уверен, что это актуально, но считалось, что это стоит упомянуть). Пространство имен в * .cs - CompanyName.DataShaper.Plugin. * Отчет. Из-за имени проекта и расположения файлов я изменил пространство имен по умолчанию для каждого проекта как CompanyName.DataShaper.Plugin. * Report (это был просто плагин. * Сообщить перед моим изменением).

Теперь о проблеме .. внутри * .cs Я создаю ResourceManager. Это выглядит, как это ...

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

внутри моего Resx файла конструктора я следующее ...

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; 
      } 

Мой призыв к менеджеру ресурсов выглядит следующим образом ...

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

где _currentCultureInfo является правильным объектом CultureInfo.

У меня есть 4 разных файла resx в моей папке Локализация для каждого проекта (**** Report.resx, **** Report.fr-ca.resx, **** Report.en-gb.resx , **** Report.de-de.resx).

Когда я звоню менеджеру ресурсов, я всегда получаю запись из .resx ... никогда ни одного из других языковых файлов, независимо от объекта CultureInfo, который я передаю в вызов. Что я испортил?

-> Быстрое обновление моего первоначального вопроса, но это, по-видимому, связано с MEF. Я создал свой класс старомодным способом (новый * Report()) и сделал вызов локализации, и он отлично работает

+0

Что с *? Вы действительно собрали сборки спутников? –

+0

У меня есть около 20 различных проектов, и все они следуют одному и тому же соглашению об именах. Он просто представляет имя отчета. Например, один из них - TransactionReport.cs .. поэтому есть TransactionReport.res, TransactionReport.en-gb.resx, Plugin.TransactionReport и т. Д. – Chris

ответ

3

ОК, я понял это. Я получаю файл .resx, потому что он действительно встроен в основная сборка. Другие файлы встраиваются в отдельные библиотеки DLL для каждого языка, поэтому мне нужно скопировать их в ту же папку, в которой я создаю свой контейнер-агрегат, тогда мой диспетчер ресурсов видит все языки.

Смежные вопросы