Путь к файлам локализации в Visual Studio - PullRequest
2 голосов
/ 28 декабря 2010

Я не могу найти решение своей проблемы в течение очень долгого времени, надеюсь, здесь кто-нибудь может помочь :)

Я занимаюсь разработкой приложения для Visual Studio 2008 (C #) и хочу сделать его многоязычным.

Это основное приложение WinForm (назовите его Main.exe), которое загружает плагины во время выполнения. «Плагин» - это UserControl, скомпилированный в файл .dll, куда я помещаю всю логику и элементы плагина. При необходимости Main.exe загружает сборку из файла .dll:
Assembly asm = Assembly.LoadFile (pluginFilePath);
и прикрепите UserControl от него к панели.

Я перевожу проекты следующим образом: в обозревателе решений я помещаю файл Messages.resx и добавляю строки и сообщения на языке по умолчанию (т.е. имя = привет, значение = доброе утро всем). Затем я делаю копию файла resx и называю его Messages.es-ES.resx для перевода на испанский язык. Измените все значения на испанский (имя = приветствия, значение = Привет, задачи). То же для других языков.
При использовании в коде я могу просто использовать:
Messages.greetings
чтобы получить локализованный текст (и IntelliSense работает с этим решением, поэтому я хочу сделать это таким образом).

Когда я компилирую проект, у меня следующая структура:

C: \ APP_DIR \
| ---------------- Main.exe
| ---------------- es-ES \ Main.resources.dll <- файл локализации моей основной программы в каталоге es-ES. </em>
| ---------------- Плагины \ <- каталог, в котором я храню плагины в отдельных директориях </em>

Теперь, делая то же самое с плагином (myPlugin.dll), я получаю следующие файлы:
C: \ Plugin_dir \
| --------------- myPlugin.dll
| --------------- es-ES \ myPlugin.resources.dll <- файл локализации моего плагина </em>

Теперь проблема в том, когда я пытаюсь заставить его работать вместе: Я хочу развернуть плагин С файлом локализации и поставить его следующим образом:
C: \ APP_DIR \
| ---------------- Main.exe
| ---------------- es-ES \ Main.resources.dll
| ---------------- Плагины \ MyPlugin \ myPlugin.dll
| ---------------- Плагины \ MyPlugin \ es-ES \ myPlugin.resources.dll

В main.exe я установил оба:
System.Threading.Thread.CurrentThread.CurrentUICulture.Name и System.Threading.Thread.CurrentThread.CurrentCulture.Name
на новый CultureInfo ("es-ES") и программа Main.exe запускается на испанском, как я и хотел, но когда я загружаю плагин из .dll, он по умолчанию (английский) язык ...

Оба (Main и plugin) только на испанском языке, если структура следующая:
C: \ APP_DIR \
| ---------------- Main.exe
| ---------------- es-ES \ Main.resources.dll
| ---------------- es-ES \ myPlugin.resources.dll
| ---------------- Плагины \ MyPlugin \ myPlugin.dll

но я не хочу, чтобы это было так - я не хочу, чтобы файл локализации плагина находился в другом каталоге, кроме самого плагина.

Итак, мой вопрос: кто-нибудь знает, как решить эту проблему? Есть ли способ «принудительно» загрузить файл локализации по определенному пути или установить некоторые параметры сборки, где ее искать?
С уважением,
Marcin

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

У меня были те же проблемы в сценарии с плагином. После изменения Assembly.LoadFile на Assembly.LoadFrom все заработало как положено.

0 голосов
/ 02 апреля 2011

Если я правильно понимаю вашу проблему, вы не сможете получить текст на испанском языке, если dll испанского ресурса находится в папке Plugins \ es-ES.Однако это работает, если вы поместите файл ресурсов непосредственно в <\ es-ES? </p>

. Один из простых способов исправить это - указать .NET включить папку MyPlugins при поиске сборок.

Это можно сделать с помощью следующего кода в файле app.config.

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="myPlugin"/>
      </assemblyBinding>
   </runtime>
</configuration>

http://msdn.microsoft.com/en-us/library/823z9h8w(v=VS.100).aspx

0 голосов
/ 28 декабря 2010

Есть ли способ «принудительно» загрузить файл локализации по определенному пути или установить некоторые параметры сборки, где его искать?

Нет, нет.Сателлитные сборки должны находиться либо в GAC, либо в подкаталогах каталога приложения.Подробнее см. на этой странице .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...