Как я должен локализовать подключаемые компоненты
У нас есть приложение, которое будет динамически загружать некоторые компоненты из отдельных библиотек. Эти компоненты имеют фиксированное имя, но мы хотим, чтобы локализованные имена отображались пользователю, поэтому имена должны быть локализованы.
Тот факт, что имя должно быть локализовано, не является проблемой самого компонента, поэтому мы не хотим загрязнять модель компонента таким свойством, как DisplayName или LocalisedName, и ресурсы для компонента находятся в DLL для компонента. Но поскольку эти компоненты являются подключаемыми, у нас не может быть ресурса для отображаемого имени в приложении, так как тогда, когда мы добавили новые компоненты, ресурсы для приложения должны были бы быть обновлены, что лишает смысла делать компоненты подключаемыми,
Есть ли общее решение этой проблемы? Возможные решения, которые мы могли видеть:
1 \ Имейте свойство с именем display name, которое код GUI вызывает для отображения имен. Это работает нормально, с ресурсами, существующими в той же dll, что и (или dll спутника) сборки, которая содержит компонент. Но это, кажется, загрязняет модель информацией, о которой компонент не должен заботиться.
2 \ Попросите приложение с графическим интерфейсом поиска ресурсов для названного компонента из его собственных файлов ресурсов. Это терпит неудачу, потому что приложение должно обновлять свои ресурсы при добавлении новых сборок, содержащих новые динамически загружаемые компоненты.
3 \ Найдите приложение в ресурсах сборки, из которой получен компонент, и найдите локализованное имя компонента. Это кажется хорошим, так как локализованное имя существует в сборке для компонента, поэтому оно распространяется вместе с ним, но приложение с уровнем представления запускает поиск локализованной строки из компонентов dll, поэтому компоненту не нужно ничего знать о локализация и так ее модель не загрязнена.
Возможен ли вариант 3? Есть ли другой вариант, который мы не рассмотрели?
ура...
1 ответ
Вариант 3 - это то, что я бы сделал, и я думаю, что это возможно. Если вы знаете имя плагина и можете создать экземпляр класса, используя отражение. Затем вы запрашиваете этот класс для LocalizedName, которое плагин извлекает из своей сборки ресурсов. Полагаю, вы понимаете, как работают сборки спутниковых ресурсов.
Есть ли что-то конкретное в #3, что не работает для вас? Если вы укажете, что я не смогу помочь...