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