Я задал вопрос ранее, на который был только один ответ. У меня было время поиграть с этим сейчас и у меня есть план, но я хочу получить отзывы о том, хорошая ли это идея.
Проблема:
Я хочу, чтобы у компонента, имеющего имя (инвариантное, используемое для идентификации компонента), его имя было локализовано в приложении, которое его использует, без загрязнения модели компонента атрибутом DisplayName. Компонент может существовать в отдельной dll и динамически загружаться во время выполнения.
Я чувствую, что компонентная dll должна отвечать за предоставление локализованного имени (это похоже на хорошую инкапсуляцию), но приложение, потребляющее компонент, должно нести ответственность за получение / использование локализованного имени (тот факт, что компонент имеет другое имя для цели отображения - это проблема не компонента, а `` представления '', использующего этот компонент)
Решение:
Добавьте ресурс в dll компонентов с тем же именем, что и у файла, в котором находится класс компонента. Добавьте в ресурс строку с ключом, который является именем компонента.
В приложении получите локализованное имя вот так:
ExternalObject obj = GetExternalObject ();
ResourceManager manager = new ResourceManager (obj.GetType ());
string localisedName= manager.GetString (obj.Name);
Этот код, вероятно, будет инкапсулирован в класс Localiser, но он передает суть. Кажется, это работает, но это хорошая идея или есть лучший / более стандартный способ сделать это?
РЕДАКТИРОВАТЬ: Я должен указать, что одна вещь, в которой я не уверен в этом решении, заключается в том, что ресурсы должны находиться в файле .resx с тем же именем, что и файл, в котором находится класс. Это заставляет его работать, поскольку файл ресурсов можно определить по названию типа. Это то же самое, что и локализация форм, кажется, работает, и заставляет Visual Studio помещать .resx в качестве «подкомпонента» файла .cs, что все кажется приятным. Но затем Visual Studio выдает предупреждение (о редактировании ресурса, который является частью другого элемента проекта), если я пытаюсь отредактировать этот файл, что заставляет меня думать, что, возможно, есть другой способ, которым я должен это делать.