Сложная проблема с ресурсами и локализацией веб-форм ASP.NET
У меня есть следующие нестандартные настройки (VS2008, .NET 3.5 SP1):
Существует основной веб-проект под названием MainSite, и есть несколько "подключаемых" веб-проектов с разными именами.
При создании этих плагинов у меня есть пользовательский шаг сборки, который вызывает aspnet_compiler.exe
а также aspnet_merge.exe
, В результате получаются два файла.DLL - имя_плагина.dll и имя_плагина _deploy.dll. Первый содержит классы codebehind, второй содержит код, сгенерированный из файлов.ascx.
Эти плагины.DLL затем копируются в /MainSite/bin/Plugins/
папка. Во время выполнения (запуска приложения) приложение MainSite просматривает эту папку и динамически загружает туда все файлы.DLL.
Все мои формы находятся в плагинах, в файлах.ascx. Основное приложение - это просто скелет, который загружает эти пользовательские элементы управления.ascx по мере необходимости.
И теперь возникает необходимость в локализации. В идеале я хотел бы иметь следующее:
- При создании ресурсов в Visual Studio для каждой формы должен быть отдельный файл ресурсов (файл.ascx), чтобы людям было легче локализовать формы параллельно.
- Хороший
meta:resourcekey
метод в файлах.ascx очень удобен для локализации элементов управления; - Механизм автоматического восстановления ресурса / языка ресурсов в.NET должен быть применим;
- Результат компиляции должен быть таким, чтобы файлы всех плагинов могли быть скопированы на
/MainSite/bin/Plugins/
папка. Если для каждого языка / культуры есть файл.DLL, и они должны быть помещены в определенные подпапки - это нормально, если у.DLL из разных плагинов нет конфликтующих имен.
Есть идеи, как этого добиться?
1 ответ
По-видимому, можно реализовать собственные поставщики ресурсов в.NET. Вот статья, которая содержит ссылки на другие статьи, которые объясняют весь процесс. По сути, вы берете значение из meta:resourcekey
и получить значение, где вы хотите. Например, в статье выше вся информация о локализации хранится в БД.