Глобализация .NET и спутниковые библиотеки DLL

Я работаю над локализацией приложения, написанного на C#.

Кажется, все работает хорошо, используя вспомогательные сборки ресурсов для перевода строк каждой формы (согласно этому руководству: http://msdn.microsoft.com/en-us/library/y99d1cd3%28VS.71%29)..aspx)

Однако в конечном итоге приложению потребуется довольно много языков, что означает множество каталогов в моем рабочем каталоге (например, /zh-tw, /zh-cn, /fr-FR, /ja-JP и т. д.). Я хотел бы немного почистить это, разместив их все в подкаталоге /languages ​​или /resources (другими словами, установить «базовый путь для вспомогательных сборок»). Но я искал повсюду и не смог найти никакого способа настроить расположение этих спутниковых сборок.

Любые советы будут очень признательны!


person Metal450    schedule 12.12.2009    source источник


Ответы (4)


Нашел еще более простое решение - в app.config:

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

Затем вы можете просто бросить все эти каталоги в подкаталог «Lang», и он будет работать прямо из коробки! Событие после сборки также удобно для автоматического копирования их туда после компиляции :)

person Metal450    schedule 12.12.2009


ИМХО, я бы ничего не менял. В .NET есть стандартный механизм локализации, основанный на вспомогательных dll и этих подкаталогах. Если вы используете инструмент для локализации, например. Пассоло, он тоже будет поддерживать именно эту структуру и никак иначе.

Будет много подкаталогов... и что? Все остальное будет достаточно сложно.

person Stefan Steinegger    schedule 12.12.2009

Добавьте все ваши файлы ресурсов (например, *.resx) в папку /Resource и создайте объект ResourceManager, как показано ниже.

System.Resources.ResourceManager rm = new System.Resources.ResourceManager("ИмяПриложения.Ресурсы.МойРесурс", Assembly.GetExecutingAssembly());

Здесь скажем, что для lang de-DE ваш файл resx будет называться MyResource.de-DE.resx

person Neo    schedule 16.02.2010